Docs: file di supporto in ARCHITECTURE e riga Codice nelle decisioni
Cita con percorso completo i 28 file di src/ che nessun documento nominava e aggiunge la riga Codice a 21 decisioni, ricavata dai file che le citano. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
f9c6263662
commit
4c8791fa2c
22 files changed
+68
-21
No files matched your search
@@ -30,6 +30,32 @@ test/ suite di test (unit, integration, end-to-end)
|
||||
docs/ documentazione ufficiale
|
||||
```
|
||||
|
||||
### File di supporto
|
||||
|
||||
I file che i documenti dei moduli non citano, con il loro scopo:
|
||||
|
||||
| File | Cosa fa |
|
||||
| ------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| `src/routes/__root.tsx` | Radice delle route: meta, viewport (`viewport-fit=cover` per le safe area su iOS) e layout comune |
|
||||
| `src/routes/benvenuto.tsx` | Ingresso dopo il login: si arriva solo da loggati e con uno slot collegato (DD-011) |
|
||||
| `src/routes/api/public/keepalive.ts` | Lettura minima chiamata dal Cron di Vercel per evitare la pausa del progetto Supabase free tier |
|
||||
| `src/routes/api/public/apri-sondaggio.ts` | Avviso «sondaggio pre-partita aperto», lanciato da un admin dalla pagina partita |
|
||||
| `src/routes/api/public/notifica-personalizzata.ts` | Messaggio push libero a un giocatore o a tutti, con storico in-app (M17) |
|
||||
| `src/routes/api/public/notifiche-attive.ts` | Elenco dei giocatori con almeno un dispositivo iscritto alle push (solo admin) |
|
||||
| `src/lib/notifiche-attive.server.ts`, `src/lib/notifiche-admin.ts` | Lato server dell'elenco sopra; hook client dell'elenco e dell'invio push libero |
|
||||
| `src/lib/eventi-visibili.ts` | Gli eventi che l'utente corrente può vedere (calendario, home, elenco) |
|
||||
| `src/lib/presenze-mese-core.ts` | Calcolo puro della percentuale di presenze dell'ultimo mese, separato dagli hook |
|
||||
| `src/lib/error-capture.ts`, `src/lib/error-page.ts` | Cattura dell'errore lato server e pagina di errore statica |
|
||||
| `src/lib/utils.ts` | `cn()`: unisce classi CSS condizionali risolvendo i conflitti di Tailwind |
|
||||
| `src/integrations/supabase/types.ts` | Tipi generati dallo schema: non si modificano a mano |
|
||||
| `src/integrations/supabase/auth-attacher.ts`, `src/integrations/supabase/auth-middleware.ts`, `src/integrations/supabase/client.server.ts` | File generati: il browser allega il token alle chiamate server, il server le autentica; `client.server.ts` ha il client con service role. Non si modificano a mano |
|
||||
| `src/integrations/supabase/client-nuove-tabelle.ts` | Accesso tipizzato alle tabelle che `types.ts` generato non include ancora |
|
||||
| `src/components/crapp/Avatar.tsx`, `src/components/crapp/BottomNav.tsx`, `src/components/crapp/BarraSottosezioni.tsx` | Foto del giocatore (con ricarica forzata), barra di navigazione a 4 voci, sottosezioni con pannello animato |
|
||||
| `src/components/crapp/ProfiloAmministrativo.tsx` | Campi del profilo condivisi tra giocatore e dashboard admin (DD-017) |
|
||||
| `src/components/crapp/ScoutReport.tsx` | Lettura dello scout di una partita: squadra, set per set, dettaglio per giocatore |
|
||||
| `src/components/motion/Barra.tsx`, `src/components/motion/Numero.tsx`, `src/components/motion/Reveal.tsx` | Barra di avanzamento a molla, contatore animato, comparsa graduale all'ingresso nel viewport |
|
||||
| `src/components/ui/drawer.tsx`, `src/components/ui/sonner.tsx` | Le due primitive shadcn in uso (drawer di vaul e toast) |
|
||||
|
||||
## Punti fermi
|
||||
|
||||
- **Routing**: file-based in `src/routes/`. `src/routeTree.gen.ts` è **generato**, non si
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
# DD-007 — Badge calcolati dall’app, non salvati nel database
|
||||
|
||||
**Data:** origine progetto
|
||||
**Stato:** Accettata
|
||||
**Stato:** Accettata
|
||||
**Codice:** `src/lib/profili-core.ts`
|
||||
|
||||
**Contesto**
|
||||
I badge dipendono da statistiche già disponibili (presenze, MVP, cacche, ecc.). Salvare ogni badge sbloccato nel database aggiungerebbe complessità senza beneficio immediato.
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
# DD-011 — Autenticazione reale prima del profilo amministrativo completo
|
||||
|
||||
**Data:** agosto 2026
|
||||
**Stato:** Accettata
|
||||
**Stato:** Accettata
|
||||
**Codice:** `src/lib/auth-route.server.ts`, `src/lib/auth.ts`, `src/lib/crapp-data.ts`, `src/lib/ruoli.ts`, `src/routes/__root.tsx`, `src/routes/benvenuto.tsx`, `supabase/migrations/20260831120000_m4_solo_autenticati.sql`, `supabase/migrations/20260901140000_m6_avatar_giocatori.sql`, `supabase/migrations/20260924120100_m21_ruolo_allenatore.sql`
|
||||
|
||||
**Contesto**
|
||||
Oggi l’app identifica l’utente con la selezione del giocatore da una lista, senza login. Documenti, certificati e dati personali richiedono sapere _chi_ sta operando e impedire accessi non autorizzati.
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
# DD-013 — Portabilità: l’app non deve dipendere da servizi esclusivi
|
||||
|
||||
**Data:** luglio 2026
|
||||
**Stato:** Accettata
|
||||
**Stato:** Accettata
|
||||
**Codice:** `src/integrations/supabase/client-nuove-tabelle.ts`
|
||||
|
||||
**Contesto**
|
||||
La squadra potrebbe voler cambiare hosting, database o fornitore auth in futuro.
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
# DD-017 — L'amministratore può compilare i dati al posto del giocatore
|
||||
|
||||
**Data:** agosto 2026
|
||||
**Stato:** Accettata
|
||||
**Stato:** Accettata
|
||||
**Codice:** `src/components/crapp/ProfiloAmministrativo.tsx`, `src/lib/giocatori-squadra.ts`, `src/routes/admin.tsx`, `supabase/migrations/20260831170000_correzione_schema_profili_giocatore.sql`, `supabase/migrations/20260906120000_m11_scritture_per_ruolo.sql`
|
||||
|
||||
**Contesto**
|
||||
Il modulo Profilo Giocatore era costruito su un confine netto: ognuno scrive solo la propria riga, l'amministratore legge e scarica. Nella pratica quel confine blocca il lavoro che il modulo doveva togliere: se metà squadra non compila i propri dati, l'export per il tesseramento CSI resta incompleto e l'admin torna a chiedere le informazioni in chat — esattamente ciò che CrAPP deve eliminare. Inoltre le docs assegnavano già agli admin la gestione dei dati squadra (nome, cognome, numero, ruolo) e il reset del collegamento all'account (DD-016 regola 2), senza che esistesse una schermata per farlo.
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
# DD-025 — Il promemoria palloni lo manda l'admin, per un evento
|
||||
|
||||
**Data:** 6 settembre 2026
|
||||
**Stato:** Accettata
|
||||
**Stato:** Accettata
|
||||
**Codice:** `src/lib/palloni-core.ts`, `src/routes/api/public/promemoria-palloni.ts`
|
||||
|
||||
**Contesto**
|
||||
`promemoria-palloni` era disegnata per un cron quotidiano: calcolava chi è di turno **oggi** e
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
# DD-028 — Soglia minima di campione per Media voto e MVP in home
|
||||
|
||||
**Data:** 9 settembre 2026
|
||||
**Stato:** Accettata
|
||||
**Stato:** Accettata
|
||||
**Codice:** `src/lib/pagelle.ts`
|
||||
|
||||
**Contesto**
|
||||
Un audit della sezione «Colpo d'occhio» in home (`index.tsx`, StatTile Presenze/Media
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
# DD-034 — L'allenatore è uno slot della squadra con tipo diverso, non un giocatore
|
||||
|
||||
**Data:** 24 settembre 2026
|
||||
**Stato:** Accettata (implementata con le migration M20 e M21)
|
||||
**Stato:** Accettata (implementata con le migration M20 e M21)
|
||||
**Codice:** `src/components/crapp/EventoCard.tsx`, `src/components/crapp/Pagelle.tsx`, `src/components/crapp/ProfiloAmministrativo.tsx`, `src/components/crapp/PromemoriaPalloni.tsx`, `src/components/crapp/RosaPresenze.tsx`, `src/components/crapp/SondaggioCacche.tsx`, `src/components/crapp/VotazioneMvp.tsx`, `src/components/crapp/VotoSocial.tsx`, `src/lib/auth-route.server.ts`, `src/lib/cacche.ts`, `src/lib/giocatori-squadra.ts`, `src/lib/presenze.ts`, `src/lib/profili-core.ts`, `src/lib/rosa.ts`, `src/lib/ruoli.ts`, `src/lib/user-store.ts`, `src/routes/admin.tsx`, `src/routes/api/public/apri-sondaggio.ts`, `src/routes/eventi.tsx`, `src/routes/index.tsx`, `src/routes/partita.$id.tsx`, `src/routes/profilo.tsx`, `src/routes/squadra.tsx`, `supabase/migrations/20260924120000_m20_ruolo_allenatore_enum.sql`, `supabase/migrations/20260924120100_m21_ruolo_allenatore.sql`, `supabase/migrations/20260929180000_m25_promemoria_solo_giocatori.sql`
|
||||
|
||||
**Contesto**
|
||||
Serve un account per l'allenatore: deve gestire gli eventi (oggi solo admin, `m11`) ma non è
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
# DD-035 — Avviso certificati: calcolato in Home, visibile solo al titolare e agli admin
|
||||
|
||||
**Data:** 24 settembre 2026
|
||||
**Stato:** Accettata (implementata, versione 1.1.0). La soglia del giocatore è stata alzata a 30 giorni da [DD-041](DD-041.md); quella dello staff resta 7. [DD-046](DD-046.md) aggiunge l'avviso per chi non ha caricato il certificato.
|
||||
**Stato:** Accettata (implementata, versione 1.1.0). La soglia del giocatore è stata alzata a 30 giorni da [DD-041](DD-041.md); quella dello staff resta 7. [DD-046](DD-046.md) aggiunge l'avviso per chi non ha caricato il certificato.
|
||||
**Codice:** `src/components/crapp/AvvisoCertificati.tsx`, `src/lib/profili-core.ts`, `src/lib/ruoli.ts`
|
||||
|
||||
**Contesto**
|
||||
Il certificato medico ha una data di scadenza (`profili_giocatore.certificato_scadenza`), ma
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
# DD-036 — Notifiche email via Gmail, da un worker Docker sull'host di casa
|
||||
|
||||
**Data:** 29 settembre 2026
|
||||
**Stato:** Accettata
|
||||
**Stato:** Accettata
|
||||
**Codice:** `mailer/mailer-core.ts`, `mailer/mailer.mjs`, `src/lib/preferenze-utente.ts`, `supabase/migrations/20260929120000_m22_notifiche_email.sql`
|
||||
|
||||
**Contesto**
|
||||
Le notifiche di CrAPP arrivano solo con la push (che dipende da Chrome vivo in background,
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
# DD-039 — L'allenatore non riceve i promemoria degli eventi
|
||||
|
||||
**Data:** 29 settembre 2026
|
||||
**Stato:** Accettata
|
||||
**Stato:** Accettata
|
||||
**Codice:** `supabase/migrations/20260929180000_m25_promemoria_solo_giocatori.sql`
|
||||
|
||||
**Contesto**
|
||||
DD-034 stabilì che l'allenatore riceve i promemoria a 24 e 3 ore prima di un evento, sempre, convocato
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
# DD-040 — Promemoria con «oggi» o «domani», turno palloni e solleciti automatici
|
||||
|
||||
**Data:** 30 settembre 2026
|
||||
**Stato:** Accettata (implementata: migration `m26`, applicata in produzione il 30 settembre 2026, job, route e test). Il sollecito presenze è poi passato a un solo avviso a 24 ore da [DD-045](DD-045.md). Il turno palloni è poi passato a un solo avviso a 3 ore da [DD-042](DD-042.md).
|
||||
**Stato:** Accettata (implementata: migration `m26`, applicata in produzione il 30 settembre 2026, job, route e test). Il sollecito presenze è poi passato a un solo avviso a 24 ore da [DD-045](DD-045.md). Il turno palloni è poi passato a un solo avviso a 3 ore da [DD-042](DD-042.md).
|
||||
**Codice:** `src/lib/palloni-core.ts`, `src/lib/presenze.ts`, `src/routes/api/public/sollecita-presenze.ts`, `supabase/migrations/20260930120000_m26_notifiche_automatiche.sql`
|
||||
|
||||
**Contesto**
|
||||
Quattro notifiche su sei partivano da un pulsante premuto da un admin (DD-025 per i palloni): se nessuno
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
# DD-041 — Avviso certificati: il giocatore è avvisato un mese prima dello staff
|
||||
|
||||
**Data:** 1 ottobre 2026
|
||||
**Stato:** Accettata (modifica la soglia di [DD-035](DD-035.md) per il solo giocatore)
|
||||
**Stato:** Accettata (modifica la soglia di [DD-035](DD-035.md) per il solo giocatore)
|
||||
**Codice:** `src/components/crapp/AvvisoCertificati.tsx`, `src/lib/profili-core.ts`
|
||||
|
||||
**Contesto**
|
||||
Con DD-035 giocatore e admin vedono l'avviso negli stessi 7 giorni prima della scadenza. Per
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
# DD-042 — Turno palloni: un solo avviso, 3 ore prima
|
||||
|
||||
**Data:** 1 ottobre 2026
|
||||
**Stato:** Accettata (migration `m27`, applicata in produzione il 1 ottobre 2026; modifica la parte «turno palloni» di [DD-040](DD-040.md))
|
||||
**Stato:** Accettata (migration `m27`, applicata in produzione il 1 ottobre 2026; modifica la parte «turno palloni» di [DD-040](DD-040.md))
|
||||
**Codice:** `supabase/migrations/20261001120000_m27_palloni_solo_3h.sql`
|
||||
|
||||
**Contesto**
|
||||
DD-040 manda l'avviso del turno palloni a 12, 6 e 3 ore prima dell'evento: tre messaggi identici per
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
# DD-043 — Niente promemoria automatico a 24 e 3 ore prima degli eventi
|
||||
|
||||
**Data:** 1 ottobre 2026
|
||||
**Stato:** Accettata (migration `m28`, applicata in produzione il 1 ottobre 2026; sostituisce il promemoria di
|
||||
**Stato:** Accettata (migration `m28`, applicata in produzione il 1 ottobre 2026; sostituisce il promemoria di
|
||||
**Codice:** `supabase/migrations/20261001150000_m28_niente_promemoria_evento.sql`
|
||||
[DD-030](DD-030.md), [DD-037](DD-037.md) e [DD-040](DD-040.md))
|
||||
|
||||
**Contesto**
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
# DD-044 — Via la foto tessera dal profilo
|
||||
|
||||
**Data:** 1 ottobre 2026
|
||||
**Stato:** Accettata (migration `m29`, applicata in produzione il 1 ottobre 2026)
|
||||
**Stato:** Accettata (migration `m29`, applicata in produzione il 1 ottobre 2026)
|
||||
**Codice:** `supabase/migrations/20261001170000_m29_senza_foto_tessera.sql`
|
||||
|
||||
**Contesto**
|
||||
Il profilo amministrativo chiedeva al giocatore una foto formato tessera (DD-016), per il
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
# DD-045 — Sollecito presenze: un solo avviso automatico, 24 ore prima
|
||||
|
||||
**Data:** 1 ottobre 2026
|
||||
**Stato:** Accettata (migration `m30`, applicata in produzione il 1 ottobre 2026; modifica la parte «sollecito presenze»
|
||||
**Stato:** Accettata (migration `m30`, applicata in produzione il 1 ottobre 2026; modifica la parte «sollecito presenze»
|
||||
**Codice:** `supabase/migrations/20261001190000_m30_sollecito_solo_24h.sql`
|
||||
di [DD-040](DD-040.md))
|
||||
|
||||
**Contesto**
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
# DD-046 — Avviso certificati: anche chi non l'ha caricato
|
||||
|
||||
**Data:** 4 ottobre 2026
|
||||
**Stato:** Accettata (modifica [DD-035](DD-035.md): il certificato mancante non è più escluso dall'avviso)
|
||||
**Stato:** Accettata (modifica [DD-035](DD-035.md): il certificato mancante non è più escluso dall'avviso)
|
||||
**Codice:** `src/components/crapp/AvvisoCertificati.tsx`, `src/lib/profili-core.ts`
|
||||
|
||||
**Contesto**
|
||||
L'avviso certificati di DD-035 guarda solo la scadenza e salta chi non ha mai caricato il
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
# DD-047 — Notifica di compleanno
|
||||
|
||||
**Data:** 6 ottobre 2026
|
||||
**Stato:** Accettata (migration `m31`, non ancora applicata in produzione; nasce dalla issue #11 «notifica»)
|
||||
**Stato:** Accettata (migration `m31`, non ancora applicata in produzione; nasce dalla issue #11 «notifica»)
|
||||
**Codice:** `supabase/migrations/20261006120000_m31_notifica_compleanno.sql`
|
||||
|
||||
**Contesto**
|
||||
I compleanni si vedono solo aprendo il Calendario, dove `compleanniEventi()` li calcola dalla data di
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
# DD-050 — Avviso a admin e allenatori se una presenza cambia a meno di 6 ore dall'evento
|
||||
|
||||
**Data:** 8 ottobre 2026
|
||||
**Stato:** Implementata per admin e allenatori (migration `m32`, solo admin, applicata in produzione il 9 ottobre 2026; `m33`, anche allenatori)
|
||||
**Stato:** Implementata per admin e allenatori (migration `m32`, solo admin, applicata in produzione il 9 ottobre 2026; `m33`, anche allenatori)
|
||||
**Codice:** `supabase/migrations/20261009120000_m32_presenza_modificata.sql`, `supabase/migrations/20261009150000_m33_presenza_modificata_allenatori.sql`
|
||||
|
||||
**Contesto**
|
||||
Un giocatore può cambiare la risposta a un evento fino all'ultimo minuto. Chi organizza (admin e allenatore)
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
# DD-051 — Voto MVP definitivo e MVP a pari merito
|
||||
|
||||
**Data:** 26 ottobre 2026
|
||||
**Stato:** Accettata (migration `m35` e `m36`)
|
||||
**Stato:** Accettata (migration `m35` e `m36`)
|
||||
**Codice:** `supabase/migrations/20261026150000_m35_voto_mvp_definitivo.sql`, `supabase/migrations/20261026160000_m36_voto_mvp_presenti_e_orario.sql`
|
||||
|
||||
**Contesto**
|
||||
Il voto MVP si poteva cambiare senza limiti e senza storico (`mvp.md`), e una parità in testa non
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
# DD-052 — Voto MVP segreto, nome dal database e votazione che si chiude
|
||||
|
||||
**Data:** 26 ottobre 2026
|
||||
**Stato:** Accettata (migration `m37` e `m38`)
|
||||
**Stato:** Accettata (migration `m37` e `m38`)
|
||||
**Codice:** `src/lib/mvp-voti.ts`, `supabase/migrations/20261026170000_m37_voto_mvp_segreto_e_chiusura.sql`, `supabase/migrations/20261026180000_m38_nome_votato_badge_social.sql`
|
||||
|
||||
**Contesto**
|
||||
Dopo DD-051 il voto è definitivo e controllato a database, ma restavano tre difetti: chiunque poteva
|
||||
|
||||
Reference in new issue
Block a user