from fastapi import APIRouter, Request from fastapi.responses import HTMLResponse import api_client router = APIRouter() def _render(request: Request, template: str, **kwargs) -> HTMLResponse: """Render using JinjaX catalog for all .jinja templates""" catalog = request.app.state.catalog html_content = catalog.render(template, **kwargs) return HTMLResponse(content=html_content) @router.get("/admin/list", response_class=HTMLResponse) async def admin_list(request: Request): try: pointclouds = await api_client.list_pointclouds() return _render( request, "partials/cloud_list", pointclouds=pointclouds, error=None, ) except Exception as e: return _render( request, "partials/cloud_list", pointclouds=[], error=str(e), ) @router.get("/admin/debug/{pc_id}", response_class=HTMLResponse) async def admin_debug(request: Request, pc_id: str): try: data = await api_client.get_debug(pc_id) return _render( request, "partials/debug_panel", pc_id=pc_id, data=data, error=None, ) except Exception as e: return _render( request, "partials/debug_panel", pc_id=pc_id, data=None, error=str(e), ) @router.delete("/admin/delete/{pc_id}", response_class=HTMLResponse) async def admin_delete(request: Request, pc_id: str): try: await api_client.delete_pointcloud(pc_id) pointclouds = await api_client.list_pointclouds() return _render( request, "partials/cloud_list", pointclouds=pointclouds, error=None, ) except Exception as e: return _render( request, "partials/cloud_list", pointclouds=[], error=str(e), )