targo-backend/src/common/mappers/shifts-id.mapper.ts
2026-02-27 10:09:24 -05:00

43 lines
1.4 KiB
TypeScript

import { Prisma } from "prisma/postgres/generated/prisma/client/postgres/client";
import { PrismaClient } from "prisma/postgres/generated/prisma/client/postgres/internal/class";
import { PrismaPostgresService } from "prisma/postgres/prisma-postgres.service";
import { Result } from "src/common/errors/result-error.factory";
type Tx = Prisma.TransactionClient | PrismaClient;
interface ShiftKey {
timesheet_id: number;
date: Date;
start_time: Date;
end_time: Date;
bank_code_id: number;
is_remote: boolean;
comment?: string | null;
}
export class ShiftIdResolver {
constructor(private readonly prisma: PrismaPostgresService) { }
readonly findShiftIdByData = async (
key: ShiftKey,
client?: Tx
): Promise<Result<number, string>> => {
const db = (client ?? this.prisma) as PrismaClient;
const shift = await db.shifts.findFirst({
where: {
timesheet_id: key.timesheet_id,
bank_code_id: key.bank_code_id,
date: key.date,
start_time: key.start_time,
end_time: key.end_time,
is_remote: key.is_remote,
comment: key.comment,
},
select: { id: true },
});
if (!shift) return { success: false, error: `SHIFT_NOT_FOUND` }
return { success: true, data: shift.id };
};
}