import asyncio from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from app.api.v1.router import api_router from app.config import settings from app.db import init_db, run_migrations from app.seed import seed_db from app.services.exchange_rate import refresh_rates_periodically @asynccontextmanager async def lifespan(app: FastAPI): init_db() run_migrations() seed_db() rate_refresh_task = asyncio.create_task(refresh_rates_periodically()) try: yield finally: rate_refresh_task.cancel() try: await rate_refresh_task except asyncio.CancelledError: pass app = FastAPI(title="WealthySmart API", version="0.1.0", lifespan=lifespan) app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) app.include_router(api_router) @app.get("/") def root(): return {"app": "WealthySmart", "version": "0.1.0"}