feat: employee history
This commit is contained in:
parent
8ac2527217
commit
3e3d2cf01c
2 changed files with 47 additions and 0 deletions
|
|
@ -472,6 +472,20 @@ model Employee {
|
||||||
employeeCheckup EmployeeCheckup[]
|
employeeCheckup EmployeeCheckup[]
|
||||||
employeeWork EmployeeWork[]
|
employeeWork EmployeeWork[]
|
||||||
employeeOtherInfo EmployeeOtherInfo[]
|
employeeOtherInfo EmployeeOtherInfo[]
|
||||||
|
|
||||||
|
editHistory EmployeeHistory[]
|
||||||
|
}
|
||||||
|
|
||||||
|
model EmployeeHistory {
|
||||||
|
id String @id @default(uuid())
|
||||||
|
field String
|
||||||
|
valueBefore Json
|
||||||
|
valueAfter Json
|
||||||
|
|
||||||
|
timestamp DateTime @default(now())
|
||||||
|
|
||||||
|
masterId String
|
||||||
|
master Employee @relation(fields: [masterId], references: [id], onDelete: Cascade)
|
||||||
}
|
}
|
||||||
|
|
||||||
model EmployeeCheckup {
|
model EmployeeCheckup {
|
||||||
|
|
|
||||||
|
|
@ -635,6 +635,32 @@ export class EmployeeController extends Controller {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const historyEntries: { field: string; valueBefore: string; valueAfter: string }[] = [];
|
||||||
|
|
||||||
|
for (const k of Object.keys(body)) {
|
||||||
|
const field = k as keyof typeof body;
|
||||||
|
|
||||||
|
if (field === "employeeCheckup") continue;
|
||||||
|
if (field === "employeeOtherInfo") continue;
|
||||||
|
if (field === "employeeWork") continue;
|
||||||
|
|
||||||
|
let valueBefore = employee[field];
|
||||||
|
let valueAfter = body[field];
|
||||||
|
|
||||||
|
if (valueBefore === undefined && valueAfter === undefined) continue;
|
||||||
|
|
||||||
|
if (valueBefore instanceof Date) valueBefore = valueBefore.toISOString();
|
||||||
|
if (valueBefore === null || valueBefore === undefined) valueBefore = "";
|
||||||
|
if (valueAfter instanceof Date) valueAfter = valueAfter.toISOString();
|
||||||
|
if (valueAfter === null || valueAfter === undefined) valueAfter = "";
|
||||||
|
|
||||||
|
if (valueBefore !== valueAfter) historyEntries.push({ field, valueBefore, valueAfter });
|
||||||
|
}
|
||||||
|
|
||||||
|
await prisma.employeeHistory.createMany({
|
||||||
|
data: historyEntries.map((v) => ({ ...v, masterId: employee.id })),
|
||||||
|
});
|
||||||
|
|
||||||
return Object.assign(record, {
|
return Object.assign(record, {
|
||||||
profileImageUrl: await presignedGetObjectIfExist(
|
profileImageUrl: await presignedGetObjectIfExist(
|
||||||
MINIO_BUCKET,
|
MINIO_BUCKET,
|
||||||
|
|
@ -663,4 +689,11 @@ export class EmployeeController extends Controller {
|
||||||
|
|
||||||
return await prisma.employee.delete({ where: { id: employeeId } });
|
return await prisma.employee.delete({ where: { id: employeeId } });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Get("{employeeId}/edit-history")
|
||||||
|
async editHistory(@Path() employeeId: string) {
|
||||||
|
return await prisma.employeeHistory.findMany({
|
||||||
|
where: { masterId: employeeId },
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue