Étape 5 : API CRUD, matrice et validation branchée
- 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
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
c96e85af37
commit
74e35f0195
@@ -187,10 +187,12 @@ pointage sur site · fonctions d'IA.
|
||||
│ │ ├── config.py # settings (pydantic-settings)
|
||||
│ │ ├── db.py # engine + session
|
||||
│ │ ├── logging_config.py # RGPD : pas de PII dans les logs
|
||||
│ │ ├── api/ # routers (health, imports)
|
||||
│ │ ├── api/ # routers + schemas Pydantic + deps
|
||||
│ │ │ # health, imports, volunteers, positions,
|
||||
│ │ │ # shifts, assignments, matrix
|
||||
│ │ ├── importing/ # import CSV/Excel (parser, values, service)
|
||||
│ │ ├── models/ # tables SQLModel
|
||||
│ │ ├── validation/ # moteur de règles pur (models, engine)
|
||||
│ │ ├── validation/ # moteur pur (models, engine) + loader (base)
|
||||
│ │ ├── i18n/
|
||||
│ │ │ ├── __init__.py # t(key, **params)
|
||||
│ │ │ └── locales/fr.json
|
||||
@@ -263,12 +265,9 @@ Aucune dépendance locale requise hors Docker.
|
||||
| 1 | Squelette : monorepo, Docker, CI/CD, backend qui démarre | validée |
|
||||
| 2 | Modèle de données complet + migration Alembic initiale | validée |
|
||||
| 3 | Import CSV/Excel (analyse + exécution, rapport, doublons, simulation) | validée |
|
||||
| 4 | Moteur de validation des affectations (pur, TDD, 5 règles) | à valider |
|
||||
| 4 | Moteur de validation des affectations (pur, TDD, 5 règles) | validée |
|
||||
| 5 | API CRUD (Position, Shift, Volunteer, Assignment) + matrice + validation branchée | à valider |
|
||||
|
||||
> **En attente** : la couche d'authentification (lien magique, `Account`,
|
||||
> JWT, dépendances de rôle) fera l'objet d'une étape dédiée. Les endpoints
|
||||
> actuels ne sont pas encore protégés.
|
||||
>
|
||||
> **À brancher plus tard** : `app.validation.validate()` sera appelé par l'API
|
||||
> CRUD des affectations (étape 5) via un chargeur qui construit la
|
||||
> `ValidationInput` depuis la base.
|
||||
|
||||
Reference in New Issue
Block a user