from contextlib import asynccontextmanager from fastapi.middleware.cors import CORSMiddleware from fastapi import Depends, FastAPI from .db import User, create_db_and_tables from .schemas import UserCreate, UserRead, UserUpdate from .users import auth_backend, current_active_user, fastapi_users from .llm import llm_router @asynccontextmanager async def lifespan(app: FastAPI): # Not needed if you setup a migration system like Alembic await create_db_and_tables() yield #app = FastAPI(lifespan=lifespan) app = FastAPI( docs_url="/", title="OpenGenAI", description="Your Excellect AI Physician", lifespan=lifespan ) app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) app.include_router( fastapi_users.get_auth_router(auth_backend), prefix="/auth/jwt", tags=["auth"] ) app.include_router( llm_router, tags=["llm"] ) app.include_router( fastapi_users.get_register_router(UserRead, UserCreate), prefix="/auth", tags=["auth"], ) app.include_router( fastapi_users.get_reset_password_router(), prefix="/auth", tags=["auth"], ) app.include_router( fastapi_users.get_verify_router(UserRead), prefix="/auth", tags=["auth"], ) app.include_router( fastapi_users.get_users_router(UserRead, UserUpdate), prefix="/users", tags=["users"], ) @app.get("/authenticated-route") async def authenticated_route(user: User = Depends(current_active_user)): return {"message": f"Hello {user.email}!"}