feat: améliorations UX roadmap votes #94

- Votes cappés à VOTES_PER_WEEK (pas d'accumulation) pour valoriser
  les connexions régulières
- Solde de votes affiché dans la liste (input inéditable) à la place
  du bandeau Alert, avec date de prochain rechargement
- Compteur de votes par feature affiché comme input inéditable en
  fin de ligne (avant le bouton "+")
- Animation FLIP JS (roadmap_flip.js) : seules les lignes qui changent
  de position sont animées après un vote
- Renommage votes_credited_until → votes_last_credited_at (migration 0005)
- Constantes du module utilisées dans les assertions de tests

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Colin Maudry
2026-06-30 16:39:13 +02:00
parent f04e1b4c44
commit c4aa90b0d1
14 changed files with 286 additions and 102 deletions
+11 -5
View File
@@ -25,8 +25,12 @@ _MIGRATIONS: list[tuple[str, str]] = [
"ALTER TABLE subscriptions ADD COLUMN votes_balance INTEGER NOT NULL DEFAULT 0",
),
(
"0004_add_votes_credited_until_to_subscriptions",
"ALTER TABLE subscriptions ADD COLUMN votes_credited_until TEXT",
"0004_add_votes_last_credited_at_to_subscriptions",
"ALTER TABLE subscriptions ADD COLUMN votes_last_credited_at TEXT",
),
(
"0005_rename_votes_credited_until_to_votes_last_credited_at",
"ALTER TABLE subscriptions RENAME COLUMN votes_credited_until TO votes_last_credited_at",
),
]
@@ -46,9 +50,11 @@ def apply_pending() -> None:
try:
conn.execute(sql)
except sqlite3.OperationalError as exc:
# SQLite ne supporte pas ALTER TABLE … ADD COLUMN IF NOT EXISTS.
# Sur une DB fraîche (schéma déjà à jour), on ignore l'erreur.
if "duplicate column name" not in str(exc):
# Sur une DB fraîche (schéma déjà à jour), certaines migrations
# sont sans effet : ADD COLUMN → "duplicate column name",
# RENAME COLUMN → "no such column". On les ignore.
err = str(exc)
if "duplicate column name" not in err and "no such column" not in err:
raise
conn.execute(
"INSERT INTO schema_migrations (id, applied_at) VALUES (?, ?)",