# routes/upload.py from fastapi import APIRouter, Request, UploadFile, File, HTTPException from fastapi.responses import HTMLResponse, RedirectResponse from pathlib import Path import api_client import config router = APIRouter() @router.get("/", response_class=RedirectResponse) async def root(): """Redirige / vers /upload""" return RedirectResponse(url="/upload") @router.get("/upload", response_class=HTMLResponse) async def index(request: Request): """ ✅ CORRECTION BUG 2 : si la requête vient de HTMX (header HX-Request), on retourne uniquement le partial upload_form.html (sans navbar, sans layout). Si c'est une navigation directe dans le navigateur, on retourne index.html complet. """ is_htmx = request.headers.get("HX-Request") == "true" if is_htmx: return request.app.state.templates.TemplateResponse( "partials/upload_form.html", {"request": request}, ) return request.app.state.templates.TemplateResponse( "index.html", {"request": request, "active_tab": "upload"}, ) @router.get("/health-check", response_class=HTMLResponse) async def health_check(request: Request): try: data = await api_client.check_health() return request.app.state.templates.TemplateResponse( "partials/health_status.html", {"request": request, "ok": True, "entwine_available": data.get("entwine_available", False), "disk_free_gb": data.get("disk_free_gb", "?")}, ) except Exception as e: return request.app.state.templates.TemplateResponse( "partials/health_status.html", {"request": request, "ok": False, "error": str(e)}, ) @router.post("/upload", response_class=HTMLResponse) async def upload(request: Request, file: UploadFile = File(...)): suffix = Path(file.filename).suffix.lower() if suffix not in config.SUPPORTED_EXTENSIONS: return request.app.state.templates.TemplateResponse( "partials/upload_result.html", {"request": request, "error": f"Format non supporté : {suffix}. Formats acceptés : {', '.join(config.SUPPORTED_EXTENSIONS)}", "result": None}, ) try: data = await api_client.upload_file(file.filename, await file.read()) return request.app.state.templates.TemplateResponse( "partials/upload_result.html", {"request": request, "result": data, "error": None}, ) except Exception as e: return request.app.state.templates.TemplateResponse( "partials/upload_result.html", {"request": request, "error": str(e), "result": None}, )