from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from .config import get_settings from .database import Base, SessionLocal, engine from .routers import ( auth, groups, locations, products, settings as settings_router, stock, users, views, ) from .seed import ensure_first_admin settings = get_settings() @asynccontextmanager async def lifespan(app: FastAPI): # Tabellen anlegen (MVP: create_all statt Alembic-Migrationen). Base.metadata.create_all(bind=engine) db = SessionLocal() try: ensure_first_admin(db) finally: db.close() yield app = FastAPI(title="Pantry – Lebensmittel-Lagerverwaltung", version="1.0.0", lifespan=lifespan) origins = ["*"] if settings.cors_origins.strip() == "*" else [ o.strip() for o in settings.cors_origins.split(",") if o.strip() ] app.add_middleware( CORSMiddleware, allow_origins=origins, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) @app.get("/health", tags=["meta"]) def health() -> dict: return {"status": "ok"} app.include_router(auth.router) app.include_router(users.router) app.include_router(products.router) app.include_router(stock.router) app.include_router(locations.router) app.include_router(groups.router) app.include_router(views.router) app.include_router(settings_router.router)