"""Schémas Pydantic pour validation et sérialisation.""" from pydantic import BaseModel from datetime import date, datetime from uuid import UUID from typing import Optional # ── Auth ── class ConnexionRequest(BaseModel): prenom: str pin: str groupe_id: UUID class InscriptionRequest(BaseModel): prenom: str nom: str pin: str code_invitation: str telephone: Optional[str] = None courriel: Optional[str] = None date_abstinence: Optional[date] = None class TokenResponse(BaseModel): access_token: str token_type: str = "bearer" membre: "MembrePublic" # ── Membre ── class MembrePublic(BaseModel): id: UUID prenom: str groupe_id: UUID date_abstinence: Optional[date] = None model_config = {"from_attributes": True} class MembreComplet(MembrePublic): nom: str telephone: Optional[str] = None courriel: Optional[str] = None actif: bool cree_le: datetime model_config = {"from_attributes": True} class MembreUpdate(BaseModel): telephone: Optional[str] = None courriel: Optional[str] = None date_abstinence: Optional[date] = None class ChangerPinRequest(BaseModel): ancien_pin: str nouveau_pin: str # ── Poste / Affectation ── class PosteOut(BaseModel): id: UUID nom: str categorie: str description: Optional[str] = None ordre_affichage: Optional[int] = None model_config = {"from_attributes": True} class AffectationOut(BaseModel): id: UUID membre_id: UUID poste_id: UUID poste_nom: Optional[str] = None poste_categorie: Optional[str] = None date_debut: date date_fin: Optional[date] = None statut: str model_config = {"from_attributes": True} class AffectationCreate(BaseModel): membre_id: UUID poste_id: UUID date_debut: date class TerminerMandatRequest(BaseModel): note_transition: Optional[str] = None successeur_id: Optional[UUID] = None # ── Accueil ── class ModuleTuile(BaseModel): code: str nom: str description: str icone: str couleur: str class AccueilResponse(BaseModel): membre: MembrePublic postes: list[str] modules_consultation: list[ModuleTuile] modules_saisie: list[ModuleTuile] modules_gestion: list[ModuleTuile] # ── Invitation ── class InvitationCreate(BaseModel): pass # groupe_id vient du token class InvitationOut(BaseModel): code: str expire_le: datetime model_config = {"from_attributes": True} # ── Groupe ── class GroupeOut(BaseModel): id: UUID nom: str district: str region: str jour_reunion: Optional[str] = None model_config = {"from_attributes": True}