health-apps-backend/main.py

83 lines
2.3 KiB
Python

import dotenv
from fastapi import FastAPI, Security
from contextlib import asynccontextmanager
import logging
from fastapi.middleware.cors import CORSMiddleware
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
# db
from database import Base, engine
# routers
from apis import api_router
# middleware
from middleware.ErrorHandlerMiddleware import ErrorHandlerMiddleware, configure_exception_handlers
dotenv.load_dotenv()
# Configure logging
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
)
logger = logging.getLogger(__name__)
@asynccontextmanager
async def lifespan(app: FastAPI):
logger.info("Starting application")
try:
Base.metadata.create_all(bind=engine)
logger.info("Created database tables")
except Exception as e:
logger.error(f"Error creating database tables: {e}")
raise e
yield
logger.info("Stopping application")
# Define the security scheme
bearer_scheme = HTTPBearer(scheme_name="Bearer Authentication")
app = FastAPI(
lifespan=lifespan,
title="Twillio Voice API",
description="API for Twillio Voice application",
version="1.0.0",
# Define security scheme for Swagger UI
openapi_tags=[
{"name": "admin", "description": "Admin operations requiring authentication"},
{"name": "auth", "description": "Authentication operations"},
{"name": "clinics", "description": "Operations with clinics"},
{"name": "doctors", "description": "Operations with doctors"},
{"name": "calender", "description": "Calendar operations"},
{"name": "appointments", "description": "Operations with appointments"},
{"name": "patients", "description": "Operations with patients"}
],
swagger_ui_parameters={"defaultModelsExpandDepth": -1}
)
# CORS middleware
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # Allows all origins
allow_credentials=True,
allow_methods=["*"], # Allows all methods
allow_headers=["*"], # Allows all headers
)
# Error handler middleware
app.add_middleware(ErrorHandlerMiddleware)
# Configure exception handlers
configure_exception_handlers(app)
@app.get("/")
async def hello_world():
return {"Hello": "World"}
# Routes
app.include_router(api_router, prefix="/api")