- CRUD complet, scopé par édition, sur Position, Shift, Volunteer, Assignment
(routers app/api/*, schémas Pydantic, dépendance get_edition partagée)
- Volunteer : gestion des compétences par codes (création à la volée),
suppression = effacement complet en cascade (RGPD)
- Shift : contrôle fin > début, poste de la même édition, compétences requises
- Assignment : toute écriture active passe par le moteur de validation ;
violation bloquante -> 422 error.validation_failed, avertissements renvoyés
dans la réponse. Endpoint POST .../assignments/validate en simulation.
app/validation/loader.py construit la ValidationInput depuis la base.
- GET /editions/{id}/matrix : postes -> créneaux -> {min, ideal, confirmed,
proposed}, source de l'écran principal
- 30 tests d'API (CRUD, 404/409/422, cascade, blocage, avertissements, matrice,
loader) ; 104 tests au total ; alembic check toujours vert
- Clés de traduction shift.* / assignment.* / volunteer.* ajoutées
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017uUsRg7XzopkCPWimwg9ZM
35 lines
1.0 KiB
Python
35 lines
1.0 KiB
Python
from fastapi import FastAPI
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
|
|
from app.api.assignments import router as assignment_router
|
|
from app.api.health import router as health_router
|
|
from app.api.imports import router as import_router
|
|
from app.api.matrix import router as matrix_router
|
|
from app.api.positions import router as position_router
|
|
from app.api.shifts import router as shift_router
|
|
from app.api.volunteers import router as volunteer_router
|
|
from app.config import get_settings
|
|
from app.logging_config import configure_logging
|
|
|
|
configure_logging()
|
|
|
|
settings = get_settings()
|
|
|
|
app = FastAPI(title="Gestion des bénévoles", version="0.1.0")
|
|
|
|
app.add_middleware(
|
|
CORSMiddleware,
|
|
allow_origins=settings.cors_origins,
|
|
allow_credentials=True,
|
|
allow_methods=["*"],
|
|
allow_headers=["*"],
|
|
)
|
|
|
|
app.include_router(health_router)
|
|
app.include_router(import_router)
|
|
app.include_router(volunteer_router)
|
|
app.include_router(position_router)
|
|
app.include_router(shift_router)
|
|
app.include_router(assignment_router)
|
|
app.include_router(matrix_router)
|