Estrae la deduplica degli id giocatore in idsConNotificheAttive (src/lib/notifiche-attive.server.ts), testata a livello unit. Aggiunge un test di integrazione sui permessi della route (401/403/200), sullo stesso schema di permessi-route.test.ts. Documenta il nuovo endpoint in notifiche.md e la dashboard admin a tab in profilo-giocatore.md. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
7.5 KiB
Modulo — Profilo Giocatore
Stato: implementato
File principali: src/lib/profili.ts, src/lib/profili-core.ts, src/routes/profilo.tsx,
src/routes/admin.tsx
Obiettivo
Il modulo "Profilo Giocatore" raccoglie tutte le informazioni personali, amministrative e documentali di ciascun membro della squadra.
L'obiettivo è centralizzare in un'unica schermata tutti i dati necessari sia al giocatore sia agli amministratori, eliminando la gestione tramite chat, documenti cartacei e fogli Excel.
Utenti
Giocatore
Può:
- visualizzare il proprio profilo
- modificare i propri dati personali
- aggiornare il certificato medico
- aggiornare i documenti
- caricare le immagini richieste
Amministratore
Può:
- visualizzare il profilo di tutti i giocatori
- scaricare documenti e certificati
- esportare i dati necessari al tesseramento CSI
- verificare lo stato di completamento dei profili
- modificare i dati squadra di qualsiasi giocatore (nome, cognome, numero, ruolo, email)
- compilare e correggere i dati personali e del documento al posto di un giocatore (DD-017)
- scollegare un account da un profilo, liberando lo slot
- aggiungere un nuovo giocatore alla rosa (id, nome, cognome, numero, ruolo, email opzionale)
- disattivare un giocatore che ha lasciato la squadra, e riattivarlo in caso di errore: la riga non viene eliminata, così presenze, voti, pagelle e badge della stagione restano agganciati al suo id
Non può caricare o sostituire i file altrui: documento, certificato e foto restano responsabilità del giocatore che li fornisce.
Flusso utente
Primo accesso
- Login tramite Google oppure Email. Implementato con il solo Google: la squadra ha tutti un account Google, e un secondo metodo è additivo (un bottone in più sulla stessa schermata) il giorno che serve.
- Collegamento automatico al proprio giocatore, confrontando l'email dell'account Google
con l'email registrata in
giocatori_squadra(DD-018). Nessuna scelta manuale: se l'email non corrisponde a nessun profilo, l'accesso si ferma con un messaggio che invita a contattare un amministratore. - Accesso alla Home.
Se il profilo non è completo compare automaticamente un widget di completamento.
Home
Il giocatore visualizza un widget dedicato.
Completa il tuo profilo
Viene mostrata una barra di avanzamento (esempio: Profilo completato — 85%), composta dalle seguenti sezioni.
- Dati personali
- Documento di identità
- Certificato medico
- Foto tessera
Quando tutte le sezioni sono complete il widget scompare automaticamente.
Il tap apre Profilo sulla sottosezione Documenti (/profilo?tab=documenti), non
sulla tab Stagione.
Profilo
Il profilo viene suddiviso in sette aree.
Dati Giocatore
Dati squadra — solo lettura, gestiti esclusivamente dagli amministratori.
- Nome
- Cognome
- Numero di maglia
- Ruolo
Dati personali — modificabili dal giocatore.
- Data di nascita
- Luogo di nascita
- Indirizzo di residenza
- Telefono
Documento di identità
Campi.
- Tipo documento
- Numero documento
- Rilasciato da
- Data emissione
- Data scadenza
Upload.
- Foto fronte
- Foto retro
Certificato medico
Campi.
- Data di scadenza
Upload.
- Certificato medico
Il giocatore può aggiornare liberamente sia la data sia il file.
Lo storico non viene mantenuto nella prima versione.
Foto tessera
Upload di una fotografia formato tessera.
Utilizzata dagli amministratori per il tesseramento CSI.
Statistiche
Sezione già presente. Contiene.
- Presenze
- Voto medio
- MVP
- Serie
- Altre statistiche disponibili
Badge
Sezione già presente.
Contiene tutti i badge ottenuti e quelli ancora da sbloccare.
Opzioni
Contiene.
- Logout
- Preferenze notifiche: un solo interruttore che iscrive il dispositivo a tutte le push (turno palloni, solleciti presenze) e abilita le notifiche smart in app — non è limitato ai soli palloni (vedi Notifiche)
- Impostazioni applicazione
- Segnala un bug e Suggerisci una nuova funzionalità: due link che aprono una issue GitHub
già impostata sul template giusto (
.github/ISSUE_TEMPLATE/bug_report.ymlefeature_request.yml). Nessun dato passa dall'app — la segnalazione vive interamente su GitHub, così non servono né una tabella né una schermata di gestione.
Dashboard amministratore
Gli amministratori dispongono di una schermata dedicata (/admin, raggiungibile da
Profilo → Opzioni), organizzata in tab scorrevoli a pillole (BarraSottosezioni, stesso
componente di Squadra e Campionato): Squadra, Profili, Disattivati (solo se
c'è almeno un giocatore disattivato) e Notifiche.
La tab Notifiche mostra quanti giocatori attivi hanno almeno un dispositivo iscritto
alle notifiche push e i loro nomi, leggendo GET /api/public/notifiche-attive (vedi
Notifiche). È solo consultiva: l'attivazione resta un gesto che ogni
giocatore deve fare dal proprio dispositivo (Profilo), l'admin non può attivarla per conto
di altri.
Per ogni giocatore, nella tab Profili, vengono mostrati.
- Stato del profilo
- Certificato medico
- Documento di identità
- Foto tessera
- Stato tesseramento CSI (tesserato / da tesserare)
Azioni disponibili.
- Visualizza profilo (la scheda si apre in linea nell'elenco: nessuna schermata separata)
- Scarica certificato
- Scarica documento
- Scarica foto tessera
- Modifica dati squadra e dati personali del giocatore (DD-017)
- Registra numero e data della tessera CSI, una volta arrivata dal comitato
- Scollega account, per liberare uno slot assegnato per errore
- Aggiungi giocatore, per inserire un nuovo membro della squadra
- Disattiva/Riattiva giocatore, per chi lascia la squadra (o rientra)
Esportazione CSI
Gli amministratori possono esportare un file CSV contenente esclusivamente i dati richiesti per il tesseramento.
Campi esportati.
- Nome
- Cognome
- Data di nascita
- Luogo di nascita
- Indirizzo
- Telefono
- Tipo documento
- Numero documento
- Rilasciato da
- Data emissione
- Data scadenza
Tracciamento tesseramento
Numero e data della tessera CSI non sono dati che il giocatore conosce in anticipo: arrivano dal comitato dopo l'iscrizione effettiva. Per questo, a differenza dei dati personali del profilo, li scrive solo un amministratore — come nome, cognome, numero di maglia e ruolo (DD-017), il trigger sulla tabella li rende non modificabili dal giocatore stesso. La dashboard mostra un badge "Tesserato"/"Da tesserare" su ogni scheda e il conteggio complessivo della squadra.
Completamento profilo
Ogni sezione contribuisce alla percentuale di completamento.
| Sezione | Peso |
|---|---|
| Dati personali | 30% |
| Documento di identità | 30% |
| Certificato medico | 30% |
| Foto tessera | 10% |
Quando tutte le sezioni risultano complete il profilo raggiunge il 100%.
Permessi
Giocatore — può modificare esclusivamente il proprio profilo.
Amministratore — può visualizzare tutti i profili, scaricare tutti i documenti, esportare i dati, modificare dati squadra e dati personali di chiunque e scollegare un account (DD-017). Non carica file al posto di altri.
Versione 1
- Profilo giocatore
- Completamento profilo
- Gestione dati personali
- Documento di identità
- Certificato medico
- Foto tessera
- Dashboard amministratore
- Esportazione CSV CSI
Versioni future
- Storico certificati medici
- Gestione documenti aggiuntivi
- Consensi privacy
- Firma digitale
- Verifica automatica documenti