diff --git a/catalog/api.py b/catalog/api.py index cd1653df..64b0cdbc 100644 --- a/catalog/api.py +++ b/catalog/api.py @@ -113,6 +113,15 @@ def get_tv_season(request, uuid: str, response: HttpResponse): return _get_item(TVSeason, uuid, response) +@api.get( + "/tv/episode/{uuid}", + response={200: TVEpisodeSchema, 302: RedirectedResult, 404: Result}, + auth=None, +) +def get_tv_episode(request, uuid: str, response: HttpResponse): + return _get_item(TVEpisode, uuid, response) + + @api.get( "/podcast/{uuid}", response={200: PodcastSchema, 302: RedirectedResult, 404: Result}, diff --git a/catalog/models.py b/catalog/models.py index 084c080e..0aea3db4 100644 --- a/catalog/models.py +++ b/catalog/models.py @@ -15,6 +15,7 @@ from .tv.models import ( TVShowInSchema, TVSeasonSchema, TVSeasonInSchema, + TVEpisodeSchema, ) from .music.models import Album, AlbumSchema, AlbumInSchema from .game.models import Game, GameSchema, GameInSchema diff --git a/catalog/tv/models.py b/catalog/tv/models.py index 3000fe19..efa0f4c7 100644 --- a/catalog/tv/models.py +++ b/catalog/tv/models.py @@ -64,12 +64,17 @@ class TVSeasonInSchema(ItemInSchema): year: int | None = None site: str | None = None episode_count: int | None = None + episode_uuids: list[str] class TVSeasonSchema(TVSeasonInSchema, BaseSchema): pass +class TVEpisodeSchema(ItemSchema): + episode_number: int | None = None + + class TVShow(Item): type = ItemType.TVShow child_class = "TVSeason" @@ -400,6 +405,10 @@ class TVSeason(Item): def child_items(self): return self.episodes.all() + @property + def episode_uuids(self): + return [x.uuid for x in self.all_episodes] + class TVEpisode(Item): category = ItemCategory.TV