import { Body, Controller, Get, HttpCode, HttpStatus, Param, Patch, Post, Query, } from '@nestjs/common'; import { ApiOkResponse, ApiTags } from '@nestjs/swagger'; import { type PageDto } from '../../common/dto/page.dto'; import { RoleType } from '../../constants'; import { ApiPageOkResponse, Auth, Whitelist } from '../../decorators'; import { EmployeeNotFoundException } from '../../exceptions'; import { CreateEmployeeDto } from './dtos/create-employee.dto'; import { EmployeeDto } from './dtos/employee.dto'; import { EmployeePageOptionsDto } from './dtos/get-employee-page.dto'; import { UpdateEmployeeDto } from './dtos/update-employee.dto'; import { EmployeeService } from './employee.service'; @Controller('employee') @ApiTags('employee') export class EmployeeController { constructor(private employeeService: EmployeeService) {} @Get() @Whitelist() @Auth([RoleType.ADMIN, RoleType.USER]) @HttpCode(HttpStatus.OK) @ApiPageOkResponse({ type: EmployeeDto, description: 'Get employees list' }) async getEmployees( @Query() query: EmployeePageOptionsDto, ): Promise<PageDto<EmployeeDto>> { return this.employeeService.findMany(query); } @Post() @Whitelist() @Auth([RoleType.ADMIN]) @HttpCode(HttpStatus.OK) @ApiOkResponse() async createGame(@Body() body: CreateEmployeeDto): Promise<EmployeeDto> { const employeeEntity = await this.employeeService.createEmployee(body); return employeeEntity.toDto(); } @Patch(':id') @Whitelist() @Auth([RoleType.ADMIN]) @HttpCode(HttpStatus.OK) @ApiOkResponse() async updateGame( @Param('id') id: Uuid, @Body() body: UpdateEmployeeDto, ): Promise<EmployeeDto> { const toPatchEntity = await this.employeeService.findOne({ id, }); if (!toPatchEntity) { throw new EmployeeNotFoundException(); } const employeeEntity = await this.employeeService.updateEmployee( toPatchEntity, body, ); return employeeEntity.toDto(); } }