Files
minecraft-account-manager/apps/web/src/lib/admin-metrics.ts
T
dmg ebc7c7df17
CI / validate (push) Successful in 5m24s
Release / release (push) Successful in 11m6s
feat(dashboard): refine activity telemetry and maps
2026-08-01 20:28:32 -04:00

29 lines
1.1 KiB
TypeScript

export interface DailyCount {
day: string;
count: number;
}
export function mergeRiskActivity<
T extends { userId: string; observedAt: Date },
S extends { userId: string | null },
>(latestRows: T[], summaryRows: S[]) {
const summaries = new Map(summaryRows.flatMap((summary) => summary.userId ? [[summary.userId, summary] as const] : []));
return latestRows
.flatMap((activity) => {
const summary = summaries.get(activity.userId);
return summary ? [{ ...activity, ...summary }] : [];
})
.sort((left, right) => right.observedAt.getTime() - left.observedAt.getTime());
}
export function fillDailySeries(rows: DailyCount[], end: Date, days: number) {
const counts = new Map(rows.map((row) => [row.day, Number(row.count)]));
const endDay = new Date(Date.UTC(end.getUTCFullYear(), end.getUTCMonth(), end.getUTCDate()));
return Array.from({ length: days }, (_, index) => {
const date = new Date(endDay);
date.setUTCDate(endDay.getUTCDate() - (days - index - 1));
const day = date.toISOString().slice(0, 10);
return { day, count: counts.get(day) ?? 0 };
});
}