Added listing active and inactive anime

This commit is contained in:
florian committed 2026-10-26 11:27:49 +01:00
1 parent 938067560d
commit 5d665d3310
1 file changed
+40 -1
+40 -1
View File
@@ -5,7 +5,7 @@ from datetime import UTC, datetime
import uvicorn
from fastapi import Depends, FastAPI, HTTPException, Request
from pydantic import BaseModel, Field
from pydantic import BaseModel, Field, computed_field
from seadex import EntryNotFoundError, SeaDexEntry
from anilist_query import AniListError, AnimeNotFoundError, MissingAnimeName, get_anime_name
@@ -25,6 +25,22 @@ logger = setup_logger(__name__)
class AnimeCreate(BaseModel):
anilist_id: int = Field(gt=0)
class AnimeEntry(BaseModel):
name: str
last_updated: str | None = None
class Counts(BaseModel):
active: int
inactive: int
class AnimeList(BaseModel):
active: list[AnimeEntry] = Field(default_factory=list)
inactive: list[AnimeEntry] = Field(default_factory=list)
@computed_field
@property
def counts(self) -> Counts:
return Counts(active=len(self.active),inactive=len(self.inactive))
@asynccontextmanager
async def lifespan(app: FastAPI):
@@ -233,6 +249,29 @@ def remove_anime(anime: AnimeCreate, db=Depends(get_db)):
logger.debug(f"[FastAPI] Tracking was already deactivated for anilist_id={anime.anilist_id}")
return {"status": "ok", "detail": f"Entry {anime.anilist_id} was already inactive"}
@api.get("/list/anime", response_model=AnimeList)
def list_active_and_inactive_anime(db=Depends(get_db)):
logger.info(f"[FastAPI] Received request to list anime")
with db.cursor() as cursor:
try:
cursor.execute(
"SELECT anime_name, active, last_updated " \
"FROM seadex_state ORDER BY anime_name"
)
rows = cursor.fetchall()
except Exception as e:
logger.exception(f"[FastAPI] Failed to list anime")
raise HTTPException(status_code=500) from e
anime_list=AnimeList ()
for name, is_active, last_updated in rows:
entry = AnimeEntry(
name=name,
last_updated=None if last_updated is None else str(last_updated),
)
(anime_list.active if is_active else anime_list.inactive).append(entry)
return anime_list
async def start_servers():