nerdware/apps/web/src/lib/history.ts
AyoubBenziza b3efa27287 feat: game history + question lang/active management
DB:
- quiz_question gains `lang` ('fr' default) and `active` (true default); migration 0002
- only active questions are served to games (pool filter)

History:
- engine writes a game_history row at game end (modes + ranked results), fire-and-forget
- public GET /api/history/:code lists a room's recent games
- lobby shows a "Parties précédentes" collapsible (date, modes, winner/scores)

Back-office:
- create form has a FR/EN language select; lang stored
- per-question active toggle (PATCH /questions/:id) — disable without deleting;
  inactive rows dimmed and labelled
- seeds set lang (opentdb=en, manual/pokemon=fr)

Verified e2e: migration applied; game played → /api/history returns it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-11 17:12:07 +02:00

22 lines
537 B
TypeScript

// Historique public des parties d'une room.
const SERVER_URL = import.meta.env.VITE_SERVER_URL ?? "http://localhost:3001"
export interface GameHistoryEntry {
id: string
playedAt: string
modes: string[]
results: { name: string; score: number }[]
}
export async function fetchHistory(code: string): Promise<GameHistoryEntry[]> {
try {
const res = await fetch(`${SERVER_URL}/api/history/${code}`)
if (!res.ok) {
return []
}
return (await res.json()) as GameHistoryEntry[]
} catch {
return []
}
}