fix: anime api
This commit is contained in:
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user