fix(employees): added optional employee_email to findDetailedProfile

This commit is contained in:
Matthieu Haineault 2025-12-01 15:17:19 -05:00
parent 6b0763f277
commit 0f509a920f
3 changed files with 22 additions and 17 deletions

View File

@ -1,4 +1,4 @@
type Modules = export type Modules =
| 'timesheets' | 'timesheets'
| 'timesheets_approval' | 'timesheets_approval'
| 'employee_list' | 'employee_list'
@ -35,9 +35,9 @@ export const toBooleanFromString = (arr?: readonly string[] | null): Record<Modu
return result; return result;
} }
export const toStringFromBoolean = (map: Record<Modules, boolean>): Record<Modules, string | null> => { export const toStringFromBoolean = (map: Record<Modules, boolean>): Record<Modules, Modules | null> => {
return module_list.reduce((acc, mod) => { return module_list.reduce((acc, mod) => {
acc[mod] = map[mod] ? mod : null; acc[mod] = map[mod] ? mod : null;
return acc; return acc;
}, {} as Record<Modules, string | null>); }, {} as Record<Modules, Modules | null>);
} }

View File

@ -16,16 +16,14 @@ export class EmployeesController {
) { } ) { }
@Get('profile') @Get('profile')
async findProfile( async findProfile(@Access('email') email: string, @Query('employee_email') employee_email?: string,
@Access('email')email: string,
@Query('employee_email') employee_email?: string,
): Promise<Result<Partial<EmployeeDetailedDto>, string>> { ): Promise<Result<Partial<EmployeeDetailedDto>, string>> {
const granted_access = await this.accessGetService.findModuleAccess(email); const granted_access = await this.accessGetService.findModuleAccess(email);
if (!granted_access.success) return { success: false, error: 'INVALID_USER' }; if (!granted_access.success) return { success: false, error: 'INVALID_USER' };
if (!granted_access.data.employee_management) { if (!granted_access.data.employee_management) {
return await this.employeesService.findOwnProfile(email); return await this.employeesService.findOwnProfile(email);
} else if (granted_access.data.employee_management) { } else if (granted_access.data.employee_management) {
return await this.employeesService.findOneDetailedProfile(employee_email ?? email); return await this.employeesService.findOneDetailedProfile(email,employee_email);
} else { } else {
return { success: false, error: 'INVALID_USER' } return { success: false, error: 'INVALID_USER' }
} }

View File

@ -2,7 +2,7 @@ import { Injectable } from "@nestjs/common";
import { Users } from "@prisma/client"; import { Users } from "@prisma/client";
import { Result } from "src/common/errors/result-error.factory"; import { Result } from "src/common/errors/result-error.factory";
import { EmailToIdResolver } from "src/common/mappers/email-id.mapper"; import { EmailToIdResolver } from "src/common/mappers/email-id.mapper";
import { module_list, toBooleanFromString, toStringFromBoolean } from "src/common/mappers/module-access.mapper"; import { module_list, Modules, toBooleanFromString, toStringFromBoolean } from "src/common/mappers/module-access.mapper";
import { toStringFromDate } from "src/common/utils/date-utils"; import { toStringFromDate } from "src/common/utils/date-utils";
import { EmployeeDetailedDto } from "src/identity-and-account/employees/dtos/employee-detailed.dto"; import { EmployeeDetailedDto } from "src/identity-and-account/employees/dtos/employee-detailed.dto";
import { EmployeeDto } from "src/identity-and-account/employees/dtos/employee.dto"; import { EmployeeDto } from "src/identity-and-account/employees/dtos/employee.dto";
@ -109,8 +109,9 @@ export class EmployeesService {
} }
} }
async findOneDetailedProfile(email: string): Promise<Result<EmployeeDetailedDto, string>> { async findOneDetailedProfile(email: string, employee_email?: string): Promise<Result<EmployeeDetailedDto, string>> {
const user_id = await this.emailResolver.resolveUserIdWithEmail(email); const account_email = employee_email ?? email;
const user_id = await this.emailResolver.resolveUserIdWithEmail(account_email);
if (!user_id.success) return { success: false, error: 'INVALID_USER' }; if (!user_id.success) return { success: false, error: 'INVALID_USER' };
const employee = await this.prisma.employees.findUnique({ const employee = await this.prisma.employees.findUnique({
@ -155,17 +156,19 @@ export class EmployeesService {
}); });
if (!employee) return { success: false, error: `EMPLOYEE_NOT_FOUND` }; if (!employee) return { success: false, error: `EMPLOYEE_NOT_FOUND` };
if (!employee.user) return { success: false, error: 'USER_NOT_FOUND' }; if (!employee.user) return { success: false, error: 'USER_NOT_FOUND' };
if (!employee.user.user_module_access) return { success: false, error: 'UNAUTHORIZED_ACCESS' };
let module_access_array: Modules[] = [];
if (employee.user.user_module_access) {
const stringfy_module_access = toStringFromBoolean(employee.user.user_module_access);
module_access_array = module_list
.map(mod => stringfy_module_access[mod])
.filter((value): value is Modules => value !== null && value !== undefined);
}
let company_name = 'Solucom'; let company_name = 'Solucom';
if (employee.company_code === 271583) { if (employee.company_code === 271583) {
company_name = 'Targo'; company_name = 'Targo';
} }
const stringfy_module_access = toStringFromBoolean(employee.user.user_module_access);
const user_module_access_array = module_list
.map(mod => stringfy_module_access[mod])
.filter((value): value is string => value !== null && value !== undefined && value !== '');
return { return {
success: true, success: true,
data: { data: {
@ -182,7 +185,7 @@ export class EmployeesService {
first_work_day: toStringFromDate(employee.first_work_day), first_work_day: toStringFromDate(employee.first_work_day),
last_work_day: employee.last_work_day ? toStringFromDate(employee.last_work_day) : undefined, last_work_day: employee.last_work_day ? toStringFromDate(employee.last_work_day) : undefined,
supervisor_full_name: employee.supervisor ? `${employee.supervisor?.user.first_name}, ${employee.supervisor?.user.last_name}` : '', supervisor_full_name: employee.supervisor ? `${employee.supervisor?.user.first_name}, ${employee.supervisor?.user.last_name}` : '',
user_module_access: user_module_access_array user_module_access: module_access_array
}, },
}; };
} }
@ -227,4 +230,8 @@ export class EmployeesService {
}); });
return { success: true, data: true } return { success: true, data: true }
} }
// async updateEmployeeProfile = () => {
// }
} }