fix(migration): fix some migration problems from legacy db

This commit is contained in:
Matthieu Haineault 2026-01-06 15:04:41 -05:00
parent 6dae8df0d3
commit 70aefdab73
6 changed files with 51 additions and 43 deletions

View File

@ -107,7 +107,7 @@ model Timesheets {
employee Employees @relation("TimesheetEmployee", fields: [employee_id], references: [id])
archive TimesheetsArchive[] @relation("TimesheetsToArchive")
@@unique([employee_id, start_date], name: "employee_id_start_date")
// @@unique([employee_id, start_date], name: "employee_id_start_date")
@@map("timesheets")
}
@ -144,7 +144,6 @@ model SchedulePresetShifts {
bank_code BankCodes @relation("SchedulePresetShiftsBankCodes", fields: [bank_code_id], references: [id])
preset SchedulePresets @relation("SchedulePresetShiftsSchedulePreset", fields: [preset_id], references: [id])
@@unique([preset_id, week_day])
@@index([preset_id, week_day])
@@map("schedule_preset_shifts")
}
@ -163,7 +162,7 @@ model Shifts {
timesheet Timesheets @relation("ShiftTimesheet", fields: [timesheet_id], references: [id])
archive ShiftsArchive[] @relation("ShiftsToArchive")
@@unique([timesheet_id, date, start_time], name: "unique_ts_id_date_start_time")
// @@unique([timesheet_id, date, start_time], name: "unique_ts_id_date_start_time")
@@map("shifts")
}

View File

@ -21,7 +21,8 @@
// }
// export const extractOldExpenses = async () => {
// for (let id = 1; id <= 61; id++) {
// const list_of_employees = await prisma.employees.findMany();
// for (let id = 1; id <= list_of_employees.length+1; id++) {
// console.log(`Start of Expense migration ***************************************************************`);
@ -63,6 +64,7 @@
// }
// await prisma_legacy.$disconnect();
// await prisma.$disconnect();
// console.log('finished migrating expenses ***************************');
// }
// const findOneNewEmployee = async (id: number): Promise<NewEmployee> => {

View File

@ -22,26 +22,27 @@
// }
// export const extractOldShifts = async () => {
// for (let id = 1; id <= 61; id++) {
// const list_of_employees = await prisma.employees.findMany();
// for (let id = 1; id <= list_of_employees.length + 1; id++) {
// console.log(`Start of shift migration ***************************************************************`);
// const new_employee = await findOneNewEmployee(id);
// console.log(`Employee ${id} found in new DB`);
// const new_timesheets = await findManyNewTimesheets(new_employee.id);
// console.log(`New Timesheets found for employee ${id}`);
// for (const ts of new_timesheets) {
// console.log(`start_date = ${ts.start_date} timesheet_id = ${ts.id}`)
// console.log(new_timesheets.length, `new Timesheets found for employee ${id}`);
// }
// console.log('***************************************************************');
// const old_employee_id = await findOneOldEmployee(new_employee);
// console.log(`Employee ${new_employee.id} found in old DB`);
// const old_timesheets = await findManyOldTimesheets(old_employee_id);
// console.log(`Timesheets for employee ${old_employee_id}/${new_employee.id} found in old DB`);
// console.log(old_timesheets.length, `old timesheets for employee ${new_employee.id} found in old DB`);
// for (const old_timesheet of old_timesheets) {
// if (!old_timesheet.start_date) continue;
// if (!old_timesheet.start_date) {
// console.warn('Start_date of the old_timesheet ', old_timesheet.id, 'invalid, start_date: ', old_timesheet.start_date);
// continue;
// }
// const new_timesheet = new_timesheets.find((ts) => ts.start_date.getTime() === old_timesheet.start_date!.getTime());
// if (!new_timesheet) {
// console.warn(`No new timesheet ${new_timesheet} matching legacy timesheet ${old_timesheet.id}`);
@ -111,6 +112,7 @@
// }
// const createManyNewShifts = async (timesheet_id: number, old_shifts: OldShifts[]) => {
// let shifts_count = 0;
// for (const old_shift of old_shifts) {
// let is_remote = true;
@ -150,6 +152,7 @@
// }
// const bank_code_id = await findBankCodeIdUsingOldCode(old_shift.code);
// try {
// await prisma.shifts.create({
// // where: { unique_ts_id_date_start_time: {
// // timesheet_id,
@ -174,10 +177,13 @@
// bank_code_id: bank_code_id,
// },
// });
// shifts_count++;
// } catch (error) {
// console.log('An error occured during shifts creation');
// console.log('An error occured during shifts creation', error);
// }
// }
// console.warn(shifts_count, ' new shifts created');
// }
// const toHHmmfromLegacyTimestamp = (value: bigint | null): string | null => {

View File

@ -18,21 +18,22 @@
// const prisma_new = new Prisma({});
// export const extractOldTimesheets = async () => {
// for (let id = 1; id <= 61; id++) {
// const new_employee = await findOneNewEmployee(id);
// console.log(`Employee ${id} found in new DB ${new_employee.external_payroll_id}`);
// const list_of_employees = await prisma_new.employees.findMany();
// const old_employee_id = await findOneOldEmployee(new_employee);
// console.log(`Employee ${new_employee.id} found in old DB`);
// for (let id = 1; id <= list_of_employees.length; id++) {
// const new_employee = await findOneNewEmployee(id);
// const old_timesheets = await findManyOldTimesheets(old_employee_id);
// console.log(` ${old_timesheets.length} Timesheets for employee ${old_employee_id} / ${new_employee.id} found in old DB`);
// const old_employee_id = await findOneOldEmployee(new_employee);
// await createManyNewTimesheets(old_timesheets, new_employee);
// console.log(`${old_timesheets.length} New Timesheets created in new DB for employee ${new_employee.id}`);
// const old_timesheets = await findManyOldTimesheets(old_employee_id);
// await createManyNewTimesheets(old_timesheets, new_employee);
// console.log(`${old_timesheets.length} New Timesheets created in new DB for employee ${new_employee.id}`);
// }
// await prisma_legacy.$disconnect();
// await prisma_new.$disconnect();
// console.log('migration of timesheets finished')
// }
// const findOneNewEmployee = async (id: number): Promise<NewEmployee> => {
@ -64,15 +65,18 @@
// }
// const findManyOldTimesheets = async (old_employee_id: string) => {
// console.log('trying to find old timesheets ...');
// const old_timesheets = await prisma_legacy.time_sheets.findMany({
// where: { employee_id: old_employee_id },
// select: { id: true, start_date: true, status: true }
// });
// console.log(old_timesheets.length, 'old timesheets found')
// if (!old_timesheets) throw new Error(`old Timesheets not found for employee_id ${old_employee_id}`)
// return old_timesheets;
// }
// const createManyNewTimesheets = async (old_timesheets: OldTimesheets[], new_employee: NewEmployee) => {
// console.log(old_timesheets.length, ' timesheets ready for creation')
// for (const timesheet of old_timesheets) {
// if (timesheet.start_date == null) {
// console.warn(`start_date invalid for legacy timesheet ${timesheet.id}`);
@ -84,12 +88,9 @@
// }
// try {
// const new_timesheet = await prisma_new.timesheets.upsert({
// where: { employee_id_start_date: { employee_id: new_employee.id, start_date: timesheet.start_date } },
// update: {
// is_approved: timesheet.status,
// },
// create: {
// console.log(`Timesheet with start_date: ${toStringFromDate(timesheet.start_date!)} for employee ${new_employee.id} created`)
// const new_timesheet = await prisma_new.timesheets.create({
// data: {
// employee_id: new_employee.id,
// start_date: timesheet.start_date,
// is_approved: timesheet.status,
@ -99,19 +100,19 @@
// `Timesheet with start_date: ${toStringFromDate(timesheet.start_date!)} for employee ${new_employee.id} not created`
// );
// } catch (error) {
// throw new Error('An error occured during timesheets creation');
// throw new Error('An error occured during timesheets creation', error);
// }
// }
// }
// extractOldTimesheets()
// .then(() => {
// console.log("Migration completed");
// })
// .catch((error) => {
// console.error("Migration failed:", error);
// })
// .finally(async () => {
// await prisma_legacy.$disconnect();
// await prisma_new.$disconnect();
// });
// // extractOldTimesheets()
// // .then(() => {
// // console.log("Migration completed");
// // })
// // .catch((error) => {
// // console.error("Migration failed:", error);
// // })
// // .finally(async () => {
// // await prisma_legacy.$disconnect();
// // await prisma_new.$disconnect();
// // });

View File

@ -17,7 +17,6 @@ export class AuthController {
@Get('/callback')
@UseGuards(OIDCLoginGuard)
loginCallback(@Req() req: Request, @Res() res: Response) {
// res.redirect("http://10.100.251.2:9013/#/v1/login-success");
res.redirect(process.env.REDIRECT_URL_DEV!);
}

View File

@ -8,7 +8,7 @@ export const consolidateRowHoursAndAmountByType = (rows: InternalCsvRow[]): Inte
const map = new Map<string, InternalCsvRow>();
for (const row of rows) {
const key = `${row.timesheet_id}|${row.bank_code}|${row.week_number}|${row.shift_date.toISOString()}`;
const key = `${row.timesheet_id}|${row.bank_code}|${row.week_number}`;
if (!map.has(key)) {
map.set(key, { ...row });
} else {
@ -24,7 +24,7 @@ export const applyOvertimeRequalifications = async (
consolidated_rows: InternalCsvRow[],
overtime_service: OvertimeService,
): Promise<CsvRow[]> => {
const result: CsvRow[] = [];
const result: InternalCsvRow[] = [];
//grouped by timesheet and week number
const grouped_rows = new Map<string, InternalCsvRow[]>();
@ -73,6 +73,7 @@ export const applyOvertimeRequalifications = async (
});
}
// return consolidateRowHoursAndAmountByType(result);
return result;
}