Page introuvable.
diff --git a/apps/web/src/lib/admin-api.ts b/apps/web/src/lib/admin-api.ts new file mode 100644 index 0000000..73735b8 --- /dev/null +++ b/apps/web/src/lib/admin-api.ts @@ -0,0 +1,65 @@ +// Accès HTTP au back-office quiz (TanStack Query l'enrobe côté composant). + +import type { QuizFormat } from "@nerdware/shared" + +const SERVER_URL = import.meta.env.VITE_SERVER_URL ?? "http://localhost:3001" +const TOKEN_KEY = "nerdware-admin-token" + +export function getAdminToken(): string { + return localStorage.getItem(TOKEN_KEY) ?? "" +} +export function setAdminToken(token: string): void { + localStorage.setItem(TOKEN_KEY, token) +} +export function clearAdminToken(): void { + localStorage.removeItem(TOKEN_KEY) +} + +export interface AdminQuestion { + id: string + format: QuizFormat + prompt: string + difficulty: number + source: string + choices: string[] | null + correctIndex: number | null + acceptedAnswers: string[] | null + category: string | null +} + +export interface NewQuestionInput { + format: QuizFormat + prompt: string + category: string + difficulty: number + choices?: string[] + correctIndex?: number + acceptedAnswers?: string[] +} + +async function request+ Jeton invalide ou back-office indisponible.{" "} + +
+ ) : ( + <> +Chargement…
+ )} +{q.prompt}
++ {q.format} · {q.category ?? "—"} · diff. {q.difficulty} · {q.source} +
+ {q.format === "free" ? ( ++ ✔ {q.acceptedAnswers?.join(", ")} +
+ ) : ( ++ {q.choices + ?.map((c, i) => (i === q.correctIndex ? `✔ ${c}` : c)) + .join(" · ")} +
+ )} ++ Coche la bonne réponse. Les choix vides sont ignorés (min. 2). +
+