"""Schémas Pydantic pour les catégories. Définit les schémas de validation pour les requêtes et réponses API. """ from datetime import datetime from pydantic import BaseModel, ConfigDict, Field class CategoryBase(BaseModel): """Schéma de base pour les catégories.""" name: str = Field(..., min_length=1, max_length=100, description="Nom de la catégorie") description: str | None = Field(None, max_length=1000, description="Description optionnelle") color: str | None = Field(None, pattern=r"^#[0-9A-Fa-f]{6}$", description="Couleur hex (#RRGGBB)") icon: str | None = Field(None, max_length=50, description="Nom de l'icône") class CategoryCreate(CategoryBase): """Schéma pour la création d'une catégorie.""" pass class CategoryUpdate(BaseModel): """Schéma pour la mise à jour d'une catégorie (tous les champs optionnels).""" name: str | None = Field(None, min_length=1, max_length=100) description: str | None = Field(None, max_length=1000) color: str | None = Field(None, pattern=r"^#[0-9A-Fa-f]{6}$") icon: str | None = Field(None, max_length=50) class CategoryResponse(CategoryBase): """Schéma de réponse pour une catégorie.""" model_config = ConfigDict(from_attributes=True) id: int created_at: datetime updated_at: datetime class CategoryWithItemCount(CategoryResponse): """Schéma de réponse avec le nombre d'objets.""" item_count: int = Field(default=0, description="Nombre d'objets dans cette catégorie")