diff --git a/apps/admin/data/fitai.db b/apps/admin/data/fitai.db index 858699d..2e0bd3d 100644 Binary files a/apps/admin/data/fitai.db and b/apps/admin/data/fitai.db differ diff --git a/apps/admin/src/app/api/gyms/[id]/stats/route.ts b/apps/admin/src/app/api/gyms/[id]/stats/route.ts index 8a8b7c1..9da109a 100644 --- a/apps/admin/src/app/api/gyms/[id]/stats/route.ts +++ b/apps/admin/src/app/api/gyms/[id]/stats/route.ts @@ -80,7 +80,8 @@ export async function GET( } // Get recent activity (attendance in last 30 days) - const thirtyDaysAgo = Date.now() - 30 * 24 * 60 * 60 * 1000; + // Database stores timestamps in seconds, so convert milliseconds to seconds + const thirtyDaysAgo = Math.floor(Date.now() / 1000) - 30 * 24 * 60 * 60; const attendanceResult = (await db.all( sql`SELECT COUNT(*) as count FROM attendance WHERE user_id IN (SELECT id FROM users WHERE gym_id = ${gymId}) diff --git a/apps/admin/src/app/attendance/page.tsx b/apps/admin/src/app/attendance/page.tsx index e9795dc..59b1852 100644 --- a/apps/admin/src/app/attendance/page.tsx +++ b/apps/admin/src/app/attendance/page.tsx @@ -69,16 +69,16 @@ export default function AttendancePage() { {record.type}
Last Visit:{" "} - {selectedUser.client.lastVisit + {selectedUser.lastCheckInTime ? new Date( - selectedUser.client.lastVisit, + selectedUser.lastCheckInTime, ).toLocaleDateString() : "Never"}
diff --git a/apps/admin/src/hooks/use-api.ts b/apps/admin/src/hooks/use-api.ts index 7073f91..10653e7 100644 --- a/apps/admin/src/hooks/use-api.ts +++ b/apps/admin/src/hooks/use-api.ts @@ -55,8 +55,8 @@ export interface Gym { export interface AttendanceRecord { id: string; userId: string; - checkIn: string; - checkOut?: string; + checkInTime: Date; + checkOutTime?: Date; date: string; type?: string; } diff --git a/apps/admin/src/lib/database/drizzle.ts b/apps/admin/src/lib/database/drizzle.ts index b0e6a35..76ce95e 100644 --- a/apps/admin/src/lib/database/drizzle.ts +++ b/apps/admin/src/lib/database/drizzle.ts @@ -1318,9 +1318,14 @@ export class DrizzleDatabase implements IDatabase { membershipStatus: String( row.membershipStatus, ) as Client["membershipStatus"], - joinDate: new Date(row.joinDate as number | Date), + joinDate: + typeof row.joinDate === "number" + ? new Date(row.joinDate * 1000) + : new Date(row.joinDate as Date), lastVisit: row.lastVisit - ? new Date(row.lastVisit as number | Date) + ? typeof row.lastVisit === "number" + ? new Date(row.lastVisit * 1000) + : new Date(row.lastVisit as Date) : undefined, emergencyContact: row.emergencyContactName ? { @@ -1363,12 +1368,20 @@ export class DrizzleDatabase implements IDatabase { id: String(row.id), userId: String(row.userId), type: String(row.type) as Attendance["type"], - checkInTime: new Date(row.checkInTime as number | Date), + checkInTime: + typeof row.checkInTime === "number" + ? new Date(row.checkInTime * 1000) + : new Date(row.checkInTime as Date), checkOutTime: row.checkOutTime - ? new Date(row.checkOutTime as number | Date) + ? typeof row.checkOutTime === "number" + ? new Date(row.checkOutTime * 1000) + : new Date(row.checkOutTime as Date) : undefined, notes: row.notes ? String(row.notes) : undefined, - createdAt: new Date(row.createdAt as number | Date), + createdAt: + typeof row.createdAt === "number" + ? new Date(row.createdAt * 1000) + : new Date(row.createdAt as Date), }; }