from sqlalchemy import select from ..database.db import session_pool from ..model.arxiv_catalog import ArxivCatalog from ..schema.arxiv import ArxivEntry from ..core.logger import SingletonLogger logger = SingletonLogger().get_logger() async def get_feed( topics: list[str], start: int = 0, limit: int = 20, ) -> list[ArxivEntry]: """Query the ArXiv catalog for papers matching topics, ordered by published_date DESC.""" async with session_pool() as session: stmt = ( select(ArxivCatalog) .where(ArxivCatalog.primary_category.in_(topics)) .order_by(ArxivCatalog.published_date.desc()) .offset(start) .limit(limit) ) result = await session.execute(stmt) rows = result.scalars().all() return [ ArxivEntry( id=str(row.id), arxiv_id=row.arxiv_id, title=row.title, abstract=row.abstract, authors=row.authors.split("; ") if row.authors else [], categories=row.categories.split() if row.categories else [], primary_category=row.primary_category, published=row.published_date, updated=row.updated_date, pdf_url=row.pdf_url, paper_url=row.paper_url, ) for row in rows ]