AdamThomasandClaude Sonnet 5 11bc8cbe36 Vœu de compagnon : traité comme réciproque par le solveur
Le vœu reste à sens unique en base (A choisit B sur sa fiche, B n'a rien à
faire) mais si A souhaite B, B doit désormais profiter aussi de la présence
de A — dans les deux sens : affecter A d'abord fait remonter B comme
candidat, et affecter B d'abord fait remonter A, même si B n'a rien demandé.

- Solveur (`loader.py`) : le vœu (A → B) alimente maintenant l'ensemble
  effectif des deux bénévoles (A et B), pas seulement celui du demandeur.
  Aucun changement dans `engine.py` : il ne fait que lire un ensemble déjà
  symétrisé.
- Mock (`buildEffectiveCompanions`) et classement par défaut
  (`buildEffectiveCompanionIds` dans `lib/planning.ts`, utilisé par
  `AssignmentPanel.tsx`) : même symétrisation, pour rester cohérents avec le
  vrai solveur.
- La fiche bénévole (vœux affichés/édités) n'est pas touchée : c'est le seul
  endroit qui reste à sens unique, par construction (la réciprocité n'est
  qu'une lecture, jamais une donnée enregistrée — sinon éditer sa propre
  liste risquerait d'effacer le vœu de quelqu'un d'autre).
- Nouveau test d'intégration : le bénévole qui n'a rien demandé profite quand
  même de la présence de celui qui l'a choisi.
- CLAUDE.md à jour.

Vérifié : 193 tests backend pertinents (dont le nouveau), ruff, alembic
check ; typecheck/lint/build/smoke frontend.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017uUsRg7XzopkCPWimwg9ZM
2026-09-15 22:32:02 +02:00

Gestion des bénévoles

Application web de gestion des bénévoles pour un festival associatif. Backend FastAPI + PostgreSQL, frontend React (à venir), déploiement Docker Compose auto-hébergé.

Voir CLAUDE.md pour le vocabulaire du domaine, l'arborescence et les conventions.

Démarrage rapide

make demo     # base + backend + frontend, jeu de démonstration chargé
make blank    # idem, mais édition vierge + 1er compte coordination

Chaque commande construit les images, applique les migrations, prépare les données, bascule le frontend sur l'API réelle (.env) et affiche les identifiants de connexion.

make blank accepte des paramètres :

make blank EMAIL=moi@festival.fr PASSWORD=mon-mot-de-passe-solide \
          NAME="Festival 2026" START=2026-07-01 END=2026-07-04

Le jeu de démo : 120 bénévoles fictifs, 15 postes, 4 jours. L'édition vierge : une édition + un compte coordination (mot de passe) + 3 créneaux types.

Tests

docker compose run --rm backend uv run pytest

La base de test (benevoles_test) est créée automatiquement au premier démarrage du conteneur PostgreSQL.

Structure

Dossier Rôle
backend/ API FastAPI, modèle SQLModel, migrations Alembic
frontend/ Interface React + Vite + TS + Tailwind (service frontend)
deploy/ Configuration de déploiement production (compose, Caddy, runbook)
.gitlab-ci.yml Chaîne CI/CD (tests → build → SSH sur le VPS)
S
Description
No description provided
Readme
1.8 MiB
Languages
Python 51.8%
TypeScript 47.6%
JavaScript 0.2%
Makefile 0.2%
Dockerfile 0.1%