from .routers import auth from .routers import users from .routers import admin from .routers import ai from .routers import generate from .routers import images from .routers import models from .db import close_db, get_conn, get_write_lock, init_db from .services.video_worker import run_worker import asyncio import os from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from dotenv import load_dotenv load_dotenv() @asynccontextmanager async def lifespan(app: FastAPI): init_db() worker_task = asyncio.create_task(run_worker(get_conn(), get_write_lock())) yield worker_task.cancel() try: await worker_task except asyncio.CancelledError: pass close_db() app = FastAPI( title="All You Can GET AI Biz API", description="Multi-modal AI generation API powered by openrouter.ai", version="0.1.0", lifespan=lifespan, ) app.add_middleware( CORSMiddleware, allow_origins=[os.getenv("CORS_ORIGINS", "http://localhost:12016")], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) app.include_router(auth.router) app.include_router(users.router) app.include_router(admin.router) app.include_router(ai.router) app.include_router(generate.router) app.include_router(images.router) app.include_router(models.router) @app.get("/health", tags=["health"]) async def health() -> dict: return {"status": "ok"}