import sys from contextlib import asynccontextmanager import uvicorn from fastapi import FastAPI from loguru import logger from app.api import router as api_router from app.database import check_database, engine, init_db_schema from app.dependencies import camera_session_manager logger.remove() logger.add( sys.stderr, format="{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {name}:{function} - {message}", ) @asynccontextmanager async def lifespan(app: FastAPI): await check_database() await init_db_schema() logger.info("Database connection verified and schema ensured") await camera_session_manager.start_archive_retry_loop() yield await camera_session_manager.shutdown() await engine.dispose() logger.info("Database engine disposed") def create_app() -> FastAPI: application = FastAPI( title="Operation Room Monitor", lifespan=lifespan, ) application.include_router(api_router) return application app = create_app() def main() -> None: uvicorn.run( "main:app", host="0.0.0.0", port=38080, reload=True, ) if __name__ == "__main__": main()