- app/auth/ : jetons (lien magique aléatoire haché SHA-256, JWT HS256), dépendances get_current_account / current_account_in_edition / require_roles + require_coordinator / require_staff, et ensure_can_write_position/_shift - Endpoints app/api/auth.py : POST .../auth/magic-link (202 constant, pas de divulgation), POST .../auth/verify (JWT, jeton à usage unique), GET /auth/me - Envoi d'email stubé : le lien est journalisé (logger app.auth, identifiants seulement, aucune donnée nominative) - app/api/accounts.py : CRUD des comptes réservé à la COORDINATION - Rôles appliqués sur toute l'API : COORDINATION accès complet ; RÉFÉRENT lecture globale + écriture sur ses seuls postes/créneaux/affectations ; BÉNÉVOLE sa fiche et ses affectations, aucune écriture - imports.py aligné sur la dépendance get_edition (404 avant 403) - Secret JWT porté à >= 32 octets (config, .env.example, docker-compose) - seed : crée un compte VOLUNTEER pour chaque bénévole avec email (104 comptes) - conftest : fixtures make_account / coordinator / as_account / raw_client ; la suite existante s'exécute en COORDINATION - 13 tests d'authentification + de rôles ; 119 tests au total ; alembic check toujours vert (Account / MagicLinkToken déjà dans la migration 0001) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017uUsRg7XzopkCPWimwg9ZM
Backend — API de gestion des bénévoles
FastAPI · SQLModel · PostgreSQL · Alembic. Dépendances gérées par uv.
Développement
Toujours via Docker Compose depuis la racine du dépôt :
docker compose up --build # démarre db + backend (reload actif)
docker compose run --rm backend uv run pytest
docker compose run --rm backend uv run ruff check .
Migrations
docker compose run --rm backend uv run alembic revision --autogenerate -m "..."
docker compose run --rm backend uv run alembic upgrade head
Structure
| Chemin | Rôle |
|---|---|
app/main.py |
Instance FastAPI, middlewares, routers |
app/config.py |
Configuration (variables d'environnement) |
app/db.py |
Engine SQLAlchemy + dépendance de session |
app/api/ |
Routers HTTP |
app/models/ |
Tables SQLModel du domaine |
app/validation/ |
Moteur de règles d'affectation (cœur du produit) |
app/i18n/ |
t(key) + locales/fr.json — aucun texte en dur ailleurs |
app/migrations/ |
Alembic |
tests/ |
pytest, base de test PostgreSQL réelle |
Note
uv.lock est versionné (généré dans le conteneur). Le régénérer après toute
modification des dépendances : docker compose run --rm backend uv lock.