Presenze, Serie di presenze, Scout Live, Pagelle, MVP, Badge, Palloni, Obiettivi di squadra, Infortuni, Notifiche: chiudono il debito di documentazione tracciato in TODO.md (DD-002). Le sei route API pubbliche vengono descritte dentro il modulo a cui appartengono.
2.6 KiB
Modulo — Serie di presenze
Stato: implementato solo lato definizione/UI — non calcola valori reali (vedi Limiti noti)
File principali: src/lib/serie.ts, src/components/crapp/SerieCard.tsx
Obiettivo
Motivare la costanza dei giocatori mostrando "serie" (streak) di comportamenti positivi consecutivi — presenza agli allenamenti, presenza alle partite, risposta entro 24 ore alla convocazione — con traguardi progressivi, sullo stile delle app fitness. È anche uno dei requisiti di sblocco di alcuni badge e di un obiettivo di squadra.
Dati
Non esiste una tabella dedicata: le serie sono campi (serieAllenamenti, seriePartite,
serieConferme) del tipo Giocatore assemblato da useRosa() (src/lib/rosa.ts).
Implementazione
src/lib/serie.ts— definizione dei 3 tipi di serie (serieDefs, con label, descrizione e 4 traguardi crescenti ciascuna), funzione puraaggiornaSerie(valore, onorato)(regola: +1 se onorato, altrimenti azzeramento solo di quella serie),statoSerie()(progresso e messaggio verso il prossimo traguardo),serieGiocatore()/serieMigliore()(aggregatori per la UI).src/components/crapp/SerieCard.tsx—SerieGriglia(vista completa nel profilo) eSerieHome(riepilogo compatto in home, solo la serie più alta).src/routes/profilo.tsx— montaSerieGriglianella sezione "Serie di presenze".
Limiti noti
La funzione aggiornaSerie() non è invocata da nessun punto del codice. I tre campi che
alimentano la UI (serieAllenamenti, seriePartite, serieConferme, oltre a streak) sono
impostati a 0 fisso in useRosa() (src/lib/rosa.ts) e nel seed storico di
crapp-data.ts. Di conseguenza, con i dati reali della rosa:
- le card in
SerieGrigliamostrano sempre progresso 0; - i badge che dipendono dalle serie ("Sempre in palestra", "Risposta lampo", il segreto "Mai un forfait") non possono mai sbloccarsi;
- l'obiettivo di squadra "Continuità di squadra" (≥3 allenamenti consecutivi per almeno 12 giocatori) resta permanentemente a 0/12.
Il modulo è quindi completo lato definizione e UI, ma funzionalmente inerte: manca il
collegamento che calcoli le serie da risposte_presenze e le derivi per ogni giocatore.
Evoluzioni possibili
- Calcolare le tre serie a partire da
risposte_presenze(ordinando gli eventi per data e applicandoaggiornaSerie()in sequenza), lato client inuseRosa()o come valore derivato lato server. - Una volta corretto, verificare che i badge e l'obiettivo collegati si sblocchino davvero.