from pydantic import BaseModel, EmailStr, Field from typing import Optional class CollaborateurBase(BaseModel): """Champs communs collaborateur""" nom: str = Field(..., max_length=50) prenom: Optional[str] = Field(None, max_length=50) fonction: Optional[str] = Field(None, max_length=50) # Adresse adresse: Optional[str] = Field(None, max_length=100) complement: Optional[str] = Field(None, max_length=100) code_postal: Optional[str] = Field(None, max_length=10) ville: Optional[str] = Field(None, max_length=50) code_region: Optional[str] = Field(None, max_length=50) pays: Optional[str] = Field(None, max_length=50) # Services service: Optional[str] = Field(None, max_length=50) vendeur: bool = Field(default=False) caissier: bool = Field(default=False) acheteur: bool = Field(default=False) chef_ventes: bool = Field(default=False) numero_chef_ventes: Optional[int] = None # Contact telephone: Optional[str] = Field(None, max_length=20) telecopie: Optional[str] = Field(None, max_length=20) email: Optional[EmailStr] = None tel_portable: Optional[str] = Field(None, max_length=20) # Réseaux sociaux facebook: Optional[str] = Field(None, max_length=100) linkedin: Optional[str] = Field(None, max_length=100) skype: Optional[str] = Field(None, max_length=100) # Autres matricule: Optional[str] = Field(None, max_length=20) sommeil: bool = Field(default=False) class CollaborateurCreate(CollaborateurBase): """Création d'un collaborateur""" pass class CollaborateurUpdate(BaseModel): """Modification d'un collaborateur (tous champs optionnels)""" nom: Optional[str] = Field(None, max_length=50) prenom: Optional[str] = Field(None, max_length=50) fonction: Optional[str] = Field(None, max_length=50) adresse: Optional[str] = Field(None, max_length=100) complement: Optional[str] = Field(None, max_length=100) code_postal: Optional[str] = Field(None, max_length=10) ville: Optional[str] = Field(None, max_length=50) code_region: Optional[str] = Field(None, max_length=50) pays: Optional[str] = Field(None, max_length=50) service: Optional[str] = Field(None, max_length=50) vendeur: Optional[bool] = None caissier: Optional[bool] = None acheteur: Optional[bool] = None chef_ventes: Optional[bool] = None numero_chef_ventes: Optional[int] = None telephone: Optional[str] = Field(None, max_length=20) telecopie: Optional[str] = Field(None, max_length=20) email: Optional[EmailStr] = None tel_portable: Optional[str] = Field(None, max_length=20) facebook: Optional[str] = Field(None, max_length=100) linkedin: Optional[str] = Field(None, max_length=100) skype: Optional[str] = Field(None, max_length=100) matricule: Optional[str] = Field(None, max_length=20) sommeil: Optional[bool] = None class CollaborateurListe(BaseModel): """Vue liste simplifiée""" numero: int nom: str prenom: Optional[str] fonction: Optional[str] service: Optional[str] email: Optional[str] telephone: Optional[str] vendeur: bool sommeil: bool class CollaborateurDetails(CollaborateurBase): """Détails complets d'un collaborateur""" numero: int class Config: json_schema_extra = { "example": { "numero": 1, "nom": "DUPONT", "prenom": "Jean", "fonction": "Directeur Commercial", "service": "Commercial", "vendeur": True, "email": "j.dupont@entreprise.fr", "telephone": "0123456789", "sommeil": False, } }