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>
2.5 KiB
2.5 KiB
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 vistamvp_voti_anonimi, una riga per voto senzavotante_ide 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_nomedagiocatori_squadraa partire davotato_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'appvotoMvpChiuso(). 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).