2026-09-04 17:34:03 -05:00
|
|
|
"""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
|
|
|
|
|
|
|
|
|
|
|
2026-09-05 09:19:52 -05:00
|
|
|
class GuestEpisodeOut(BaseModel):
|
|
|
|
|
id: str
|
|
|
|
|
season_number: int
|
|
|
|
|
episode_number: int
|
|
|
|
|
title: str | None = None
|
|
|
|
|
air_date: date | None = None
|
|
|
|
|
|
|
|
|
|
|
2026-09-04 17:34:03 -05:00
|
|
|
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
|
2026-09-04 20:00:15 -05:00
|
|
|
# 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
|
2026-09-05 09:19:52 -05:00
|
|
|
# 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] = []
|
2026-09-04 17:34:03 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
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] = []
|
2026-09-05 10:32:16 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class PersonListOut(BaseModel):
|
|
|
|
|
page: int
|
|
|
|
|
page_size: int
|
|
|
|
|
total_results: int
|
|
|
|
|
total_pages: int
|
|
|
|
|
results: list[PersonSummaryOut] = []
|