"""FORGE AI - Main FastAPI Application""" from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from fastapi.staticfiles import StaticFiles from contextlib import asynccontextmanager import os from app.config import settings from app.api.v1 import router as api_router @asynccontextmanager async def lifespan(app: FastAPI): """Startup and shutdown events""" # Startup print(f"🚀 Starting {settings.app_name} v{settings.app_version}") # Ensure storage directories exist storage_dirs = ["images", "videos", "audio", "documents", "temp"] for dir_name in storage_dirs: os.makedirs(os.path.join(settings.storage_path, dir_name), exist_ok=True) yield # Shutdown print(f"👋 Shutting down {settings.app_name}") # Create FastAPI app app = FastAPI( title=settings.app_name, version=settings.app_version, description="Unified AI Creative Platform - Image, Video, Audio, and Text Processing", lifespan=lifespan ) # CORS middleware app.add_middleware( CORSMiddleware, allow_origins=[ "http://localhost:3020", "http://localhost:3000", "http://127.0.0.1:3020", "https://ai-sandbox.oliver.solutions", ], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Mount static files for storage access if os.path.exists(settings.storage_path): app.mount("/storage", StaticFiles(directory=settings.storage_path), name="storage") # Include API router app.include_router(api_router, prefix="/api/v1") @app.get("/") async def root(): """Root endpoint""" return { "name": settings.app_name, "version": settings.app_version, "status": "running", "docs": "/docs" } @app.get("/health") async def health_check(): """Health check endpoint""" return {"status": "healthy", "service": settings.app_name}