fix: anime api

This commit is contained in:
2025-10-26 19:28:23 +01:00
parent 75aa410f98
commit 39991d9ffc
2 changed files with 85 additions and 27 deletions

View File

@@ -95,9 +95,24 @@ async def get_process_locks(
class AnimeSummary(BaseModel):
id: str
title: str
missing_episodes: int
"""Summary of an anime series with missing episodes."""
key: str # Unique identifier (used as id in frontend)
name: str # Series name (can be empty)
site: str # Provider site
folder: str # Local folder name
missing_episodes: dict # Episode dictionary: {season: [episode_numbers]}
class Config:
"""Pydantic model configuration."""
json_schema_extra = {
"example": {
"key": "beheneko-the-elf-girls-cat",
"name": "Beheneko",
"site": "aniworld.to",
"folder": "beheneko the elf girls cat (2025)",
"missing_episodes": {"1": [1, 2, 3, 4]}
}
}
class AnimeDetail(BaseModel):
@@ -203,26 +218,41 @@ async def list_anime(
series = series_app.List.GetMissingEpisode()
summaries: List[AnimeSummary] = []
for serie in series:
episodes_dict = getattr(serie, "episodeDict", {}) or {}
missing_episodes = len(episodes_dict)
key = getattr(serie, "key", getattr(serie, "folder", ""))
title = getattr(serie, "name", "")
# Get all properties from the serie object
key = getattr(serie, "key", "")
name = getattr(serie, "name", "")
site = getattr(serie, "site", "")
folder = getattr(serie, "folder", "")
episode_dict = getattr(serie, "episodeDict", {}) or {}
# Convert episode dict keys to strings for JSON serialization
missing_episodes = {str(k): v for k, v in episode_dict.items()}
summaries.append(
AnimeSummary(
id=key,
title=title,
key=key,
name=name,
site=site,
folder=folder,
missing_episodes=missing_episodes,
)
)
# Apply sorting if requested
if sort_by:
if sort_by == "title":
summaries.sort(key=lambda x: x.title)
if sort_by in ["title", "name"]:
summaries.sort(key=lambda x: x.name or x.key)
elif sort_by == "id":
summaries.sort(key=lambda x: x.id)
summaries.sort(key=lambda x: x.key)
elif sort_by == "missing_episodes":
summaries.sort(key=lambda x: x.missing_episodes, reverse=True)
# Sort by total number of missing episodes
# (count all episodes across all seasons)
summaries.sort(
key=lambda x: sum(
len(eps) for eps in x.missing_episodes.values()
),
reverse=True
)
return summaries
except HTTPException: