from typing import List from fastapi import APIRouter, HTTPException, Query, Request from fastapi.responses import Response from app.models.sample import Sample router = APIRouter() @router.get("/list", response_model=List[Sample]) async def list_samples( request: Request, limit: int = Query(200, ge=1, le=1000), offset: int = Query(0, ge=0) ): """ List sample images with pagination """ try: sample_manager = request.app.state.sample_manager return await sample_manager.list_samples(limit, offset) except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @router.get("/latest", response_model=List[Sample]) async def get_latest_samples( request: Request, count: int = Query(20, ge=1, le=100) ): """ Get the most recent sample images """ try: sample_manager = request.app.state.sample_manager return await sample_manager.get_latest_samples(count) except Exception as e: raise HTTPException(status_code=500, detail=str(e)) @router.get("/image/{filename}") async def get_sample_image( request: Request, filename: str): """ Get a specific sample image """ try: sample_manager = request.app.state.sample_manager image_data = await sample_manager.get_sample_data(filename) # Try to determine content type from filename content_type = "image/jpeg" # default if filename.lower().endswith('.png'): content_type = "image/png" elif filename.lower().endswith('.gif'): content_type = "image/gif" return Response( content=bytes(image_data), media_type=content_type ) except HTTPException: raise except Exception as e: raise HTTPException(status_code=500, detail=str(e))