Files
CRAPP/mem/features/cloud-efficienza.md
T

16 lines
1.8 KiB
Markdown
Raw Normal View History

2026-08-06 08:36:47 +02:00
---
name: Efficienza Cloud
description: Regole per minimizzare query, traffico e invocazioni Cloud (piano 20 crediti/mese, 17 utenti)
type: feature
---
- Nessun polling (`refetchInterval`) verso il database; sincronizzazione locale via BroadcastChannel/storage dove possibile.
- QueryClient globale: staleTime 5 min, gcTime 30 min, refetchOnWindowFocus/Mount/Reconnect disattivati, retry 1.
- Dopo una mutazione aggiornare la cache con `setQueryData`, non `invalidateQueries` (evita riletture).
- Scout live: scrive solo l'utente che segna; gli altri leggono dati già salvati.
- Statistiche, badge e classifiche: "write once, read many" — calcolate e salvate una volta a fine partita, mai ricalcolate a ogni apertura pagina.
- Rosa giocatori, classifica CSI e storico partite vengono ora dal CMS Strapi (`infra/strapi/`, letto via `src/lib/rosa-base.ts`/`classifica-csi.ts`/`storico-match.ts`), non più da array hardcoded — editing solo dall'admin panel Strapi, l'app resta sola lettura (più una scrittura best-effort per lo scout finalizzato, vedi sotto). Cache lunga (staleTime 60 min): questi dati cambiano a stagione/giornata, non a sessione.
- Il risultato di una partita scoutata (`ScoutMatch`) resta salvato anzitutto nel `localStorage` del dispositivo di chi scouta (fonte usata da `useRosa`/`giocatoriConScout` per le statistiche), e viene *anche* inviato best-effort a Strapi (`scout-match-finale`, via `/api/public/scout-finale`) a fine partita per restare visibile cross-device nell'admin panel — nessun retry se il device non ha rete in quel momento.
2026-08-06 08:36:47 +02:00
- Push solo per eventi importanti: convocazioni, promemoria allenamento/partita, turno palloni, esito finale.
- Niente foto/video/chat o funzionalità pesanti.
- Schema target: team_id, eventi, presenze, azioni_scout, statistiche_aggregate, classifica_csi, notifiche, con indici sui campi di filtro/relazione.