from __future__ import annotations import uvicorn from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from mousehold_agent.server import create_router as create_agent_router from .config import get_settings from .db import init_db from .routers import ( accounts, auth, backup, connections, events, households, observations, projects, reconciliation, recurring, settlement, taxonomy, ) def create_app() -> FastAPI: settings = get_settings() app = FastAPI(title=settings.app_name, version="0.1.0") app.add_middleware( CORSMiddleware, allow_origins=settings.cors_origins, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) @app.on_event("startup") def startup() -> None: init_db() @app.get("/health") def health() -> dict[str, str]: return {"status": "ok"} app.include_router(households.router, prefix=settings.api_prefix) app.include_router(auth.router, prefix=settings.api_prefix) app.include_router(backup.router, prefix=settings.api_prefix) app.include_router(accounts.router, prefix=settings.api_prefix) app.include_router(observations.router, prefix=settings.api_prefix) app.include_router(events.router, prefix=settings.api_prefix) app.include_router(settlement.router, prefix=settings.api_prefix) app.include_router(reconciliation.router, prefix=settings.api_prefix) app.include_router(projects.router, prefix=settings.api_prefix) app.include_router(recurring.router, prefix=settings.api_prefix) app.include_router(taxonomy.router, prefix=settings.api_prefix) app.include_router(connections.router, prefix=settings.api_prefix) app.include_router(create_agent_router(), prefix=f"{settings.api_prefix.rstrip('/')}/agent") return app app = create_app() def run() -> None: uvicorn.run("mousehold_api.main:app", host="127.0.0.1", port=8000, reload=True)