"""Denya OneCare — FastAPI application entry point.""" from __future__ import annotations import logging from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from sqlalchemy import text from sqlalchemy.ext.asyncio import AsyncSession from app.core.config import settings from app.core.database import Base, async_session_factory, engine from app.routers import auth, health, whatsapp from app.services.seed import seed_units, seed_users logger = logging.getLogger(__name__) @asynccontextmanager async def lifespan(app: FastAPI): """Initialise database and seed data on startup.""" logger.info("Starting Denya OneCare …") async with engine.begin() as conn: await conn.run_sync(Base.metadata.create_all) async with async_session_factory() as session: await seed_users(session) await session.commit() await seed_units(session, json_path=str(settings.BASE_DIR / "apartment_mapping.json")) await session.commit() yield await engine.dispose() logger.info("Denya OneCare stopped.") app = FastAPI( title=settings.APP_NAME, version="0.1.0", lifespan=lifespan, ) # ── CORS ───────────────────────────────────────────────────────────── app.add_middleware( CORSMiddleware, allow_origins=settings.CORS_ORIGINS.split(",") if settings.CORS_ORIGINS != "*" else ["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # ── Routers ────────────────────────────────────────────────────────── app.include_router(health.router) app.include_router(auth.router) app.include_router(whatsapp.router)