| import logging |
| from contextlib import asynccontextmanager |
| from fastapi import FastAPI |
| from fastapi.middleware.cors import CORSMiddleware |
| from app.auth.routes import router as auth_router |
| from app.rag.routes import router as rag_router |
| from app.logging_config import setup_logging |
| from app.rabbitmq.connection import rabbitmq |
| from app.rabbitmq.consumers import start_consumers |
|
|
| setup_logging() |
| logger = logging.getLogger(__name__) |
|
|
|
|
| @asynccontextmanager |
| async def lifespan(app: FastAPI): |
| |
| logger.info("Connecting to RabbitMQ...") |
| await rabbitmq.connect() |
| await start_consumers() |
| yield |
| |
| logger.info("Disconnecting from RabbitMQ...") |
| await rabbitmq.disconnect() |
|
|
|
|
| app = FastAPI( |
| title="EchoLoft AI API", |
| description="SaaS RAG Chat with Groq + RabbitMQ event streaming", |
| version="1.2.0", |
| lifespan=lifespan, |
| ) |
|
|
| app.add_middleware( |
| CORSMiddleware, |
| allow_origins=[ |
| "http://localhost:3000", |
| "https://echoloftai.vercel.app", |
| ], |
| allow_credentials=True, |
| allow_methods=["*"], |
| allow_headers=["*"], |
| ) |
|
|
| app.include_router(auth_router) |
| app.include_router(rag_router, prefix="/rag") |
|
|
|
|
| @app.get("/") |
| async def root(): |
| return { |
| "message": "Welcome to EchoLoft AI API", |
| "version": "1.2.0", |
| "rabbitmq": "connected" if rabbitmq.is_connected else "disconnected", |
| } |
|
|
|
|
| @app.get("/health") |
| async def health(): |
| return { |
| "status": "ok", |
| "rabbitmq": "connected" if rabbitmq.is_connected else "disconnected", |
| } |