58 lines
2.0 KiB
TypeScript
58 lines
2.0 KiB
TypeScript
// import { NotFoundException } from "@nestjs/common";
|
|
|
|
// export function overlaps(
|
|
// a_start_ms: number,
|
|
// a_end_ms: number,
|
|
// b_start_ms: number,
|
|
// b_end_ms: number,
|
|
// ): boolean {
|
|
// return a_start_ms < b_end_ms && b_start_ms < a_end_ms;
|
|
// }
|
|
|
|
// export function resolveBankCodeByType(type: string): Promise<number> {
|
|
// const bank = this.prisma.bankCodes.findFirst({
|
|
// where: { type },
|
|
// select: { id: true },
|
|
// });
|
|
// if (!bank) {
|
|
// throw new NotFoundException({ error_code: 'SHIFT_TYPE_UNKNOWN', message: `unknown shift type: ${type}` });
|
|
// }
|
|
// return bank.id;
|
|
// }
|
|
|
|
// export function normalizeShiftPayload(payload: {
|
|
// date: string,
|
|
// start_time: string,
|
|
// end_time: string,
|
|
// type: string,
|
|
// is_remote: boolean,
|
|
// is_approved: boolean,
|
|
// comment?: string | null,
|
|
// }) {
|
|
// //normalize shift's infos
|
|
// const date = payload.date?.trim();
|
|
// const m = /^(\d{4})-(\d{2})-(\d{2})$/.exec(date ?? '');
|
|
// if (!m) throw new Error(`Invalid date format (expected YYYY-MM-DD): "${payload.date}"`);
|
|
// const year = Number(m[1]), mo = Number(m[2]), d = Number(m[3]);
|
|
|
|
// const asLocalDateOn = (input: string): Date => {
|
|
// // HH:mm ?
|
|
// const hm = /^(\d{2}):(\d{2})$/.exec((input ?? '').trim());
|
|
// if (hm) return new Date(year, mo - 1, d, Number(hm[1]), Number(hm[2]), 0, 0);
|
|
// const iso = new Date(input);
|
|
// if (isNaN(iso.getTime())) throw new Error(`Invalid time: "${input}"`);
|
|
// return new Date(year, mo - 1, d, iso.getHours(), iso.getMinutes(), iso.getSeconds(), iso.getMilliseconds());
|
|
// };
|
|
|
|
// const start_time = asLocalDateOn(payload.start_time);
|
|
// const end_time = asLocalDateOn(payload.end_time);
|
|
|
|
// const type = (payload.type || '').trim().toUpperCase();
|
|
// const is_remote = payload.is_remote;
|
|
// const is_approved = payload.is_approved;
|
|
// //normalize comment
|
|
// const trimmed = typeof payload.comment === 'string' ? payload.comment.trim() : null;
|
|
// const comment = trimmed && trimmed.length > 0 ? trimmed : null;
|
|
|
|
// return { date, start_time, end_time, type, is_remote, is_approved, comment };
|
|
// }
|