"""Découverte : nouveautés des sources, incontournables, recommandations.""" import logging from typing import Annotated from fastapi import APIRouter, Depends, Query from app.routers.auth import CurrentUser, current_user from app.routers.search import _allowed_media_types from app.services.discover import discover logger = logging.getLogger(__name__) router = APIRouter(prefix="/api", tags=["discover"], dependencies=[Depends(current_user)]) @router.get("/discover") async def get_discover( user: CurrentUser, latest_limit: Annotated[int, Query(ge=1, le=50)] = 24, must_watch_limit: Annotated[int, Query(ge=1, le=20)] = 20, for_you_limit: Annotated[int, Query(ge=1, le=20)] = 20, ) -> dict: """Les trois sections de découverte en une requête (sections vides si source KO).""" allowed = _allowed_media_types(user.content_preference) latest = [i for i in await discover.latest(latest_limit) if i.get("media_type", "anime") in allowed] # Incontournables et Pour toi sont issus de Kitsu (catalogue animés) : # en mode séries, elles n'ont pas de sens — on ne les calcule même pas. if "anime" in allowed: must_watch = await discover.must_watch(must_watch_limit) for_you = await discover.for_you(user.id, for_you_limit) else: must_watch = [] for_you = {"based_on": [], "items": []} return {"latest": latest, "must_watch": must_watch, "for_you": for_you}