"""Person response schemas.""" from __future__ import annotations from datetime import date, datetime from pydantic import BaseModel from app.schemas.common import ArtworkOut class PersonSummaryOut(BaseModel): id: str type: str = "person" name: str known_for_department: str | None = None profile_path: str | None = None popularity: float | None = None class GuestEpisodeOut(BaseModel): id: str season_number: int episode_number: int title: str | None = None air_date: date | None = None class FilmographyCreditOut(BaseModel): id: str media_id: str media_type: str title: str department: str job: str | None = None character: str | None = None release_date: date | None = None poster_path: str | None = None # Set only for series filmography built from guest-star episode credits: # how many distinct episodes this character/credit appeared in, since # those are aggregated to one row per series rather than one per # episode. None for movie credits and regular (non-guest) series roles. episode_count: int | None = None # The individual episodes behind episode_count, sorted by (season, # episode) -- empty for movie credits and regular (non-guest) series # roles, same as episode_count. episodes: list[GuestEpisodeOut] = [] class PersonDetailOut(BaseModel): id: str type: str = "person" name: str aliases: list[str] = [] biography: str | None = None birthday: date | None = None deathday: date | None = None birthplace: str | None = None gender: str | None = None known_for_department: str | None = None popularity: float | None = None profile_images: list[ArtworkOut] = [] external_ids: dict[str, str] = {} created_at: datetime updated_at: datetime class PersonCreditsOut(BaseModel): id: str cast: list[FilmographyCreditOut] = [] crew: list[FilmographyCreditOut] = [] class PersonListOut(BaseModel): page: int page_size: int total_results: int total_pages: int results: list[PersonSummaryOut] = []