File size: 2,073 Bytes
2299bb4 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | """
Main FastAPI application entry point.
"""
from fastapi import FastAPI, WebSocket
from fastapi.middleware.cors import CORSMiddleware
from contextlib import asynccontextmanager
from .config import settings
from .routes import auth_router, user_router, chat_router, group_router, system_router
from .sockets.ws import websocket_endpoint
@asynccontextmanager
async def lifespan(app: FastAPI):
"""Application lifespan - startup and shutdown."""
# Startup
print(f"Starting {settings.APP_NAME} v{settings.APP_VERSION}")
# TODO: Start worker and scheduler
# from .system import worker, batch_scheduler
# await worker.start()
# await batch_scheduler.start()
yield
# Shutdown
print("Shutting down...")
# await worker.stop()
# await batch_scheduler.stop()
# Create FastAPI app
app = FastAPI(
title=settings.APP_NAME,
version=settings.APP_VERSION,
description="Chat application with async message processing",
lifespan=lifespan
)
# CORS middleware
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # Configure appropriately for production
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Include routers
app.include_router(auth_router, prefix="/api")
app.include_router(user_router, prefix="/api")
app.include_router(chat_router, prefix="/api")
app.include_router(group_router, prefix="/api")
app.include_router(system_router, prefix="/api")
# WebSocket endpoint
@app.websocket("/ws/{user_id}")
async def websocket_route(websocket: WebSocket, user_id: str):
"""WebSocket endpoint for real-time notifications."""
await websocket_endpoint(websocket, user_id)
# Root endpoint
@app.get("/")
async def root():
"""Root endpoint."""
return {
"name": settings.APP_NAME,
"version": settings.APP_VERSION,
"status": "running"
}
@app.get("/api/health")
async def health():
"""Health check endpoint."""
return {"status": "healthy"}
# Import all routes to ensure they're registered
__all__ = ["app"] |