44 lines
1.2 KiB
Python
44 lines
1.2 KiB
Python
import os
|
|
from pathlib import Path
|
|
|
|
from fastapi import FastAPI
|
|
from fastapi.staticfiles import StaticFiles
|
|
|
|
from pages import router as pages_router, ensure_default_pages
|
|
from docker_utils import router as docker_router
|
|
from converter import router as converter_router
|
|
from browse import router as browse_router, start_browser
|
|
|
|
app = FastAPI(title="µFrame Editor")
|
|
|
|
app.include_router(converter_router, prefix="/api")
|
|
app.include_router(pages_router, prefix="/api")
|
|
app.include_router(docker_router, prefix="/api")
|
|
app.include_router(browse_router, prefix="/api")
|
|
|
|
|
|
@app.on_event("startup")
|
|
async def startup():
|
|
ensure_default_pages()
|
|
start_browser()
|
|
|
|
|
|
@app.get("/api/health")
|
|
async def health():
|
|
return {"status": "ok"}
|
|
|
|
|
|
# Serve built frontend as static files with SPA fallback
|
|
static_dir = Path(__file__).parent / "static"
|
|
if static_dir.is_dir():
|
|
from fastapi.responses import FileResponse
|
|
|
|
app.mount("/assets", StaticFiles(directory=str(static_dir / "assets")), name="assets")
|
|
|
|
@app.get("/{path:path}")
|
|
async def spa_fallback(path: str):
|
|
file = static_dir / path
|
|
if file.is_file():
|
|
return FileResponse(file)
|
|
return FileResponse(static_dir / "index.html")
|