From a72ce97f34df117a79be6e90f32ba810d4065200 Mon Sep 17 00:00:00 2001 From: Matt Date: Wed, 25 Dec 2024 15:14:25 -0500 Subject: [PATCH] Fix event feed regression --- .../klaviyo-server/services/events.service.js | 39 +++++++++++++++---- 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/dashboard-server/klaviyo-server/services/events.service.js b/dashboard-server/klaviyo-server/services/events.service.js index 4660a4a..5f312d5 100644 --- a/dashboard-server/klaviyo-server/services/events.service.js +++ b/dashboard-server/klaviyo-server/services/events.service.js @@ -1252,6 +1252,17 @@ export class EventsService { const { timeRange, startDate, endDate, metricIds } = params; const metrics = metricIds || Object.values(METRIC_IDS); + // Get period dates using TimeManager to respect 1 AM day start + let periodStart, periodEnd; + if (startDate && endDate) { + periodStart = this.timeManager.getDayStart(this.timeManager.toDateTime(startDate)); + periodEnd = this.timeManager.getDayEnd(this.timeManager.toDateTime(endDate)); + } else if (timeRange) { + const range = this.timeManager.getDateRange(timeRange); + periodStart = range.start; + periodEnd = range.end; + } + // Try to get from cache first const cacheKey = this.redisService._getCacheKey('events', params); let cachedData = null; @@ -1267,8 +1278,8 @@ export class EventsService { // Fetch events for all specified metrics const eventPromises = metrics.map(metricId => this.getEvents({ - startDate, - endDate, + startDate: periodStart.toISO(), + endDate: periodEnd.toISO(), timeRange, metricId, sort: '-datetime' @@ -1277,13 +1288,27 @@ export class EventsService { const results = await Promise.all(eventPromises); - // Transform results into a keyed object - const batchResults = {}; - metrics.forEach((metric, index) => { - batchResults[metric] = results[index]; + // Transform and flatten the events into a single array + const allEvents = []; + results.forEach((result, index) => { + const metricId = metrics[index]; + const events = result.data || []; + allEvents.push(...events); }); - return batchResults; + // Sort all events by datetime in descending order + allEvents.sort((a, b) => { + const dateA = new Date(a.attributes?.datetime || 0); + const dateB = new Date(b.attributes?.datetime || 0); + return dateB - dateA; + }); + + return { + data: allEvents, + meta: { + total_count: allEvents.length + } + }; } catch (error) { console.error('[EventsService] Error in batch metrics:', error); throw error;