groupe-meditation/backend/app/schemas/schemas.py

174 lines
3.7 KiB
Python
Raw Normal View History

2026-03-04 14:01:00 -05:00
"""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):
2026-04-17 04:04:04 -04:00
courriel: str
2026-03-04 14:01:00 -05:00
pin: str
groupe_id: UUID
2026-04-17 04:04:04 -04:00
se_souvenir: bool = False
2026-03-04 14:01:00 -05:00
class InscriptionRequest(BaseModel):
prenom: str
2026-04-17 04:04:04 -04:00
nom: Optional[str] = None
2026-03-04 14:01:00 -05:00
pin: str
code_invitation: str
2026-04-17 04:04:04 -04:00
telephone: str
courriel: str
2026-03-04 14:01:00 -05:00
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
2026-04-17 04:04:04 -04:00
courriel: str
2026-03-04 14:01:00 -05:00
groupe_id: UUID
date_abstinence: Optional[date] = None
2026-05-25 17:39:38 -04:00
is_sysadmin: bool = False
2026-03-04 14:01:00 -05:00
model_config = {"from_attributes": True}
class MembreComplet(MembrePublic):
2026-04-17 04:04:04 -04:00
nom: Optional[str] = None
telephone: str
2026-03-04 14:01:00 -05:00
actif: bool
cree_le: datetime
model_config = {"from_attributes": True}
class MembreUpdate(BaseModel):
2026-04-17 04:04:04 -04:00
prenom: Optional[str] = None
nom: Optional[str] = None
2026-03-04 14:01:00 -05:00
telephone: Optional[str] = None
courriel: Optional[str] = None
date_abstinence: Optional[date] = None
class MembreCreateAdmin(BaseModel):
prenom: str
nom: Optional[str] = None
telephone: str
courriel: str
pin: str
date_abstinence: Optional[date] = None
2026-03-04 14:01:00 -05:00
class ChangerPinRequest(BaseModel):
ancien_pin: str
nouveau_pin: str
# ── Poste / Affectation ──
2026-04-17 04:04:04 -04:00
class PosteCreate(BaseModel):
nom: str
categorie: str # executif, service, physique
description: Optional[str] = None
prerequis: Optional[str] = None
informations: Optional[str] = None
ordre_affichage: Optional[int] = None
class PosteUpdate(BaseModel):
nom: Optional[str] = None
categorie: Optional[str] = None
description: Optional[str] = None
prerequis: Optional[str] = None
informations: Optional[str] = None
ordre_affichage: Optional[int] = None
2026-03-04 14:01:00 -05:00
class PosteOut(BaseModel):
id: UUID
nom: str
categorie: str
description: Optional[str] = None
2026-04-17 04:04:04 -04:00
prerequis: Optional[str] = None
informations: Optional[str] = None
2026-03-04 14:01:00 -05:00
ordre_affichage: Optional[int] = None
2026-04-17 04:04:04 -04:00
actif: bool = True
2026-03-04 14:01:00 -05:00
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
proposeur_id: UUID
secondeur_id: UUID
2026-03-04 14:01:00 -05:00
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]
2026-05-25 17:39:38 -04:00
est_executif: bool = False
2026-03-04 14:01:00 -05:00
modules_consultation: list[ModuleTuile]
modules_saisie: list[ModuleTuile]
modules_gestion: list[ModuleTuile]
2026-04-17 04:04:04 -04:00
groupe: Optional[dict] = None
2026-03-04 14:01:00 -05:00
# ── 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
2026-05-25 17:39:38 -04:00
assemblee_affaires_ordre: Optional[str] = "premiere"
2026-03-04 14:01:00 -05:00
model_config = {"from_attributes": True}