Files
fotospiel-app/resources/js/guest-v2/services/statsApi.ts
Codex Agent 6062b4201b
Some checks failed
linter / quality (push) Has been cancelled
tests / ci (push) Has been cancelled
tests / ui (push) Has been cancelled
Update guest v2 home and tasks experience
2026-02-03 18:59:30 +01:00

49 lines
1.3 KiB
TypeScript

import { getDeviceId } from '../lib/device';
import { fetchJson } from './apiClient';
import type { EventStats } from './eventApi';
const statsCache = new Map<string, { etag: string | null; data: EventStats }>();
export async function fetchEventStats(eventToken: string): Promise<EventStats> {
const cached = statsCache.get(eventToken);
const response = await fetchJson<{
online_guests?: number;
tasks_solved?: number;
guest_count?: number;
likes_count?: number;
latest_photo_at?: string | null;
}>(
`/api/v1/events/${encodeURIComponent(eventToken)}/stats`,
{
headers: {
'X-Device-Id': getDeviceId(),
},
etag: cached?.etag ?? null,
noStore: true,
}
);
if (response.notModified && cached) {
return cached.data;
}
const stats: EventStats = {
onlineGuests: response.data?.online_guests ?? 0,
tasksSolved: response.data?.tasks_solved ?? 0,
guestCount: response.data?.guest_count ?? 0,
likesCount: response.data?.likes_count ?? 0,
latestPhotoAt: response.data?.latest_photo_at ?? null,
};
statsCache.set(eventToken, { etag: response.etag, data: stats });
return stats;
}
export function clearStatsCache(eventToken?: string) {
if (eventToken) {
statsCache.delete(eventToken);
return;
}
statsCache.clear();
}