Clarify settings and app wiring

This commit is contained in:
2025-11-27 14:32:00 +01:00
parent 3a7208d28d
commit 6b73ae043d
2 changed files with 48 additions and 19 deletions

View File

@@ -1,19 +1,28 @@
"""Application entrypoint and router wiring."""
"""
API Application Entrypoint and Router Wiring.
This module initializes the core FastAPI application instance, loads
configuration, applies middleware, and wires up all defined API routers.
"""
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from typing import List
from api.v1.router import router as api_v1_router
from operations.health.router import router as health_router
from core.config import get_settings, Settings # Import Settings type for clarity
from core.config import get_settings
def create_app(settings: Settings = get_settings()) -> FastAPI:
"""
Create and configure the FastAPI application instance.
def create_app() -> FastAPI:
"""Create and configure the FastAPI application."""
settings = get_settings()
Args:
settings: Configuration object from core.config. Defaults to current settings.
Returns:
A configured FastAPI application instance.
"""
app = FastAPI(
title=settings.title,
description=settings.description,
@@ -23,19 +32,25 @@ def create_app() -> FastAPI:
openapi_url="/openapi.json",
)
# CORS for local dev (frontend on 3000). Tighten/override in prod.
# Define allowed origins dynamically based on local dev environment needs
# In a production setting, this list would typically be sourced from environment variables.
allowed_origins: List[str] = ["http://localhost:3000", "http://127.0.0.1:3000"]
# Configure CORS middleware
# TODO: Tightly restrict origins in production deployment.
app.add_middleware(
CORSMiddleware,
allow_origins=["http://localhost:3000", "http://127.0.0.1:3000"],
allow_origins=allowed_origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Include API routers
app.include_router(health_router)
app.include_router(api_v1_router, prefix="/api/v1")
return app
# Main entry point for services like Uvicorn (e.g., `uvicorn main:app --reload`)
app = create_app()