import { Controller, Get, Post, Body, Put, Param, Delete, ParseUUIDPipe, HttpStatus, Query, Request, } from '@nestjs/common'; import { UsersService } from './users.service'; import { CreateUserDto } from './dto/create-user.dto'; import { UpdateUserDto } from './dto/update-user.dto'; import { Public } from '../auth/public.decorator'; import { CreateSupplierDto } from './dto/create-supplier.dto'; import { SupplierService } from './supplier/supplier.service'; import { PartnerService } from './partner/partner.service'; import { CreatePartnerDto } from './dto/create-partner.dto'; @Controller({ path: 'users', version: '1', }) export class UsersController { constructor( private readonly usersService: UsersService, private readonly supplierService: SupplierService, private readonly partnerService: PartnerService, ) {} @Post() async create(@Request() req, @Body() createUserDto: CreateUserDto) { return { data: await this.usersService.create(createUserDto, req.user), statusCode: HttpStatus.CREATED, message: 'success', }; } @Post('supplier') async createSupplier(@Body() createPartnerDto: CreateSupplierDto) { return { data: await this.supplierService.create(createPartnerDto), statusCode: HttpStatus.CREATED, message: 'success', }; } @Post('partner') async createPartner( @Request() req, @Body() createPartnerDto: CreatePartnerDto, ) { return { data: await this.partnerService.create(createPartnerDto, req.user), statusCode: HttpStatus.CREATED, message: 'success', }; } @Get() async findAll(@Request() req, @Query('page') page: number) { const [data, count] = await this.usersService.findAll( page, req.user.userId, ); return { data, count, statusCode: HttpStatus.OK, message: 'success', }; } @Public() @Get('supplier') async findAllSupplier(@Query('page') page: number) { const [data, count] = await this.supplierService.findAllSupplier(page); return { data, count, statusCode: HttpStatus.OK, message: 'success', }; } @Get('partner') async findAllPartner(@Query('page') page: number) { const [data, count] = await this.partnerService.findAllPartner(page); return { data, count, statusCode: HttpStatus.OK, message: 'success', }; } @Get('find-by-supperior') async findBySuperrior(@Request() req, @Query('page') page: number) { const [data, count] = await this.usersService.findBySuperrior( req.user.userId, page, ); return { data, count, statusCode: HttpStatus.OK, message: 'success', }; } @Get('find-by-roles/:id') async findByRoles( @Param('id', ParseUUIDPipe) id: string, @Query('page') page: number, ) { const [data, count] = await this.usersService.findByRoles(id, page); return { data, count, statusCode: HttpStatus.OK, message: 'success', }; } @Get(':id') async findOne(@Param('id', ParseUUIDPipe) id: string) { return { data: await this.usersService.findOne(id), statusCode: HttpStatus.OK, message: 'success', }; } @Put(':id') async update( @Param('id', ParseUUIDPipe) id: string, @Body() updateUserDto: UpdateUserDto, ) { return { data: await this.usersService.update(id, updateUserDto), statusCode: HttpStatus.OK, message: 'success', }; } @Delete(':id') async remove(@Param('id', ParseUUIDPipe) id: string) { await this.usersService.remove(id); return { statusCode: HttpStatus.OK, message: 'success', }; } }