diff --git a/server/src/module/attendance/attendance.controller.ts b/server/src/module/attendance/attendance.controller.ts index 0720d41f..81af5981 100644 --- a/server/src/module/attendance/attendance.controller.ts +++ b/server/src/module/attendance/attendance.controller.ts @@ -91,6 +91,11 @@ export class AttendanceController { const record = await this.attendanceService.regularize(result.data); return res.json({ message: "Attendance regularized", record }); } catch (error) { + if (error instanceof Error) { + const msg = error.message; + if (msg.includes("must be after") || msg.includes("must not exceed") || msg.includes("Cannot regularize") || msg.includes("cannot be in the future")) + return res.status(400).json({ message: msg }); + } console.error(error); return res.status(500).json({ message: "Internal Server Error" }); } diff --git a/server/src/module/attendance/attendance.service.ts b/server/src/module/attendance/attendance.service.ts index c5d7762e..234984d5 100644 --- a/server/src/module/attendance/attendance.service.ts +++ b/server/src/module/attendance/attendance.service.ts @@ -138,9 +138,13 @@ export class AttendanceService { const checkIn = new Date(data.checkIn); const checkOut = new Date(data.checkOut); + const now = new Date(); + if (checkIn > now) throw new Error("Check-in time cannot be in the future"); + if (checkOut > now) throw new Error("Check-out time cannot be in the future"); if (checkOut <= checkIn) { throw new Error("Check-out time must be after check-in time"); } + const workHours = (checkOut.getTime() - checkIn.getTime()) / 3600000; return prisma.attendanceRecord.upsert({