targo-backend/src/identity-and-account/employees/controllers/employees.controller.ts

51 lines
2.3 KiB
TypeScript

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<Result<Partial<EmployeeDetailedDto>, 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<Result<Partial<EmployeeDetailedDto>, string>> {
return await this.getService.findOneDetailedProfile(email, employee_email);
}
@Get('employee-list')
@ModuleAccessAllowed(ModulesEnum.employee_list)
async findListEmployees(): Promise<Result<EmployeeDto[], string>> {
return this.getService.findListEmployees();
}
@Post('create')
@ModuleAccessAllowed(ModulesEnum.employee_management)
async createEmployee(@Body() dto: EmployeeDetailedDto): Promise<Result<boolean, string>> {
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);
}
}