import { Controller, Get, Query, Body, Post, Patch } from "@nestjs/common"; import { Access } from "src/common/decorators/module-access.decorators"; import { Result } from "src/common/errors/result-error.factory"; import { EmployeeDetailedDto } from "src/identity-and-account/employees/dtos/employee-detailed.dto"; import { EmployeeDto } from "src/identity-and-account/employees/dtos/employee.dto"; import { EmployeesGetService } from "src/identity-and-account/employees/services/employees-get.service"; import { ModuleAccessAllowed } from "src/common/decorators/modules-guard.decorators"; import { Modules as ModulesEnum } from ".prisma/client"; import { EmployeesCreateService } from "src/identity-and-account/employees/services/employees-create.service"; import { EmployeesUpdateService } from "src/identity-and-account/employees/services/employees-update.service"; @Controller('employees') export class EmployeesController { constructor( private readonly getService: EmployeesGetService, private readonly createService: EmployeesCreateService, private readonly updateService: EmployeesUpdateService, ) { } @Get('personal-profile') @ModuleAccessAllowed(ModulesEnum.personal_profile) async findOwnProfile(@Access('email') email: string): Promise, string>> { return await this.getService.findOwnProfile(email); } @Get('profile') @ModuleAccessAllowed(ModulesEnum.employee_management) async findProfile(@Access('email') email: string, @Query('employee_email') employee_email?: string, ): Promise, string>> { return await this.getService.findOneDetailedProfile(email, employee_email); } @Get('employee-list') @ModuleAccessAllowed(ModulesEnum.employee_list) async findListEmployees(): Promise> { return this.getService.findListEmployees(); } @Post('create') @ModuleAccessAllowed(ModulesEnum.employee_management) async createEmployee(@Body() dto: EmployeeDetailedDto): Promise> { return await this.createService.createEmployee(dto); } @Patch('update') @ModuleAccessAllowed(ModulesEnum.employee_management) async updateEmployee(@Access('email') email:string, dto:EmployeeDetailedDto, employee_email?: string){ return await this.updateService.updateEmployee(email, dto, employee_email); } }