From dcff831e7d8c653375419b21112c3b3d8169c692 Mon Sep 17 00:00:00 2001 From: hailin Date: Mon, 26 Jan 2026 08:40:09 -0800 Subject: [PATCH] fix(analytics): handle statDate as string from database - Fix toDto method to handle statDate being string or Date - Fix getTrendData method to handle statDate being string or Date - PostgreSQL date type returns string, not Date object Co-Authored-By: Claude Sonnet 4.5 --- .../services/statistics-aggregation.service.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/services/evolution-service/src/analytics/application/services/statistics-aggregation.service.ts b/packages/services/evolution-service/src/analytics/application/services/statistics-aggregation.service.ts index 868524e..eb15c25 100644 --- a/packages/services/evolution-service/src/analytics/application/services/statistics-aggregation.service.ts +++ b/packages/services/evolution-service/src/analytics/application/services/statistics-aggregation.service.ts @@ -133,7 +133,9 @@ export class StatisticsAggregationService { const result: Record = {}; for (const metric of params.metrics) { result[metric] = filtered.map(s => ({ - date: s.statDate.toISOString().split('T')[0], + date: s.statDate instanceof Date + ? s.statDate.toISOString().split('T')[0] + : String(s.statDate).split('T')[0], // eslint-disable-next-line @typescript-eslint/no-explicit-any value: Number((s as any)[metric] || 0), })); @@ -373,8 +375,13 @@ export class StatisticsAggregationService { } private toDto(orm: DailyStatisticsORM): DailyStatisticsDto { + // Handle statDate being either Date or string + const statDateStr = orm.statDate instanceof Date + ? orm.statDate.toISOString().split('T')[0] + : String(orm.statDate).split('T')[0]; + return { - statDate: orm.statDate.toISOString().split('T')[0], + statDate: statDateStr, dimension: orm.dimension, dimensionValue: orm.dimensionValue, newUsers: Number(orm.newUsers),