""" Schémas Pydantic pour la validation des données """ from pydantic import BaseModel, EmailStr, Field from typing import Optional, List from datetime import datetime # ==================== USER SCHEMAS ==================== class UserCreate(BaseModel): username: str = Field(..., min_length=3, max_length=50) email: EmailStr password: str = Field(..., min_length=6) class UserLogin(BaseModel): email_or_username: str password: str class UserResponse(BaseModel): id: int username: str email: str created_at: datetime class Config: from_attributes = True # ==================== AUTH SCHEMAS ==================== class Token(BaseModel): access_token: str token_type: str # ==================== ANIME SCHEMAS ==================== class AnimeCreate(BaseModel): anime_id: str title: str current_episode: int = 1 total_episodes: Optional[int] = None last_url: Optional[str] = None source: Optional[str] = None status: str = "en_cours" comment: Optional[str] = None rating: float = 0.0 anilist_id: Optional[int] = None cover_image: Optional[str] = None description: Optional[str] = None class AnimeUpdate(BaseModel): title: Optional[str] = None current_episode: Optional[int] = None total_episodes: Optional[int] = None last_url: Optional[str] = None source: Optional[str] = None status: Optional[str] = None comment: Optional[str] = None rating: Optional[float] = None anilist_id: Optional[int] = None cover_image: Optional[str] = None description: Optional[str] = None class AnimeResponse(BaseModel): id: int user_id: int anime_id: str title: str current_episode: int total_episodes: Optional[int] last_url: Optional[str] source: Optional[str] status: str comment: Optional[str] rating: float anilist_id: Optional[int] cover_image: Optional[str] description: Optional[str] last_updated: datetime class Config: from_attributes = True