diff --git a/src/identity-and-account/employees/controllers/employees.controller.ts b/src/identity-and-account/employees/controllers/employees.controller.ts index 8b58d4a..a3dd411 100644 --- a/src/identity-and-account/employees/controllers/employees.controller.ts +++ b/src/identity-and-account/employees/controllers/employees.controller.ts @@ -1,6 +1,8 @@ -import { Controller, Get, Patch, Param, Body, NotFoundException } from "@nestjs/common"; +import { Controller, Get, Patch, Param, Body, NotFoundException, Req, Post } from "@nestjs/common"; +import { Employees } from "@prisma/client"; import { RolesAllowed } from "src/common/decorators/roles.decorators"; import { GLOBAL_CONTROLLER_ROLES, MANAGER_ROLES } from "src/common/shared/role-groupes"; +import { CreateEmployeeDto } from "src/identity-and-account/employees/dtos/create-employee.dto"; import { EmployeeListItemDto } from "src/identity-and-account/employees/dtos/list-employee.dto"; import { EmployeeProfileItemDto } from "src/identity-and-account/employees/dtos/profil-employee.dto"; import { UpdateEmployeeDto } from "src/identity-and-account/employees/dtos/update-employee.dto"; @@ -15,8 +17,9 @@ export class EmployeesController { private readonly archiveService: EmployeesArchivalService, ) { } - @Get('profile/:email') - findOneProfile(@Param('email') email: string): Promise { + @Get('profile') + findOneProfile(@Req() req): Promise { + const email = req.user?.email; return this.employeesService.findOneProfile(email); } @@ -26,12 +29,13 @@ export class EmployeesController { return this.employeesService.findListEmployees(); } - @Patch(':email') + @Patch() @RolesAllowed(...MANAGER_ROLES) - async updateOrArchiveOrRestore(@Param('email') email: string, @Body() dto: UpdateEmployeeDto,) { + async updateOrArchiveOrRestore(@Req() req, @Body() dto: UpdateEmployeeDto,) { // if last_work_day is set => archive the employee // else if employee is archived and first_work_day or last_work_day = null => restore //otherwise => standard update + const email = req.user?.email; const result = await this.archiveService.patchEmployee(email, dto); if (!result) { throw new NotFoundException(`Employee with email: ${email} is not found in active or archive.`) @@ -39,29 +43,10 @@ export class EmployeesController { return result; } - - - //_____________________________________________________________________________________________ - // Deprecated or unused methods - //_____________________________________________________________________________________________ - - // @Post() - // //@RolesAllowed(RoleEnum.ADMIN, RoleEnum.HR, RoleEnum.SUPERVISOR) - // @ApiOperation({summary: 'Create employee' }) - // @ApiResponse({ status: 201, description: 'Employee created', type: CreateEmployeeDto }) - // @ApiResponse({ status: 400, description: 'Incomplete task or invalid data' }) - // create(@Body() dto: CreateEmployeeDto): Promise { - // return this.employeesService.create(dto); - // } - - // @Delete(':email') - // //@RolesAllowed(RoleEnum.ADMIN, RoleEnum.HR, RoleEnum.SUPERVISOR ) - // @ApiOperation({summary: 'Delete employee' }) - // @ApiParam({ name: 'email', type: Number, description: 'Email of the employee to delete' }) - // @ApiResponse({ status: 204, description: 'Employee deleted' }) - // @ApiResponse({ status: 404, description: 'Employee not found' }) - // remove(@Param('email', ParseIntPipe) email: string): Promise { - // return this.employeesService.remove(email); - // } + @Post() + @RolesAllowed(...MANAGER_ROLES) + create(@Body() dto: CreateEmployeeDto): Promise { + return this.employeesService.create(dto); + } } diff --git a/src/identity-and-account/employees/services/employees.service.ts b/src/identity-and-account/employees/services/employees.service.ts index 50873b6..22cee41 100644 --- a/src/identity-and-account/employees/services/employees.service.ts +++ b/src/identity-and-account/employees/services/employees.service.ts @@ -1,4 +1,6 @@ import { Injectable, NotFoundException } from "@nestjs/common"; +import { Employees, Users } from "@prisma/client"; +import { CreateEmployeeDto } from "src/identity-and-account/employees/dtos/create-employee.dto"; import { EmployeeListItemDto } from "src/identity-and-account/employees/dtos/list-employee.dto"; import { EmployeeProfileItemDto } from "src/identity-and-account/employees/dtos/profil-employee.dto"; import { PrismaService } from "src/prisma/prisma.service"; @@ -88,48 +90,50 @@ export class EmployeesService { }; } + async create(dto: CreateEmployeeDto): Promise { + const { + first_name, + last_name, + email, + phone_number, + residence, + external_payroll_id, + company_code, + job_title, + first_work_day, + last_work_day, + is_supervisor, + } = dto; + + return this.prisma.$transaction(async (transaction) => { + const user: Users = await transaction.users.create({ + data: { + first_name, + last_name, + email, + phone_number, + residence, + }, + }); + return transaction.employees.create({ + data: { + user_id: user.id, + external_payroll_id, + company_code, + job_title, + first_work_day, + last_work_day, + is_supervisor, + }, + }); + }); + } + //_____________________________________________________________________________________________ // Deprecated or unused methods //_____________________________________________________________________________________________ - // async create(dto: CreateEmployeeDto): Promise { - // const { - // first_name, - // last_name, - // email, - // phone_number, - // residence, - // external_payroll_id, - // company_code, - // job_title, - // first_work_day, - // last_work_day, - // is_supervisor, - // } = dto; - // return this.prisma.$transaction(async (transaction) => { - // const user: Users = await transaction.users.create({ - // data: { - // first_name, - // last_name, - // email, - // phone_number, - // residence, - // }, - // }); - // return transaction.employees.create({ - // data: { - // user_id: user.id, - // external_payroll_id, - // company_code, - // job_title, - // first_work_day, - // last_work_day, - // is_supervisor, - // }, - // }); - // }); - // } // findAll(): Promise { // return this.prisma.employees.findMany({