In Campionato > Storico partite ogni gara diventa cliccabile: verso /partita/$id se collegata a un evento CrAPP, verso la nuova /partita-csi/$id altrimenti (nessuna creazione automatica di eventi dal calendario CSI, quindi molte gare ne sono prive). Il dettaglio aggiunge formazioni (titolari/panchina/staff), storico scontri diretti e probabilità di vittoria calcolata dal CSI, letti on-demand da tre nuovi endpoint per-partita (match-main/players/stats.php) dietro /api/public/csi-partita/$id, con cache server per-partita separata da quella di /api/public/csi — è un dato aperto a richiesta, non precaricato per tutti come classifica e partite. Include anche logo squadra e metadati leggeri (girone, n° gara, arbitro, link al referto ufficiale) già presenti nel JSON esistente, a costo zero. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
22 lines
793 B
TypeScript
22 lines
793 B
TypeScript
import { useQuery } from "@tanstack/react-query";
|
|
import type { DettaglioPartitaCsi } from "./csi-core";
|
|
|
|
/**
|
|
* Dettaglio di una singola gara CSI (formazioni, storico scontri diretti): una fetch in
|
|
* più per partita, cache server 6h come `useCsi()`. Va usato solo quando l'utente apre il
|
|
* dettaglio di una gara, mai in una lista: vedi docs/modules/collegamento-csi.md.
|
|
*/
|
|
export function useCsiPartita(matchId: string | undefined) {
|
|
return useQuery<DettaglioPartitaCsi>({
|
|
queryKey: ["csi-partita", matchId],
|
|
queryFn: async () => {
|
|
const res = await fetch(`/api/public/csi-partita/${matchId}`);
|
|
if (!res.ok) throw new Error("csi-partita non disponibile");
|
|
return res.json();
|
|
},
|
|
enabled: !!matchId,
|
|
staleTime: 6 * 60 * 60_000,
|
|
retry: 1,
|
|
});
|
|
}
|