From 2b36993ad04ff9b21d9333f87138db133c4d8f4e Mon Sep 17 00:00:00 2001 From: Thomas Heartman Date: Wed, 22 Jan 2025 09:18:56 +0100 Subject: [PATCH] feat(1-3260): impl fake interface --- .../fake-traffic-data-usage-store.ts | 41 ++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/src/lib/features/traffic-data-usage/fake-traffic-data-usage-store.ts b/src/lib/features/traffic-data-usage/fake-traffic-data-usage-store.ts index b3e6c0f2bf..fa2262f7f7 100644 --- a/src/lib/features/traffic-data-usage/fake-traffic-data-usage-store.ts +++ b/src/lib/features/traffic-data-usage/fake-traffic-data-usage-store.ts @@ -1,9 +1,15 @@ import type { IStatTrafficUsageKey, IStatTrafficUsage, + IStatMonthlyTrafficUsage, } from './traffic-data-usage-store-type'; import type { ITrafficDataUsageStore } from '../../types'; -import { isSameMonth, parse } from 'date-fns'; +import { + differenceInCalendarMonths, + format, + isSameMonth, + parse, +} from 'date-fns'; export class FakeTrafficDataUsageStore implements ITrafficDataUsageStore { private trafficData: IStatTrafficUsage[] = []; @@ -50,4 +56,37 @@ export class FakeTrafficDataUsageStore implements ITrafficDataUsageStore { isSameMonth(data.day, periodDate), ); } + + async getTrafficDataForMonthRange( + monthsBack: number, + ): Promise { + const now = new Date(); + + const data: { [key: string]: IStatMonthlyTrafficUsage } = + this.trafficData + .filter( + (entry) => + differenceInCalendarMonths(now, entry.day) <= + monthsBack, + ) + .reduce((acc, entry) => { + const month = format(entry.day, 'yyyy-MM'); + const key = `${month}-${entry.trafficGroup}-${entry.statusCodeSeries}`; + + if (acc[key]) { + acc[key].count += entry.count; + } else { + acc[key] = { + month, + trafficGroup: entry.trafficGroup, + statusCodeSeries: entry.statusCodeSeries, + count: entry.count, + }; + } + + return acc; + }, {}); + + return Object.values(data); + } }