56 lines
1.5 KiB
Python
56 lines
1.5 KiB
Python
from contextlib import asynccontextmanager
|
|
from fastapi import FastAPI, Request
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
from fastapi.responses import JSONResponse
|
|
import structlog
|
|
|
|
from app.api import auth, health, vehicles, valuations
|
|
from app.core.database import engine
|
|
from app.core import database as db_module
|
|
|
|
logger = structlog.get_logger()
|
|
|
|
|
|
@asynccontextmanager
|
|
async def lifespan(app: FastAPI):
|
|
logger.info("Avvio GMG Smart Quote backend")
|
|
yield
|
|
await engine.dispose()
|
|
logger.info("Shutdown completo")
|
|
|
|
|
|
app = FastAPI(
|
|
title="GMG Smart Quote API",
|
|
version="1.0.0",
|
|
lifespan=lifespan,
|
|
)
|
|
|
|
app.add_middleware(
|
|
CORSMiddleware,
|
|
allow_origins=[
|
|
"http://localhost:3000",
|
|
"http://localhost:3001",
|
|
"http://localhost:5173",
|
|
"http://127.0.0.1:3000",
|
|
"http://127.0.0.1:3001",
|
|
],
|
|
allow_credentials=True,
|
|
allow_methods=["*"],
|
|
allow_headers=["*"],
|
|
)
|
|
|
|
|
|
@app.exception_handler(Exception)
|
|
async def global_exception_handler(request: Request, exc: Exception):
|
|
logger.error("Unhandled exception", path=request.url.path, error=str(exc))
|
|
return JSONResponse(
|
|
status_code=500,
|
|
content={"detail": "Errore interno del server"},
|
|
)
|
|
|
|
|
|
app.include_router(auth.router, prefix="/api/auth", tags=["auth"])
|
|
app.include_router(health.router, prefix="/api", tags=["health"])
|
|
app.include_router(vehicles.router, prefix="/api/vehicles", tags=["vehicles"])
|
|
app.include_router(valuations.router, prefix="/api/valuations", tags=["valuations"])
|