Messaggio di fine partita, test a inizio stagione e documenti di stato
Il messaggio dopo «Fine partita» dice solo «Partita salvata» (il voto MVP apre 2 ore dopo l'inizio, non dipende dallo scout). I due test che pretendevano una gara CSI già giocata tollerano l'inizio stagione (uno si salta). «Calendario ufficiale» passa in «Fatto» nella roadmap; PROJECT_STATE conta le migration fino alla m39. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
ebafb98b32
commit
252e1528f6
5 files changed
+20
-19
No files matched your search
+7
-7
@@ -1,6 +1,6 @@
|
|||||||
# Project State
|
# Project State
|
||||||
|
|
||||||
Ultimo aggiornamento: 26/10/2026
|
Ultimo aggiornamento: 02/11/2026
|
||||||
|
|
||||||
Questo file dice **a che punto siamo ora**. Le funzionalità stanno in
|
Questo file dice **a che punto siamo ora**. Le funzionalità stanno in
|
||||||
[docs/ROADMAP.md](docs/ROADMAP.md), i rilasci in [docs/CHANGELOG.md](docs/CHANGELOG.md), lo
|
[docs/ROADMAP.md](docs/ROADMAP.md), i rilasci in [docs/CHANGELOG.md](docs/CHANGELOG.md), lo
|
||||||
@@ -21,11 +21,11 @@ schema in [docs/DATABASE.md](docs/DATABASE.md), le procedure in
|
|||||||
[docs/CHANGELOG.md](docs/CHANGELOG.md).
|
[docs/CHANGELOG.md](docs/CHANGELOG.md).
|
||||||
- **Backend:** Supabase proprietario (`kfkcldwncxqaixetsjes`). Lovable Cloud e il vecchio
|
- **Backend:** Supabase proprietario (`kfkcldwncxqaixetsjes`). Lovable Cloud e il vecchio
|
||||||
Project Ref `hetycilxgkdmccelwerq` non si usano più.
|
Project Ref `hetycilxgkdmccelwerq` non si usano più.
|
||||||
- **Migration:** 49 file in `supabase/migrations/`, fino a `m38_nome_votato_badge_social`. In produzione
|
- **Migration:** 50 file in `supabase/migrations/`, fino a `m39_scout_valutazioni`. In produzione
|
||||||
sono applicate 45 su 49, fino alla `m34_link_maps_evento` (verificato con
|
sono applicate 45 su 50, fino alla `m34_link_maps_evento` (verificato con
|
||||||
`npx supabase migration list --linked` il 26/10/2026: le uniche mancanti sono `m35`-`m38`, nessuna
|
`npx supabase migration list --linked` il 26/10/2026: le uniche mancanti sono `m35`-`m39`, nessuna
|
||||||
migration remota è assente dal repository). **Da applicare ancora: `m35`-`m38`**
|
migration remota è assente dal repository). **Da applicare ancora: `m35`-`m39`**
|
||||||
(voto MVP e badge social, DD-051 e DD-052, branch `feature/gara`): `npx supabase db push` è rinviato
|
(voto MVP e badge social, DD-051 e DD-052, valutazioni dello scout, DD-053; branch `feature/gara`): `npx supabase db push` è rinviato
|
||||||
per scelta, non è stato eseguito. Vanno applicate subito prima del rilascio del codice: con le sole
|
per scelta, non è stato eseguito. Vanno applicate subito prima del rilascio del codice: con le sole
|
||||||
migration il voto MVP dell'app in produzione (1.4.2) smette di funzionare, con il solo codice la
|
migration il voto MVP dell'app in produzione (1.4.2) smette di funzionare, con il solo codice la
|
||||||
vista dei conteggi non esiste.
|
vista dei conteggi non esiste.
|
||||||
@@ -38,7 +38,7 @@ schema in [docs/DATABASE.md](docs/DATABASE.md), le procedure in
|
|||||||
- **Lavoro in corso:** branch `feature/gara` per le funzioni di gara (correzioni e nuove
|
- **Lavoro in corso:** branch `feature/gara` per le funzioni di gara (correzioni e nuove
|
||||||
funzioni; in futuro anche lo scouting). Primo lavoro: il voto MVP definitivo, segreto, a tempo e
|
funzioni; in futuro anche lo scouting). Primo lavoro: il voto MVP definitivo, segreto, a tempo e
|
||||||
tra presenti, con i pari merito (DD-051, DD-052). Poi lo scout live ridotto alle valutazioni − / +
|
tra presenti, con i pari merito (DD-051, DD-052). Poi lo scout live ridotto alle valutazioni − / +
|
||||||
per set (DD-053), salvate subito su database. Migration `m39` da applicare in produzione. Non ancora in `main`, non rilasciato, versione
|
per set (DD-053), salvate subito su database. Non ancora in `main`, non rilasciato, versione
|
||||||
invariata. Le altre voci aperte stanno in [docs/ROADMAP.md](docs/ROADMAP.md), sotto «Prossimo».
|
invariata. Le altre voci aperte stanno in [docs/ROADMAP.md](docs/ROADMAP.md), sotto «Prossimo».
|
||||||
|
|
||||||
## Cose da sapere
|
## Cose da sapere
|
||||||
|
|||||||
+2
-2
@@ -34,6 +34,8 @@ Tutto quello che è rilasciato, fino alla versione 1.0.0 (vedi `CHANGELOG.md`).
|
|||||||
- [x] Collegamento CSI (stagione 2026/27)
|
- [x] Collegamento CSI (stagione 2026/27)
|
||||||
- [x] Classifica automatica (campionato e Coppa)
|
- [x] Classifica automatica (campionato e Coppa)
|
||||||
- [x] Risultati campionato
|
- [x] Risultati campionato
|
||||||
|
- [x] Calendario ufficiale — le gare future del feed CSI compaiono già nella pagina Campionato:
|
||||||
|
a inizio stagione il calendario c'è prima dei risultati
|
||||||
- [x] Dettaglio partita — formazioni, storico scontri diretti e probabilità di vittoria
|
- [x] Dettaglio partita — formazioni, storico scontri diretti e probabilità di vittoria
|
||||||
calcolata dal CSI
|
calcolata dal CSI
|
||||||
- [x] Ruolo allenatore — gestisce gli eventi e sollecita le presenze, profilo ridotto senza
|
- [x] Ruolo allenatore — gestisce gli eventi e sollecita le presenze, profilo ridotto senza
|
||||||
@@ -54,8 +56,6 @@ Tutto quello che è rilasciato, fino alla versione 1.0.0 (vedi `CHANGELOG.md`).
|
|||||||
|
|
||||||
## Prossimo
|
## Prossimo
|
||||||
|
|
||||||
- [ ] Calendario ufficiale — i dati delle gare future arrivano già dal feed CSI, la pagina
|
|
||||||
Campionato usa solo quelle giocate
|
|
||||||
- [ ] Database esercizi
|
- [ ] Database esercizi
|
||||||
- [ ] AI Allenamenti
|
- [ ] AI Allenamenti
|
||||||
- [ ] Archivio allenamenti
|
- [ ] Archivio allenamenti
|
||||||
|
|||||||
@@ -330,7 +330,7 @@ function ScoutBoard({
|
|||||||
toast.error("Salvataggio non riuscito, riprova");
|
toast.error("Salvataggio non riuscito, riprova");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
toast.success("Partita salvata: ora la squadra può votare l'MVP");
|
toast.success("Partita salvata");
|
||||||
finito.current = true;
|
finito.current = true;
|
||||||
void cancella.mutateAsync(partita.id);
|
void cancella.mutateAsync(partita.id);
|
||||||
onFine();
|
onFine();
|
||||||
|
|||||||
@@ -62,10 +62,8 @@ try {
|
|||||||
const csi = (await json(res)) as DatiCsi;
|
const csi = (await json(res)) as DatiCsi;
|
||||||
const noi = csi.classifica.find((r) => isNostraSquadra(r.squadra));
|
const noi = csi.classifica.find((r) => isNostraSquadra(r.squadra));
|
||||||
assert.ok(noi, "la nostra squadra arriva dal portale");
|
assert.ok(noi, "la nostra squadra arriva dal portale");
|
||||||
assert.ok(
|
// A inizio stagione il calendario c'è ma nessuna gara è ancora stata giocata.
|
||||||
csi.partite.some((p) => p.setNostri !== null),
|
assert.ok(csi.partite.length > 0, "le gare della stagione arrivano dal portale");
|
||||||
"ci sono risultati giocati",
|
|
||||||
);
|
|
||||||
|
|
||||||
const html = await pagina("/classifica");
|
const html = await pagina("/classifica");
|
||||||
assert.match(titolo(html), /Classifica campionato/);
|
assert.match(titolo(html), /Classifica campionato/);
|
||||||
|
|||||||
@@ -124,9 +124,13 @@ try {
|
|||||||
assert.ok(Date.now() - t0 < 2_000, "risposta immediata");
|
assert.ok(Date.now() - t0 < 2_000, "risposta immediata");
|
||||||
});
|
});
|
||||||
|
|
||||||
await provaCsi(
|
// A inizio stagione il calendario c'è ma nessuna gara è ancora stata giocata: il test
|
||||||
"GET /api/public/csi-partita/$id restituisce formazioni e precedenti",
|
// del dettaglio non ha un bersaglio e si salta, come per il portale non raggiungibile.
|
||||||
async () => {
|
const nomeDettaglio = "GET /api/public/csi-partita/$id restituisce formazioni e precedenti";
|
||||||
|
if (csiRaggiungibile && !partiteGiocate(csi?.partite ?? [])[0]) {
|
||||||
|
salta(nomeDettaglio, "nessuna gara ancora giocata nella stagione");
|
||||||
|
} else
|
||||||
|
await provaCsi(nomeDettaglio, async () => {
|
||||||
const primaGiocata = partiteGiocate(csi?.partite ?? [])[0];
|
const primaGiocata = partiteGiocate(csi?.partite ?? [])[0];
|
||||||
assert.ok(primaGiocata, "serve almeno una gara giocata per testare il dettaglio");
|
assert.ok(primaGiocata, "serve almeno una gara giocata per testare il dettaglio");
|
||||||
const res = await fetch(url(`/api/public/csi-partita/${primaGiocata.id}`));
|
const res = await fetch(url(`/api/public/csi-partita/${primaGiocata.id}`));
|
||||||
@@ -147,8 +151,7 @@ try {
|
|||||||
const secondo = await fetch(url(`/api/public/csi-partita/${primaGiocata.id}`));
|
const secondo = await fetch(url(`/api/public/csi-partita/${primaGiocata.id}`));
|
||||||
assert.equal(secondo.status, 200);
|
assert.equal(secondo.status, 200);
|
||||||
assert.ok(Date.now() - t0 < 2_000, "seconda chiamata dalla cache: risposta immediata");
|
assert.ok(Date.now() - t0 < 2_000, "seconda chiamata dalla cache: risposta immediata");
|
||||||
},
|
});
|
||||||
);
|
|
||||||
|
|
||||||
await provaCsi(
|
await provaCsi(
|
||||||
"GET /api/public/csi-partita/$id con un id davvero inesistente risponde 503, non rompe",
|
"GET /api/public/csi-partita/$id con un id davvero inesistente risponde 503, non rompe",
|
||||||
|
|||||||
Reference in new issue
Block a user