from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware # 1. Konfiguráció importálása from app.core.config import settings # 2. Adatbázis importok (JAVÍTVA) # A 'Base' tartalmazza a modellek definícióit (app/db/base.py) from app.db.base import Base # Az 'engine' kezeli a kapcsolatot (app/db/session.py) from app.db.session import engine # 3. Router importálása from app.api.v1.router import api_router # --- Lifespan (Életciklus) Kezelő --- # Ez fut le az alkalmazás indulásakor és leállásakor @asynccontextmanager async def lifespan(app: FastAPI): # INDÍTÁS (Startup): Táblák létrehozása fejlesztői módban async with engine.begin() as conn: # Fontos: Importálnunk kell a modelleket, hogy a Base tudjon róluk, # mielőtt létrehozzuk a táblákat! # Ha vannak új modelljeid (pl. logistics, user), írd hozzá őket ide: from app.models import social, vehicle, user, logistics print("--- Adatbázis táblák ellenőrzése és létrehozása ---") await conn.run_sync(Base.metadata.create_all) yield # Itt fut az alkalmazás... # LEÁLLÁS (Shutdown): Erőforrások elengedése print("--- Traffic Ecosystem SuperApp leállítása ---") await engine.dispose() # --- Alkalmazás Inicializálása --- app = FastAPI( title=settings.PROJECT_NAME, version=settings.VERSION, openapi_url=f"{settings.API_V1_STR}/openapi.json", lifespan=lifespan ) # --- Middleware (CORS) --- # Engedélyezzük, hogy a frontend kommunikálhasson az API-val app.add_middleware( CORSMiddleware, allow_origins=["*"], # FIGYELEM: Élesben ezt szigorítani kell (pl. a frontend domainjére)! allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # --- Routerek csatolása --- app.include_router(api_router, prefix=settings.API_V1_STR) # --- Gyökér végpont --- @app.get("/") async def root(): return { "message": "Traffic Ecosystem SuperApp API fut", "version": settings.VERSION, "docs_url": "/docs" # Segítség a fejlesztőknek }