diff --git a/src/handler/analysis/analysisFunction.ts b/src/handler/analysis/analysisFunction.ts index 2f9ac89e..9956eefb 100644 --- a/src/handler/analysis/analysisFunction.ts +++ b/src/handler/analysis/analysisFunction.ts @@ -41,8 +41,24 @@ export async function runAnalysis( }, }; + const roundAllNumbers = (val: T): T => { + if (val === null || val === undefined) return val; + if (typeof val === "number") return Math.round(val * 100) / 100 as T; + if (Array.isArray(val)) return val.map(roundAllNumbers) as T; + if (typeof val === "object") { + const out: Record = {}; + for (const k of Object.keys(val as Record)) { + out[k] = roundAllNumbers((val as Record)[k]); + } + return out as T; + } + return val as T; + }; + if (!config.shouldCache) { - return await config.calculateAnalysis(passedArgs, context); + const fresh = await config.calculateAnalysis(passedArgs, context); + const rounded = roundAllNumbers(fresh); + return rounded; } const { @@ -63,8 +79,9 @@ export async function runAnalysis( if (!cacheRow) { const result = await config.calculateAnalysis(passedArgs, context); + const rounded = roundAllNumbers(result); - await kv.set(key, JSON.stringify(result)); + await kv.set(key, JSON.stringify(rounded)); await prismaClient.cachedAnalysis.create({ data: { key, @@ -72,7 +89,8 @@ export async function runAnalysis( tournamentDependencies: tournamentDependencies ?? [], }, }); - return result; + + return rounded as z.infer; } const parsed = JSON.parse(cacheRow.toString());