stats.get.ts
1 import { H3Event } from "h3"; 2 import { TimeRangeEnum } from "~~/lib/stats"; 3 import type { TimeRange } from "~~/lib/stats"; 4 import { handleApiError} from "~~/server/utils/logging"; 5 import { calculateStats } from "~~/server/utils/stats"; 6 7 export default defineEventHandler(async (event: H3Event) => { 8 const userId = event.context.user.id; 9 10 try { 11 const query = getQuery(event); 12 const timeRange = query.timeRange as TimeRange; 13 const midnightOffsetSeconds = query.midnightOffsetSeconds 14 ? parseInt(query.midnightOffsetSeconds as string, 10) 15 : undefined; 16 17 if (!timeRange || !Object.values(TimeRangeEnum).includes(timeRange)) { 18 throw handleApiError( 19 400, 20 `Invalid timeRange value: ${timeRange}. User ID: ${userId}`, 21 "Invalid time range specified." 22 ); 23 } 24 25 return await calculateStats(userId, timeRange, midnightOffsetSeconds); 26 } catch (error: any) { 27 if (error && typeof error === "object" && error.statusCode) throw error; 28 const detailedMessageBase = error instanceof Error ? error.message : "Unknown error in stats endpoint"; 29 const detailedMessage = `Stats endpoint failed for user ${userId}. Original error: ${detailedMessageBase}`; 30 throw handleApiError( 31 500, 32 detailedMessage, 33 "Failed to retrieve statistics." 34 ); 35 } 36 });