fix(employees): added optional employee_email to findDetailedProfile
This commit is contained in:
parent
6b0763f277
commit
0f509a920f
|
|
@ -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<Modu
|
|||
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) => {
|
||||
acc[mod] = map[mod] ? mod : null;
|
||||
return acc;
|
||||
}, {} as Record<Modules, string | null>);
|
||||
}, {} as Record<Modules, Modules | null>);
|
||||
}
|
||||
|
|
@ -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<Result<Partial<EmployeeDetailedDto>, 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' }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<Result<EmployeeDetailedDto, string>> {
|
||||
const user_id = await this.emailResolver.resolveUserIdWithEmail(email);
|
||||
async findOneDetailedProfile(email: string, employee_email?: string): Promise<Result<EmployeeDetailedDto, string>> {
|
||||
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 = () => {
|
||||
|
||||
// }
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user