import dotenv from fastapi import FastAPI from contextlib import asynccontextmanager import logging from fastapi.middleware.cors import CORSMiddleware from fastapi.security import HTTPBearer # db from database import Base, engine # routers from apis import api_router # middleware from middleware.ErrorHandlerMiddleware import ErrorHandlerMiddleware, configure_exception_handlers from middleware.CustomRequestTypeMiddleware import TextPlainMiddleware from services.emailService import EmailService 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", swagger_ui_parameters={"defaultModelsExpandDepth": -1} ) # CORS middleware app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_methods=["*"], allow_headers=["*"], expose_headers=["*"], ) # Custom request type middleware app.add_middleware(TextPlainMiddleware) # Error handler middleware app.add_middleware(ErrorHandlerMiddleware) # Configure exception handlers configure_exception_handlers(app) @app.get("/") async def hello_world(): # email_service = EmailService() # email_service.createTemplate() return {"Hello": "World"} # Routes app.include_router(api_router, prefix="/api")