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]) employee Employees @relation("TimesheetEmployee", fields: [employee_id], references: [id])
archive TimesheetsArchive[] @relation("TimesheetsToArchive") 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") @@map("timesheets")
} }
@ -144,7 +144,6 @@ model SchedulePresetShifts {
bank_code BankCodes @relation("SchedulePresetShiftsBankCodes", fields: [bank_code_id], references: [id]) bank_code BankCodes @relation("SchedulePresetShiftsBankCodes", fields: [bank_code_id], references: [id])
preset SchedulePresets @relation("SchedulePresetShiftsSchedulePreset", fields: [preset_id], references: [id]) preset SchedulePresets @relation("SchedulePresetShiftsSchedulePreset", fields: [preset_id], references: [id])
@@unique([preset_id, week_day])
@@index([preset_id, week_day]) @@index([preset_id, week_day])
@@map("schedule_preset_shifts") @@map("schedule_preset_shifts")
} }
@ -163,7 +162,7 @@ model Shifts {
timesheet Timesheets @relation("ShiftTimesheet", fields: [timesheet_id], references: [id]) timesheet Timesheets @relation("ShiftTimesheet", fields: [timesheet_id], references: [id])
archive ShiftsArchive[] @relation("ShiftsToArchive") 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") @@map("shifts")
} }

View File

@ -21,7 +21,8 @@
// } // }
// export const extractOldExpenses = async () => { // 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 ***************************************************************`); // console.log(`Start of Expense migration ***************************************************************`);
@ -63,6 +64,7 @@
// } // }
// await prisma_legacy.$disconnect(); // await prisma_legacy.$disconnect();
// await prisma.$disconnect(); // await prisma.$disconnect();
// console.log('finished migrating expenses ***************************');
// } // }
// const findOneNewEmployee = async (id: number): Promise<NewEmployee> => { // const findOneNewEmployee = async (id: number): Promise<NewEmployee> => {

View File

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

View File

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

View File

@ -17,7 +17,6 @@ export class AuthController {
@Get('/callback') @Get('/callback')
@UseGuards(OIDCLoginGuard) @UseGuards(OIDCLoginGuard)
loginCallback(@Req() req: Request, @Res() res: Response) { 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!); 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>(); const map = new Map<string, InternalCsvRow>();
for (const row of rows) { 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)) { if (!map.has(key)) {
map.set(key, { ...row }); map.set(key, { ...row });
} else { } else {
@ -24,7 +24,7 @@ export const applyOvertimeRequalifications = async (
consolidated_rows: InternalCsvRow[], consolidated_rows: InternalCsvRow[],
overtime_service: OvertimeService, overtime_service: OvertimeService,
): Promise<CsvRow[]> => { ): Promise<CsvRow[]> => {
const result: CsvRow[] = []; const result: InternalCsvRow[] = [];
//grouped by timesheet and week number //grouped by timesheet and week number
const grouped_rows = new Map<string, InternalCsvRow[]>(); const grouped_rows = new Map<string, InternalCsvRow[]>();
@ -73,6 +73,7 @@ export const applyOvertimeRequalifications = async (
}); });
} }
// return consolidateRowHoursAndAmountByType(result);
return result; return result;
} }