From 76547bb96e2ba277533cabd28690881c87269d33 Mon Sep 17 00:00:00 2001 From: sudacode Date: Thu, 9 Apr 2026 00:42:11 -0700 Subject: [PATCH] feat(stats): allow 365d trends range in HTTP route --- src/core/services/__tests__/stats-server.test.ts | 16 ++++++++++++++++ src/core/services/immersion-tracker-service.ts | 2 +- src/core/services/stats-server.ts | 6 ++++-- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/core/services/__tests__/stats-server.test.ts b/src/core/services/__tests__/stats-server.test.ts index 1ce71916..729ab6d1 100644 --- a/src/core/services/__tests__/stats-server.test.ts +++ b/src/core/services/__tests__/stats-server.test.ts @@ -601,6 +601,22 @@ describe('stats server API routes', () => { assert.deepEqual(body.animePerDay.watchTime, TRENDS_DASHBOARD.animePerDay.watchTime); }); + it('GET /api/stats/trends/dashboard accepts 365d range', async () => { + let seenArgs: unknown[] = []; + const app = createStatsApp( + createMockTracker({ + getTrendsDashboard: async (...args: unknown[]) => { + seenArgs = args; + return TRENDS_DASHBOARD; + }, + }), + ); + + const res = await app.request('/api/stats/trends/dashboard?range=365d&groupBy=month'); + assert.equal(res.status, 200); + assert.deepEqual(seenArgs, ['365d', 'month']); + }); + it('GET /api/stats/trends/dashboard falls back to safe defaults for invalid params', async () => { let seenArgs: unknown[] = []; const app = createStatsApp( diff --git a/src/core/services/immersion-tracker-service.ts b/src/core/services/immersion-tracker-service.ts index 6cbf5841..fe93e508 100644 --- a/src/core/services/immersion-tracker-service.ts +++ b/src/core/services/immersion-tracker-service.ts @@ -488,7 +488,7 @@ export class ImmersionTrackerService { } async getTrendsDashboard( - range: '7d' | '30d' | '90d' | 'all' = '30d', + range: '7d' | '30d' | '90d' | '365d' | 'all' = '30d', groupBy: 'day' | 'month' = 'day', ): Promise { return getTrendsDashboard(this.db, range, groupBy); diff --git a/src/core/services/stats-server.ts b/src/core/services/stats-server.ts index 52185877..cdaeef01 100644 --- a/src/core/services/stats-server.ts +++ b/src/core/services/stats-server.ts @@ -30,8 +30,10 @@ function parseIntQuery(raw: string | undefined, fallback: number, maxLimit?: num return maxLimit === undefined ? parsed : Math.min(parsed, maxLimit); } -function parseTrendRange(raw: string | undefined): '7d' | '30d' | '90d' | 'all' { - return raw === '7d' || raw === '30d' || raw === '90d' || raw === 'all' ? raw : '30d'; +function parseTrendRange(raw: string | undefined): '7d' | '30d' | '90d' | '365d' | 'all' { + return raw === '7d' || raw === '30d' || raw === '90d' || raw === '365d' || raw === 'all' + ? raw + : '30d'; } function parseTrendGroupBy(raw: string | undefined): 'day' | 'month' {