From 193dbecc60363af87cdfea1aa712d06a92275408 Mon Sep 17 00:00:00 2001 From: ToBinio Date: Thu, 16 Apr 2026 09:41:27 +0200 Subject: [PATCH] add time filter for revenue data --- app/pages/charts.vue | 23 +++++++++++++++++----- server/api/stats/time/revenue.ts | 29 ++++++++++++++++++++++++++-- server/utils/processing/aggregate.ts | 21 ++++++++++++++++++-- 3 files changed, 64 insertions(+), 9 deletions(-) diff --git a/app/pages/charts.vue b/app/pages/charts.vue index de870d2..0809921 100644 --- a/app/pages/charts.vue +++ b/app/pages/charts.vue @@ -42,9 +42,14 @@ const time = useFilterItem("time", "all"); const times = computed(() => { - return isProjectStats.value - ? ["all", "last 30 days", "today"] - : ["all", "last 30 days"]; + if (isProjectStats.value) { + return ["all", "last 30 days", "today"]; + } + if (isRevenueStats.value) { + return ["all", "last 30 days", "raw"]; + } + + return ["all", "last 30 days"]; }); const aggregate = useFilterItem("aggregate", "yes"); @@ -79,7 +84,15 @@ const max_days = computed(() => { if (isGroupData.value) return undefined; - return time.value === "all" ? undefined : 30; + if (time.value === "last 30 days") { + return 30; + } + + if (time.value === "raw") { + return -1; + } + + return undefined; }); const { data, isFetching } = useStatData( @@ -157,7 +170,7 @@ explanation="Only show Versions made for a single launcher" /> => { + async (event): Promise => { + const query = querySchema.safeParse(getQuery(event)); + if (!query.success) { + throw createError({ + statusCode: 400, + statusMessage: "Invalid query parameters", + message: query.error.message, + }); + } + var data = await exportRevenueStatsOverTime(); - return data; + + const days = query.data.days ? parseInt(query.data.days, 10) : undefined; + + if (days === undefined) { + return summarize(data, 64, true); + } + + if (days < 0) { + return data; + } + + return summarize(limit(data, days), days, true); }, { maxAge: 60 * 60 * 4 /* 4 hour */, swr: false }, ); diff --git a/server/utils/processing/aggregate.ts b/server/utils/processing/aggregate.ts index 005adb9..304fc0a 100644 --- a/server/utils/processing/aggregate.ts +++ b/server/utils/processing/aggregate.ts @@ -1,6 +1,21 @@ import type { StatExport } from "~~/shared/types/types"; -// get data containing absolute values and convert it to data containing absolute difference +/** + * limit data to values + */ +export function limit(data: StatExport, count: number): StatExport { + data.labels = data.labels.slice(data.labels.length - count, undefined); + + for (const value of data.data) { + value.data = value.data.slice(value.data.length - count, undefined); + } + + return data; +} + +/** + * get data containing absolute values and convert it to data containing absolute difference + */ export function fracture(data: StatExport): StatExport { data.data.map((value) => { const data = []; @@ -18,7 +33,9 @@ export function fracture(data: StatExport): StatExport { return data; } -// summarize data to values +/** + * summarize data to values + */ export function summarize( data: StatExport, count: number, -- 2.51.2