Une affectation est valide dès sa création ; la retirer = supprimer la ligne.
- Modèle : suppression de AssignmentStatus, ACTIVE_ASSIGNMENT_STATUSES et de
Assignment.status ; migration 0003 (drop_column, alembic check vert)
- Loader de validation : toutes les affectations du bénévole comptent, plus de
filtre par statut
- API : AssignmentCreate/Update/Read sans status ; création → validation
toujours exécutée (blocage si violation bloquante) ; PATCH ne porte plus que
source/locked
- Matrice : MatrixShift.{confirmed, proposed} → {assigned} (compte unique)
- Seed : affectations sans statut, résumé « Affectations » (260)
- Tests mis à jour (matrice, loader, modèle, API) ; 128 tests au total
- CLAUDE.md : glossaire, modèle, sémantique de validation, périmètre
Frontend : les références au statut (propositions, badges confirmé/proposé,
écran de confirmation mobile, mock, schema.ts) restent à retirer séparément.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017uUsRg7XzopkCPWimwg9ZM
47 lines
895 B
Python
47 lines
895 B
Python
"""Énumérations du domaine.
|
|
|
|
Stockées en base comme VARCHAR + contrainte CHECK (`native_enum=False`) : pas de
|
|
type ENUM natif PostgreSQL, donc pas de migration de type à gérer.
|
|
"""
|
|
|
|
import enum
|
|
|
|
|
|
class Role(enum.StrEnum):
|
|
COORDINATOR = "COORDINATOR"
|
|
LEAD = "LEAD"
|
|
VOLUNTEER = "VOLUNTEER"
|
|
|
|
|
|
class AvailabilityStatus(enum.StrEnum):
|
|
AVAILABLE = "AVAILABLE"
|
|
IF_NEEDED = "IF_NEEDED"
|
|
UNAVAILABLE = "UNAVAILABLE"
|
|
|
|
|
|
class AssignmentSource(enum.StrEnum):
|
|
SOLVER = "SOLVER"
|
|
MANUAL = "MANUAL"
|
|
|
|
|
|
class PositionCategory(enum.StrEnum):
|
|
BAR = "BAR"
|
|
TICKETING = "TICKETING"
|
|
WELCOME = "WELCOME"
|
|
PARKING = "PARKING"
|
|
CLEANING = "CLEANING"
|
|
CATERING = "CATERING"
|
|
SETUP = "SETUP"
|
|
STAGE = "STAGE"
|
|
OTHER = "OTHER"
|
|
|
|
|
|
class TshirtSize(enum.StrEnum):
|
|
XS = "XS"
|
|
S = "S"
|
|
M = "M"
|
|
L = "L"
|
|
XL = "XL"
|
|
XXL = "XXL"
|
|
XXXL = "XXXL"
|