import asyncio from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from config import settings from shared.firebase import init_firebase, firebase_initialized from auth.router import router as auth_router from melodies.router import router as melodies_router from devices.router import router as devices_router from settings.router import router as settings_router from users.router import router as users_router from mqtt.router import router as mqtt_router from mqtt.client import mqtt_manager from mqtt import database as mqtt_db app = FastAPI( title="BellSystems Admin Panel", version="0.1.0", docs_url="/api/docs", openapi_url="/api/openapi.json", ) app.add_middleware( CORSMiddleware, allow_origins=settings.cors_origins, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) app.include_router(auth_router) app.include_router(melodies_router) app.include_router(devices_router) app.include_router(settings_router) app.include_router(users_router) app.include_router(mqtt_router) @app.on_event("startup") async def startup(): init_firebase() await mqtt_db.init_db() mqtt_manager.start(asyncio.get_event_loop()) asyncio.create_task(mqtt_db.purge_loop()) @app.on_event("shutdown") async def shutdown(): mqtt_manager.stop() await mqtt_db.close_db() @app.get("/api/health") async def health_check(): return { "status": "ok", "firebase": firebase_initialized, "mqtt": mqtt_manager.connected, }