""" Library API router for stats and scanning """ from fastapi import APIRouter, Depends from sqlalchemy import select, func from sqlalchemy.ext.asyncio import AsyncSession from app.database import get_db from app.models import Photo router = APIRouter() @router.get("/stats") async def get_library_stats(db: AsyncSession = Depends(get_db)): """Get library statistics""" # Count total photos total_photos = await db.execute( select(func.count(Photo.id)).where(Photo.media_type.in_(['photo', 'heic', 'raw'])) ) photo_count = total_photos.scalar() # Count total videos total_videos = await db.execute( select(func.count(Photo.id)).where(Photo.media_type == 'video') ) video_count = total_videos.scalar() # Calculate total size total_size = await db.execute( select(func.sum(Photo.file_size)) ) size = total_size.scalar() or 0 return { "total_photos": photo_count, "total_videos": video_count, "total_size": size, "total_size_gb": round(size / (1024**3), 2) if size else 0 } @router.post("/scan") async def trigger_scan(): """Trigger full library re-scan""" from app.tasks.scan import scan_all_source_roots scan_all_source_roots.delay() return {"status": "success", "message": "Library scan started"} @router.get("/scan/status") async def get_scan_status(): """Get current scan status""" # This would connect to Celery to get task status # For now, return a simple response return { "status": "idle", "progress": 0, "current_folder": None, "queued": 0, "done": 0 }