from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from app.auth import ensure_default_admin from app.database import Base, engine, SessionLocal from app.routes.auth import router as auth_router from app.routers.inventory import router as inventory_router from app.routers.relations import router as relations_router from app.routers.discoveries import router as discoveries_router from app.routers.jobs import router as jobs_router from app.routers.objects import router as objects_router from app.routers.health import router as health_router @asynccontextmanager async def lifespan(app: FastAPI): # Create all tables Base.metadata.create_all(bind=engine) # Seed default users if DB is empty db = SessionLocal() try: ensure_default_admin(db) finally: db.close() yield app = FastAPI(title="NetMapper API", version="0.1.0", lifespan=lifespan) app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) app.include_router(auth_router) app.include_router(health_router) app.include_router(inventory_router) app.include_router(relations_router) app.include_router(discoveries_router) app.include_router(jobs_router) app.include_router(objects_router) @app.get("/health") async def health(): return {"status": "ok"}