diff --git a/backend/src/routes/admin.ts b/backend/src/routes/admin.ts index 1b757b6..7b1a8c7 100644 --- a/backend/src/routes/admin.ts +++ b/backend/src/routes/admin.ts @@ -208,12 +208,23 @@ router.get( prisma.$queryRaw`SELECT COUNT(*) as total, COUNT(CASE WHEN status = 'PENDING' THEN 1 END) as pending, COUNT(CASE WHEN status = 'APPROVED' THEN 1 END) as approved, COUNT(CASE WHEN status = 'DECLINED' THEN 1 END) as declined FROM content_requests`, prisma.$queryRaw`SELECT DATE(created_at) as date, COUNT(DISTINCT user_id) as active_users, SUM(CASE WHEN type = 'EARN' THEN amount ELSE 0 END) as earned, SUM(CASE WHEN type = 'SPEND' THEN amount ELSE 0 END) as spent FROM transactions WHERE created_at >= ${thirtyDaysAgo} GROUP BY DATE(created_at) ORDER BY date DESC LIMIT 30`, ]); + + // Cast BigInt to Number for JSON serialization + const cast = (obj: any) => { + if (!obj) return obj; + const res: any = {}; + for (const key of Object.keys(obj)) { + res[key] = typeof obj[key] === "bigint" ? Number(obj[key]) : obj[key]; + } + return res; + }; + res.json({ - users: userStats[0], - transactions: transactionStats[0], - watchStats: watchStats[0], - requests: requestStats[0], - dailyActivity, + users: cast(userStats[0]), + transactions: cast(transactionStats[0]), + watchStats: cast(watchStats[0]), + requests: cast(requestStats[0]), + dailyActivity: (dailyActivity as any[]).map(cast), }); }), );