fix: SPA fallback для /events при F5 (index.html)

This commit is contained in:
PTah
2026-05-27 11:01:47 +10:00
parent 947fc4ab98
commit b19cdf2b47
+21 -2
View File
@@ -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