Spaces:
Sleeping
Sleeping
| """FastAPI application entry point.""" | |
| from pathlib import Path | |
| from fastapi import FastAPI | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from fastapi.staticfiles import StaticFiles | |
| from fastapi.responses import FileResponse | |
| import uvicorn | |
| from .api.routes import router | |
| # Create FastAPI app | |
| app = FastAPI( | |
| title="Package Delivery Search API", | |
| description="Search algorithms for package delivery optimization", | |
| version="1.0.0", | |
| ) | |
| # Configure CORS | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], | |
| allow_credentials=True, | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| ) | |
| # Include API routes | |
| app.include_router(router) | |
| # Serve static frontend files | |
| static_dir = Path("/app/frontend/dist") | |
| if static_dir.exists(): | |
| # Mount assets directory | |
| app.mount( | |
| "/assets", StaticFiles(directory=str(static_dir / "assets")), name="assets" | |
| ) | |
| # Serve index.html for root and all non-API routes | |
| async def serve_root(): | |
| return FileResponse(str(static_dir / "index.html")) | |
| async def serve_frontend(full_path: str): | |
| # Don't intercept API routes | |
| if full_path.startswith("api/"): | |
| return {"error": "API endpoint not found"} | |
| # Try to serve the requested file | |
| file_path = static_dir / full_path | |
| if file_path.is_file(): | |
| return FileResponse(str(file_path)) | |
| # Otherwise serve index.html (SPA routing) | |
| return FileResponse(str(static_dir / "index.html")) | |
| else: | |
| async def root(): | |
| """Root endpoint.""" | |
| return { | |
| "name": "Package Delivery Search API", | |
| "version": "1.0.0", | |
| "endpoints": { | |
| "health": "/api/health", | |
| "algorithms": "/api/algorithms", | |
| "generate": "/api/grid/generate", | |
| "path": "/api/search/path", | |
| "plan": "/api/search/plan", | |
| "compare": "/api/search/compare", | |
| }, | |
| } | |
| if __name__ == "__main__": | |
| uvicorn.run(app, host="0.0.0.0", port=8000) | |