Files
ohm_streaming/app/routers/discover.py
T
Roman 89d9a98f80 Découverte : masquer Incontournables et Pour toi en mode séries
Ces deux sections sont issues de Kitsu (catalogue animés) — elles
n'ont pas de sens pour un compte en préférence « séries » et montraient
des animés malgré le filtre des nouveautés. Elles ne sont même plus
calculées (aucun appel Kitsu) et l'UI masque les sections vides.

+1 test (Kitsu simulé) — 115 au total.
2026-09-23 15:14:55 +00:00

36 lines
1.4 KiB
Python

"""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}