Calcola davvero le serie di presenze e sblocca badge e obiettivo.
I tre contatori (serieAllenamenti, seriePartite, serieConferme) e streak erano zero fisso in useRosa(): la sezione Serie di presenze del profilo mostrava sempre progresso nullo, i badge legati alla costanza erano impossibili da sbloccare e l'obiettivo Continuita di squadra restava a 0/12. serieConsecutiva() e serieConferme() (src/lib/presenze.ts) derivano le serie dagli eventi passati e da risposte_presenze gia in cache, senza query aggiuntive. Migration m9: nuova colonna risposto_il con l'istante della prima risposta, resa immutabile da un trigger, confrontata con eventi_app.creato_il per le conferme entro 24 ore. Serviva perche aggiornato_il registra l'ultima modifica, quindi chi rispondeva subito e cambiava idea dopo risultava lento. Corregge anche la barra di progresso, che misurava valore/prossimo e tornava indietro a ogni traguardo raggiunto (2/3 = 67%, poi 3/6 = 50%). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -28,7 +28,14 @@ assert.equal(aDue.messaggio, "Manca solo una volta al prossimo traguardo!");
|
||||
|
||||
const sulTraguardo = statoSerie(allenamenti, g({ serieAllenamenti: 3 }));
|
||||
assert.equal(sulTraguardo.prossimo, 6, "raggiunto un traguardo si punta al successivo");
|
||||
assert.equal(sulTraguardo.progresso, 50);
|
||||
assert.equal(sulTraguardo.progresso, 0, "nuovo livello: la barra riparte dal traguardo preso");
|
||||
|
||||
// La barra non torna mai indietro dentro lo stesso livello.
|
||||
const dentroIlLivello = [3, 4, 5].map((v) => statoSerie(allenamenti, g({ serieAllenamenti: v })));
|
||||
assert.deepEqual(
|
||||
dentroIlLivello.map((s) => s.progresso),
|
||||
[0, 33, 67],
|
||||
);
|
||||
|
||||
const veterano = statoSerie(allenamenti, g({ serieAllenamenti: 7 }));
|
||||
assert.equal(veterano.messaggio, "Che continuità: ancora 3 e sali di livello.");
|
||||
|
||||
Reference in New Issue
Block a user