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, @Query('pageSize') pageSize: number, @Query('superior') superior: string, @Query('type') type: string, ) { const data = await this.usersService.findAll( page, pageSize, req.user.userId, superior == 'null' ? null : superior, type == 'null' ? null : type, ); 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('test') async test(@Request() req) { const data = await this.usersService.findAllSubordinate(req.user.userId, 3); 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, @Query('pageSize') pageSize: number, ) { const data = await this.usersService.findBySuperrior( req.user.userId, page, pageSize, ); return { ...data, statusCode: HttpStatus.OK, message: 'success', }; } @Get('find-by-approval') async findByApproval( @Request() req, @Query('page') page: number, @Query('pageSize') pageSize: number, ) { const data = await this.usersService.findApproval(req.user, page, pageSize); 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('approve-user/:id') async approveUser(@Param('id', ParseUUIDPipe) id: string, @Request() req) { return { data: await this.usersService.confirmationUser( id, req.user.userId, 'approved', ), statusCode: HttpStatus.OK, message: 'success', }; } @Put('reject-user/:id') async rejectUser(@Param('id', ParseUUIDPipe) id: string, @Request() req) { return { data: await this.usersService.confirmationUser( id, req.user.userId, 'rejected', ), statusCode: HttpStatus.OK, message: 'success', }; } @Put('resend-user/:id') async resendUser(@Param('id', ParseUUIDPipe) id: string, @Request() req) { return { data: await this.usersService.confirmationUser( id, req.user.userId, 'resend', ), 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), statusCode: HttpStatus.OK, message: 'success', }; } @Put('change-password-partner/:id') async updatePasswordPartner( @Param('id', ParseUUIDPipe) id: string, @Request() req, @Body() request, ) { return { data: await this.usersService.updatePasswordPartner( id, request.password_account, ), 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', }; } }