Voto MVP definitivo, a pari merito, segreto e a tempo; nome del votato dalla rosa. PROJECT_STATE segna che m35-m38 restano da applicare su Supabase (db push rinviato) e il lavoro su feature/gara. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
45 lines
2.5 KiB
Markdown
45 lines
2.5 KiB
Markdown
# DD-052 — Voto MVP segreto, nome dal database e votazione che si chiude
|
|
|
|
**Data:** 26 ottobre 2026
|
|
**Stato:** Accettata (migration `m37` e `m38`)
|
|
|
|
**Contesto**
|
|
Dopo DD-051 il voto è definitivo e controllato a database, ma restavano tre difetti: chiunque poteva
|
|
leggere da `mvp_voti` chi aveva votato chi; `votato_nome` lo scriveva il client e poteva non
|
|
corrispondere a `votato_id` (il titolo andava all'id, il nome mostrato era un altro); e la votazione,
|
|
una volta aperta, non si chiudeva mai.
|
|
|
|
**Decisione**
|
|
|
|
- **Voto segreto.** La lettura diretta di `mvp_voti` è del solo votante (il proprio voto) e degli admin.
|
|
La squadra legge i conteggi dalla vista `mvp_voti_anonimi`, una riga per voto senza `votante_id` e
|
|
ordinata per candidato (la sequenza di arrivo non rivela nulla). La vista gira con i permessi del
|
|
proprietario: è ciò che le permette di leggere tutte le righe senza esporre chi ha votato. Non è
|
|
leggibile senza account.
|
|
- **Nome dal database.** Un trigger riempie `votato_nome` da `giocatori_squadra` a partire da
|
|
`votato_id`, ignorando quello inviato (anche se omesso, vuoto o diverso; e anche quando un admin corregge
|
|
un voto). Se l'id non è in rosa resta il nome ricevuto. Lo stesso trigger vale per i badge social
|
|
(`m38`), che avevano lo stesso difetto; le pagelle non hanno un nome del votato.
|
|
- **Chiusura.** Il voto si apre 2 ore dopo l'inizio della partita e si chiude 24 ore dopo l'apertura
|
|
(cioè 26 ore dopo l'inizio). A database lo impone `voto_mvp_consentito()`; nell'app `votoMvpChiuso()`.
|
|
Gli admin restano fuori dal vincolo.
|
|
- **Tutte le partite.** Il voto vale per ogni evento di tipo partita, amichevoli comprese (invariato).
|
|
|
|
**Alternative scartate**
|
|
|
|
- Filtrare i voti solo nell'app → chi scrive su PostgREST li leggerebbe comunque.
|
|
- Togliere la lettura anche agli admin → non potrebbero più correggere un voto sbagliato; restano gli
|
|
unici a poter leggere la tabella, e l'app non mostra a nessuno chi ha votato chi.
|
|
- Chiudere 24 ore dopo l'inizio della partita (22 ore di voto) → si è scelto 24 ore piene dall'apertura.
|
|
|
|
**Conseguenze**
|
|
|
|
- Le partite già chiuse da più di 26 ore non si votano più: chi non aveva votato perde la possibilità.
|
|
I voti già dati restano e contano.
|
|
- I conteggi restano visibili durante la votazione: chi vota può vedere chi è in testa.
|
|
- Un admin che legge la tabella dal database vede ancora chi ha votato chi.
|
|
|
|
**Riesame**
|
|
Se si vuole un voto davvero cieco, nascondere i risultati fino alla chiusura (la chiusura a 24 ore lo
|
|
rende possibile).
|