"""Image listing + update-check endpoints.""" from __future__ import annotations from fastapi import APIRouter, Depends, Query, Request from sqlmodel import Session from auth import get_current_user, require_admin from database import get_session from models.user import User from services import audit_service, image_service, update_service router = APIRouter(prefix="/api/images", tags=["images"]) def _ip(request: Request) -> str: return request.client.host if request.client else "unknown" @router.get("") def list_images(_user: User = Depends(get_current_user)) -> list[dict]: return image_service.list_images() @router.get("/updates") def updates(_user: User = Depends(get_current_user)) -> dict: return update_service.get_cache() @router.post("/check") async def check(_user: User = Depends(require_admin)) -> dict: return await update_service.check_all() @router.post("/prune") def prune( request: Request, all_unused: bool = Query(False, alias="all"), session: Session = Depends(get_session), user: User = Depends(require_admin), ) -> dict: result = image_service.prune_images(all_unused) audit_service.record( session, user=user.username, action="image.prune", target="*", detail=f"all={all_unused} reclaimed={result.get('SpaceReclaimed')}", ip=_ip(request), ) return result