/ server / api / stats.get.ts
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  });