diff --git a/src/common/mappers/module-access.mapper.ts b/src/common/mappers/module-access.mapper.ts index b6a666a..fbc7ae7 100644 --- a/src/common/mappers/module-access.mapper.ts +++ b/src/common/mappers/module-access.mapper.ts @@ -1,4 +1,4 @@ -type Modules = +export type Modules = | 'timesheets' | 'timesheets_approval' | 'employee_list' @@ -35,9 +35,9 @@ export const toBooleanFromString = (arr?: readonly string[] | null): Record): Record => { +export const toStringFromBoolean = (map: Record): Record => { return module_list.reduce((acc, mod) => { acc[mod] = map[mod] ? mod : null; return acc; - }, {} as Record); + }, {} as Record); } \ No newline at end of file diff --git a/src/identity-and-account/employees/controllers/employees.controller.ts b/src/identity-and-account/employees/controllers/employees.controller.ts index 2e2af4c..2cd9229 100644 --- a/src/identity-and-account/employees/controllers/employees.controller.ts +++ b/src/identity-and-account/employees/controllers/employees.controller.ts @@ -16,16 +16,14 @@ export class EmployeesController { ) { } @Get('profile') - async findProfile( - @Access('email')email: string, - @Query('employee_email') employee_email?: string, + async findProfile(@Access('email') email: string, @Query('employee_email') employee_email?: string, ): Promise, string>> { const granted_access = await this.accessGetService.findModuleAccess(email); if (!granted_access.success) return { success: false, error: 'INVALID_USER' }; if (!granted_access.data.employee_management) { return await this.employeesService.findOwnProfile(email); } else if (granted_access.data.employee_management) { - return await this.employeesService.findOneDetailedProfile(employee_email ?? email); + return await this.employeesService.findOneDetailedProfile(email,employee_email); } else { return { success: false, error: 'INVALID_USER' } } diff --git a/src/identity-and-account/employees/services/employees.service.ts b/src/identity-and-account/employees/services/employees.service.ts index 7db5c86..4b550ee 100644 --- a/src/identity-and-account/employees/services/employees.service.ts +++ b/src/identity-and-account/employees/services/employees.service.ts @@ -2,7 +2,7 @@ import { Injectable } from "@nestjs/common"; import { Users } from "@prisma/client"; import { Result } from "src/common/errors/result-error.factory"; 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 { EmployeeDetailedDto } from "src/identity-and-account/employees/dtos/employee-detailed.dto"; import { EmployeeDto } from "src/identity-and-account/employees/dtos/employee.dto"; @@ -109,8 +109,9 @@ export class EmployeesService { } } - async findOneDetailedProfile(email: string): Promise> { - const user_id = await this.emailResolver.resolveUserIdWithEmail(email); + async findOneDetailedProfile(email: string, employee_email?: string): Promise> { + 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' }; 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.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'; if (employee.company_code === 271583) { 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 { success: true, data: { @@ -182,7 +185,7 @@ export class EmployeesService { first_work_day: toStringFromDate(employee.first_work_day), 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}` : '', - 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 } } + + // async updateEmployeeProfile = () => { + + // } } \ No newline at end of file