import { Body,Controller,Delete,Get,Param,ParseIntPipe,Patch,Post,UseGuards } from '@nestjs/common'; import { Employees, Roles as RoleEnum } from '@prisma/client'; import { EmployeesService } from '../services/employees.service'; import { CreateEmployeeDto } from '../dtos/create-employee.dto'; import { UpdateEmployeeDto } from '../dtos/update-employee.dto'; import { RolesAllowed } from '../../../common/decorators/roles.decorators'; import { ApiBearerAuth, ApiOperation, ApiResponse, ApiTags } from '@nestjs/swagger'; import { JwtAuthGuard } from 'src/modules/authentication/guards/jwt-auth.guard'; import { EmployeeEntity } from '../dtos/swagger-entities/employees.entity'; @ApiTags('Employees') @ApiBearerAuth('access-token') @UseGuards(JwtAuthGuard) @Controller('employees') export class EmployeesController { constructor(private readonly employeesService: EmployeesService) {} @Post() @RolesAllowed(RoleEnum.ADMIN, RoleEnum.HR, RoleEnum.SUPERVISOR) @ApiOperation({summary: 'Create employee' }) @ApiResponse({ status: 201, description: 'Employee created', type: EmployeeEntity }) @ApiResponse({ status: 400, description: 'Incomplete task or invalid data' }) create(@Body() dto: CreateEmployeeDto): Promise { return this.employeesService.create(dto); } @Get() @RolesAllowed(RoleEnum.ADMIN, RoleEnum.HR, RoleEnum.SUPERVISOR, RoleEnum.ACCOUNTING) @ApiOperation({summary: 'Find all employees' }) @ApiResponse({ status: 201, description: 'List of employees found', type: EmployeeEntity, isArray: true }) @ApiResponse({ status: 400, description: 'List of employees not found' }) findAll(): Promise { return this.employeesService.findAll(); } @Get(':id') @RolesAllowed(RoleEnum.ADMIN, RoleEnum.HR, RoleEnum.SUPERVISOR,RoleEnum.ACCOUNTING ) @ApiOperation({summary: 'Find employee' }) @ApiResponse({ status: 201, description: 'Employee found', type: EmployeeEntity }) @ApiResponse({ status: 400, description: 'Employee not found' }) findOne(@Param('id', ParseIntPipe) id: number): Promise { return this.employeesService.findOne(id); } @Patch(':id') @RolesAllowed(RoleEnum.ADMIN, RoleEnum.HR, RoleEnum.SUPERVISOR,RoleEnum.ACCOUNTING ) @ApiOperation({summary: 'Update employee' }) @ApiResponse({ status: 201, description: 'Employee updated', type: EmployeeEntity }) @ApiResponse({ status: 400, description: 'Employee not found' }) update( @Param('id', ParseIntPipe) id: number, @Body() dto: UpdateEmployeeDto, ): Promise { return this.employeesService.update(id, dto); } @Delete(':id') @RolesAllowed(RoleEnum.ADMIN, RoleEnum.HR, RoleEnum.SUPERVISOR ) @ApiOperation({summary: 'Delete employee' }) @ApiResponse({ status: 201, description: 'Employee deleted', type: EmployeeEntity }) @ApiResponse({ status: 400, description: 'Employee not found' }) remove(@Param('id', ParseIntPipe) id: number): Promise { return this.employeesService.remove(id); } }