from fastapi import APIRouter, Depends, HTTPException, Query from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession from backend.database import get_db from backend.models.daily_digest import DailyDigest from backend.models.subreddit import MonitoredSubreddit router = APIRouter(prefix="/digests", tags=["digests"]) @router.get("") async def list_digests( subreddit_id: int | None = None, page: int = Query(1, ge=1), per_page: int = Query(25, ge=1, le=100), db: AsyncSession = Depends(get_db), ): stmt = ( select(DailyDigest, MonitoredSubreddit.name) .join(MonitoredSubreddit) .order_by(DailyDigest.digest_date.desc()) ) if subreddit_id: stmt = stmt.where(DailyDigest.subreddit_id == subreddit_id) stmt = stmt.offset((page - 1) * per_page).limit(per_page) result = await db.execute(stmt) digests = [] for digest, sub_name in result.all(): data = {c.name: getattr(digest, c.name) for c in digest.__table__.columns} data["subreddit_name"] = sub_name digests.append(data) return {"data": digests, "page": page, "per_page": per_page} @router.get("/{digest_id}") async def get_digest(digest_id: int, db: AsyncSession = Depends(get_db)): stmt = ( select(DailyDigest, MonitoredSubreddit.name) .join(MonitoredSubreddit) .where(DailyDigest.id == digest_id) ) result = await db.execute(stmt) row = result.first() if not row: raise HTTPException(status_code=404, detail="Digest not found") digest, sub_name = row data = {c.name: getattr(digest, c.name) for c in digest.__table__.columns} data["subreddit_name"] = sub_name return data