Upload files to "frontend/routes"

This commit is contained in:
Thierry 2026-04-01 23:25:13 +02:00
parent e031b8583d
commit c9685c4ce2

View file

@ -1,6 +1,7 @@
from fastapi import APIRouter, Request, HTTPException # routes/crop.py
from fastapi import APIRouter, Request
from fastapi.responses import HTMLResponse from fastapi.responses import HTMLResponse
import api_client
import config import config
router = APIRouter() router = APIRouter()
@ -8,44 +9,11 @@ router = APIRouter()
@router.get("/crop", response_class=HTMLResponse) @router.get("/crop", response_class=HTMLResponse)
async def crop_ui(request: Request, pc_id: str): async def crop_ui(request: Request, pc_id: str):
"""Interface utilisateur pour le crop du nuage de points""" """
embed_url = f"{config.BACKEND_URL}/viewer-embed/{pc_id}" Retourne le partial crop_section.html pour injection dans #crop-panel.
Appelé par le bouton dans cloud_list_body.html.
"""
return request.app.state.templates.TemplateResponse( return request.app.state.templates.TemplateResponse(
"partials/crop.html", "partials/crop_section.html",
{"request": request, "pc_id": pc_id, "embed_url": embed_url}, {"request": request, "pc_id": pc_id},
) )
@router.post("/crop", response_class=HTMLResponse)
async def crop(request: Request, pc_id: str, box: dict):
"""
Traite la requête de crop :
1. Envoie la box 3D au backend
2. Le backend utilise PDAL pour cropper le nuage
3. Retourne le nouveau pc_id pour l'affichage
"""
try:
# Envoi de la requête de crop au backend
result = await api_client.crop_pointcloud(pc_id, box)
if result.get("ok"):
new_pc_id = result.get("id")
return request.app.state.templates.TemplateResponse(
"partials/upload_result.html",
{"request": request, "result": {
"id": new_pc_id,
"filename": f"{pc_id}_cropped.las",
"size_mb": result.get("size_mb", 0),
"conversion_time_seconds": result.get("conversion_time_seconds", 0),
}, "error": None},
)
else:
return request.app.state.templates.TemplateResponse(
"partials/upload_result.html",
{"request": request, "error": result.get("detail", "Erreur inconnue"), "result": None},
)
except Exception as e:
return request.app.state.templates.TemplateResponse(
"partials/upload_result.html",
{"request": request, "error": str(e), "result": None},
)