From 923b1dbea9a856a6fad5973a107f4b726de975f8 Mon Sep 17 00:00:00 2001 From: tobinio Date: Sat, 28 Sep 2024 11:31:04 +0200 Subject: [PATCH] latestData api & get stats from date --- server/api/latestDate.ts | 11 +++++++++ server/api/stats.ts | 42 ++++++++++++++++++++++++++++++--- server/utils/api/stats.ts | 13 ++-------- server/utils/statistics.ts | 1 - {server/utils => utils}/date.ts | 0 5 files changed, 52 insertions(+), 15 deletions(-) create mode 100644 server/api/latestDate.ts rename {server/utils => utils}/date.ts (100%) diff --git a/server/api/latestDate.ts b/server/api/latestDate.ts new file mode 100644 index 0000000..c7b013c --- /dev/null +++ b/server/api/latestDate.ts @@ -0,0 +1,11 @@ +export default defineEventHandler(async (event): Promise => { + const storage = useStorage("statistics"); + const gameVersions = await storage.getItem("latestDate"); + + if (!gameVersions) { + setResponseStatus(event, 500); + return null; + } + + return gameVersions; +}); diff --git a/server/api/stats.ts b/server/api/stats.ts index 43c58f7..932c2d0 100644 --- a/server/api/stats.ts +++ b/server/api/stats.ts @@ -1,3 +1,5 @@ +import consola from "consola"; + export default defineEventHandler(async (event): Promise => { const query = getQuery(event); @@ -5,15 +7,49 @@ export default defineEventHandler(async (event): Promise => { const type = query.type as ProjectTypes; const exclusive = query.exclusive === "true"; + let dateKey: string | null = query.date as string; + + if (!dateKey) { + const storage = useStorage("statistics"); + dateKey = await storage.getItem("latestDate"); + } + + if (!dateKey) { + consola.error("no latestDate set"); + + return { + labels: [], + data: [], + }; + } + switch (query.stat) { case "versions": { - return exportStats(mode, type, exclusive, (value) => value.versions); + return exportStats( + mode, + type, + exclusive, + dateKey, + (value) => value.versions, + ); } case "count": { - return exportStats(mode, type, exclusive, (value) => value.count); + return exportStats( + mode, + type, + exclusive, + dateKey, + (value) => value.count, + ); } default: { - return exportStats(mode, type, exclusive, (value) => value.downloads); + return exportStats( + mode, + type, + exclusive, + dateKey, + (value) => value.downloads, + ); } } }); diff --git a/server/utils/api/stats.ts b/server/utils/api/stats.ts index f4e8bc1..d2f5982 100644 --- a/server/utils/api/stats.ts +++ b/server/utils/api/stats.ts @@ -13,19 +13,10 @@ export async function exportStats( versionCategory: string, type: ProjectTypes, exclusive: boolean, + dateKey: string, fn: (value: StatsValue) => number, ): Promise { const storage = useStorage("statistics"); - const dateString = await storage.getItem("latestDate"); - - if (!dateString) { - consola.error("no latestDate set"); - - return { - labels: [], - data: [], - }; - } // key format: Stats let key = `${type}Stats${firstLetterUpperCase(versionCategory)}`; @@ -34,7 +25,7 @@ export async function exportStats( key += "Exclusive"; } - key += dateString; + key += dateKey; const stats = await storage.getItem(key); diff --git a/server/utils/statistics.ts b/server/utils/statistics.ts index 0ae1a9a..ebbb6af 100644 --- a/server/utils/statistics.ts +++ b/server/utils/statistics.ts @@ -1,5 +1,4 @@ import consola from "consola"; -import { dateToKey } from "~~/server/utils/date"; type StatsDataType = Map< string, diff --git a/server/utils/date.ts b/utils/date.ts similarity index 100% rename from server/utils/date.ts rename to utils/date.ts -- 2.51.2