import { Body, Controller, Delete, Get, HttpStatus, Param, ParseUUIDPipe, Post, Put, 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'; import { UpdatePartnerDto } from './dto/update-partner.dto'; import { UpdateSupplierDto } from './dto/update-supplier.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', }; } @Get('supplier/:id/:type') async updateSupplier( @Param('id', ParseUUIDPipe) id: string, @Param('type') type: string, ) { return { data: await this.supplierService.setStatus(id, type), statusCode: HttpStatus.CREATED, message: 'success', }; } @Put('supplier/:id') async setStatusSupplier( @Param('id', ParseUUIDPipe) id: string, @Body() updatePartnerDto: UpdateSupplierDto, ) { return { data: await this.supplierService.update(id, updatePartnerDto), 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('partner/:id/:type') async setStatusPartner( @Param('id', ParseUUIDPipe) id: string, @Param('type') type: string, ) { return { data: await this.partnerService.setStatus(id, type), statusCode: HttpStatus.CREATED, message: 'success', }; } @Put('partner/:id') async updatePartner( @Param('id', ParseUUIDPipe) id: string, @Request() req, @Body() updatePartnerDto: UpdatePartnerDto, ) { return { data: await this.partnerService.update(id, updatePartnerDto, req.user), statusCode: HttpStatus.CREATED, message: 'success', }; } @Get() async findAll(@Request() req, @Query('page') page: number) { const data = await this.usersService.findAll(page, req.user.userId); return { ...data, statusCode: HttpStatus.OK, message: 'success', }; } @Public() @Get('supplier') async findAllSupplier( @Query('page') page: number, @Query('pageSize') pageSize: number, @Request() req, ) { const data = await this.supplierService.findAllSupplier(page, pageSize); return { ...data, statusCode: HttpStatus.OK, message: 'success', }; } @Get('partner') async findAllPartner( @Query('page') page: number, @Query('pageSize') pageSize: number, @Request() req, ) { const [data, count] = await this.partnerService.findAllPartner( page, pageSize, ); return { data, count, statusCode: HttpStatus.OK, message: 'success', }; } @Get('find-by-supperior') async findBySuperrior(@Request() req, @Query('page') page: number) { const data = await this.usersService.findBySuperrior(req.user.userId, page); return { ...data, statusCode: HttpStatus.OK, message: 'success', }; } @Get('find-by-roles/:id') async findByRoles( @Param('id', ParseUUIDPipe) id: string, @Query('page') page: number, @Query('pageSize') pageSize: number, ) { const [data, count] = await this.usersService.findByRoles( id, page, pageSize, ); 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', }; } @Get(':id/:type') async setStatusMembership( @Param('id', ParseUUIDPipe) id: string, @Param('type') type: string, ) { return { data: await this.usersService.setStatus(id, type), statusCode: HttpStatus.CREATED, message: 'success', }; } @Put(':id') async update( @Param('id', ParseUUIDPipe) id: string, @Request() req, @Body() updateUserDto: UpdateUserDto, ) { return { data: await this.usersService.update(id, updateUserDto, req.user), statusCode: HttpStatus.OK, message: 'success', }; } @Put('change-password/:id') async updatePassword( @Param('id', ParseUUIDPipe) id: string, @Request() req, @Body() updateUserDto: UpdateUserDto, ) { return { data: await this.usersService.updatePassword(id, updateUserDto, req.user), 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', }; } }