import { Controller, Get, Post, Body, Patch, Param, Delete, Query, Req, UseInterceptors, UploadedFiles } from '@nestjs/common'; import { FilesInterceptor } from '@nestjs/platform-express'; import { InventoryService } from './inventory.service'; import { CreateProductDto } from './dto/create-product.dto'; import { UpdateProductDto } from './dto/update-product.dto'; import { ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; // import { Roles } from '../../common/decorators/roles.decorator'; import { PaginationDto } from '../../common/dto/pagination.dto'; @ApiTags('products') @Controller('products') export class UsersController { constructor(private readonly inventoryService: InventoryService) {} @Get('/store') // @Roles('admin') @ApiOperation({ summary: 'Get all products with pagination and filters' }) @ApiResponse({ status: 200, description: 'Return paginated products.' }) async findAll(@Query() paginationDto: PaginationDto) { const result = await this.inventoryService.findAll(paginationDto,true); return { message: 'products fetched successfully', data: result.data, meta: result.meta }; } @Get('/inventory') // @Roles('admin') @ApiOperation({ summary: 'Get all products with pagination and filters' }) @ApiResponse({ status: 200, description: 'Return paginated products.' }) async findAllByUserId(@Req() req: Request, @Query() paginationDto: PaginationDto) { // console.log(req['user'].id) // const id = 1 const id = Number(req['user'].id); const result = await this.inventoryService.findAllByUserId(id,paginationDto); return { message: 'products fetched successfully', data: result.data, meta: result.meta }; } @Get('/id/:id') // @Roles('admin') @ApiOperation({ summary: 'Get a product by ID' }) @ApiResponse({ status: 200, description: 'Return the product.' }) @ApiResponse({ status: 404, description: 'product not found.' }) async findOne(@Param('id') id: string) { const data = await this.inventoryService.findOne(id); return { message: 'product fetched successfully', data }; } @Post() @ApiOperation({ summary: 'Create a new product' }) @ApiResponse({ status: 201, description: 'Product created successfully.' }) @ApiResponse({ status: 500, description: 'Internal server error.' }) @UseInterceptors(FilesInterceptor('urlImg')) async create( @Req() req: Request, @Body() createUserDto: CreateProductDto, @UploadedFiles() files: Express.Multer.File[], @Query('roleId') roleId?: string, ) { const id = Number(req['user'].id); const data = await this.inventoryService.create(files,createUserDto,id) return { message: 'User created successfully', data }; } @Patch('/upload') @ApiOperation({ summary: 'Update a product' }) @ApiResponse({ status: 200, description: 'Product uploaded successfully.'}) @ApiResponse({ status: 404, description: 'Product not found.' }) @ApiResponse({ status: 500, description: 'Internal server error.' }) @UseInterceptors(FilesInterceptor('urlImg')) async uploadFile( @Req() req: Request, @UploadedFiles() files: Express.Multer.File[], @Body() body: any ) { const id = Number(req['user'].id); const result = await this.inventoryService.saveImages(files,body,id); return { data: result }; } // @Delete(':id') // @Roles('admin') // @ApiOperation({ summary: 'Delete a user' }) // @ApiResponse({ status: 200, description: 'User deleted successfully.' }) // @ApiResponse({ status: 404, description: 'User not found.' }) // async remove(@Param('id') id: string) { // return await this.inventoryService.remove(id); // } }