import time from fastapi import FastAPI from sqlalchemy import text from app.routes import router as api_router from app.utils.create_tables import init_db from app.utils.db import engine from app.utils.logger_cfg import logger app_start_time = time.perf_counter() logger.debug("App start timestamp recorded") app = FastAPI() logger.info("FastAPI application instance created") logger.debug("FastAPI instance created successfully") app.include_router(api_router, prefix="/api") logger.info("API router registered with prefix /api") logger.debug("Router object: %s", api_router) @app.on_event("startup") async def startup(): logger.info("Application startup initiated") logger.debug("Starting database connection attempt") try: async with engine.begin() as conn: logger.debug("Executing test query: SELECT 1") result = await conn.execute(text("SELECT 1")) db_status = result.scalar() logger.info(f"Database connection successful: {db_status}") logger.debug("Database test query executed successfully") logger.debug("Starting database table initialization") await init_db() logger.info("Database initialization completed") logger.debug("Database tables initialized successfully") except Exception as e: logger.exception(f"Database startup failed: {e}") elapsed = time.perf_counter() - app_start_time logger.success( f"Application startup completed in {elapsed*1000:.2f} ms ({elapsed:.6f} s)" ) logger.debug("Startup complete timestamp recorded") @app.on_event("shutdown") async def shutdown(): logger.info("Application shutdown initiated") logger.debug("Starting engine disposal") try: await engine.dispose() logger.info("Database engine disposed successfully") logger.debug("Engine disposal finished") except Exception as e: logger.exception(f"Error during shutdown: {e}") @app.get("/") async def read_root(): logger.info("Root endpoint accessed") logger.debug("Processing root endpoint request") return {"message": "Hello new asyncpg ci!"}