Openstatus
www.openstatus.dev
1/**
2 * Shared utilities for API routers
3 */
4
5/**
6 * Supported time period values for filtering data
7 */
8export const periods = ["1d", "7d", "14d"] as const;
9
10/**
11 * Period type for filtering data by time range
12 */
13export type Period = (typeof periods)[number];
14
15/**
16 * Converts a period string to a Date object representing the start of that period
17 * @param period - The period to convert (e.g., "1d", "7d", "14d")
18 * @returns Date object representing the start of the period (for use with gte filters)
19 * @example
20 * // Get date for 7 days ago
21 * const date = getPeriodDate("7d");
22 * // Returns: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000)
23 */
24export function getPeriodDate(period: Period): Date {
25 const now = Date.now();
26
27 switch (period) {
28 case "1d":
29 return new Date(now - 1 * 24 * 60 * 60 * 1000);
30 case "7d":
31 return new Date(now - 7 * 24 * 60 * 60 * 1000);
32 case "14d":
33 return new Date(now - 14 * 24 * 60 * 60 * 1000);
34 default:
35 // TypeScript ensures this is exhaustive, but return 7d as safe fallback
36 return new Date(now - 7 * 24 * 60 * 60 * 1000);
37 }
38}