
- Add proper model relationships for better querying - Implement character model and endpoints for managing anime characters - Add advanced filtering options (year, score range, source, studio, etc.) - Add statistics endpoint for analyzing anime collection - Include pagination metadata for easier navigation - Create Alembic migration for the new character model - Update README with new features and documentation
58 lines
1.3 KiB
Python
58 lines
1.3 KiB
Python
from typing import Optional, List, TYPE_CHECKING, ForwardRef
|
|
from datetime import date
|
|
from pydantic import BaseModel, Field
|
|
from app.schemas.genre import Genre
|
|
|
|
if TYPE_CHECKING:
|
|
from app.schemas.character import Character
|
|
else:
|
|
Character = ForwardRef("Character")
|
|
|
|
|
|
class AnimeBase(BaseModel):
|
|
title: str
|
|
alternative_titles: Optional[str] = None
|
|
synopsis: Optional[str] = None
|
|
episodes: Optional[int] = None
|
|
status: Optional[str] = None
|
|
aired_from: Optional[date] = None
|
|
aired_to: Optional[date] = None
|
|
duration: Optional[str] = None
|
|
rating: Optional[str] = None
|
|
score: Optional[float] = Field(None, ge=0, le=10)
|
|
ranked: Optional[int] = None
|
|
popularity: Optional[int] = None
|
|
studio: Optional[str] = None
|
|
source: Optional[str] = None
|
|
image_url: Optional[str] = None
|
|
|
|
|
|
class AnimeCreate(AnimeBase):
|
|
genre_ids: Optional[List[int]] = []
|
|
|
|
|
|
class AnimeUpdate(AnimeBase):
|
|
title: Optional[str] = None
|
|
genre_ids: Optional[List[int]] = None
|
|
|
|
|
|
class Anime(AnimeBase):
|
|
id: int
|
|
genres: Optional[List[Genre]] = []
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class AnimeWithCharacters(Anime):
|
|
characters: Optional[List[Character]] = []
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class AnimeSearchResults(BaseModel):
|
|
results: List[Anime]
|
|
total: int
|
|
page: int
|
|
size: int |