48 lines
1.4 KiB
Python
48 lines
1.4 KiB
Python
from fastapi import APIRouter, Depends, Query
|
|
from sqlalchemy.ext.asyncio import AsyncSession
|
|
|
|
from app.db import get_session
|
|
from app.services.catalog import CatalogService
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
@router.get("/feed/recommended")
|
|
async def recommended_feed(
|
|
topic: str | None = None,
|
|
page_size: int = Query(20, ge=1, le=50),
|
|
session: AsyncSession = Depends(get_session),
|
|
) -> dict:
|
|
return await CatalogService(session).report_cards(topic=topic, page_size=page_size)
|
|
|
|
|
|
@router.get("/reports")
|
|
async def reports(
|
|
topic: str | None = None,
|
|
institution_id: str | None = None,
|
|
has_audio: bool | None = None,
|
|
source_tier: str | None = None,
|
|
q: str | None = None,
|
|
page_size: int = Query(20, ge=1, le=50),
|
|
session: AsyncSession = Depends(get_session),
|
|
) -> dict:
|
|
return await CatalogService(session).report_cards(
|
|
topic=topic,
|
|
institution_id=institution_id,
|
|
has_audio=has_audio,
|
|
source_tier=source_tier,
|
|
q=q,
|
|
page_size=page_size,
|
|
)
|
|
|
|
|
|
@router.get("/reports/{report_id}")
|
|
async def report_detail(report_id: str, session: AsyncSession = Depends(get_session)) -> dict:
|
|
return await CatalogService(session).report_detail(report_id)
|
|
|
|
|
|
@router.get("/reports/{report_id}/modules/{module_id}")
|
|
async def module_detail(report_id: str, module_id: str, session: AsyncSession = Depends(get_session)) -> dict:
|
|
return await CatalogService(session).module_detail(report_id, module_id)
|
|
|