Files
Anime-Tracker-API/schemas.py
2025-12-02 19:42:59 +01:00

90 lines
2.0 KiB
Python

"""
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, max_length=72)
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