diff --git a/backend/app/main.py b/backend/app/main.py index 1bbd1f5..6cb4c6f 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -1,8 +1,9 @@ from contextlib import asynccontextmanager from pathlib import Path -from fastapi import FastAPI +from fastapi import FastAPI, HTTPException from fastapi.middleware.cors import CORSMiddleware +from fastapi.responses import FileResponse from fastapi.staticfiles import StaticFiles from sqlalchemy import select @@ -67,7 +68,25 @@ def create_app() -> FastAPI: frontend_dist = ROOT / "frontend" / "dist" if frontend_dist.is_dir(): - app.mount("/", StaticFiles(directory=str(frontend_dist), html=True), name="ui") + assets_dir = frontend_dist / "assets" + if assets_dir.is_dir(): + app.mount( + "/assets", + StaticFiles(directory=str(assets_dir)), + name="ui-assets", + ) + + @app.get("/{spa_path:path}") + def spa_fallback(spa_path: str) -> FileResponse: + if spa_path.startswith("api/"): + raise HTTPException(status_code=404, detail="Not Found") + candidate = frontend_dist / spa_path + if spa_path and candidate.is_file(): + return FileResponse(candidate) + index = frontend_dist / "index.html" + if not index.is_file(): + raise HTTPException(status_code=404, detail="UI not built") + return FileResponse(index) return app