35 lines
1,014 B
Python
35 lines
1,014 B
Python
from contextlib import asynccontextmanager
|
|
from pathlib import Path
|
|
from fastapi import FastAPI
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
from fastapi.staticfiles import StaticFiles
|
|
|
|
from server.routes import hexagons, pois
|
|
|
|
|
|
@asynccontextmanager
|
|
async def lifespan(app: FastAPI):
|
|
# Startup: preload all parquet files
|
|
hexagons.preload_dataframes()
|
|
pois.preload_pois()
|
|
yield
|
|
# Shutdown: nothing to clean up
|
|
|
|
|
|
app = FastAPI(title="Property Map API", lifespan=lifespan)
|
|
|
|
app.add_middleware(
|
|
CORSMiddleware,
|
|
allow_origins=["*"],
|
|
allow_credentials=False, # Cannot use True with wildcard origins
|
|
allow_methods=["*"],
|
|
allow_headers=["*"],
|
|
)
|
|
|
|
app.include_router(hexagons.router, prefix="/api")
|
|
app.include_router(pois.router, prefix="/api")
|
|
|
|
# Mount static files for production (frontend build)
|
|
frontend_dist = Path(__file__).parent.parent / "frontend" / "dist"
|
|
if frontend_dist.exists():
|
|
app.mount("/", StaticFiles(directory=frontend_dist, html=True), name="static")
|