- Removed legacy Alembic migration files and consolidated schema management into a new Pydantic-backed initializer (`scripts/init_db.py`). - Updated `main.py` to ensure the new DB initializer runs on startup, maintaining idempotency. - Adjusted session management in `config/database.py` to prevent DetachedInstanceError. - Introduced new enums in `models/enums.py` for better organization and clarity. - Refactored various models to utilize the new enums, improving code maintainability. - Enhanced middleware to handle JSON validation more robustly, ensuring non-JSON requests do not trigger JSON errors. - Added tests for middleware and enums to ensure expected behavior and consistency. - Updated changelog to reflect significant changes and improvements.
24 lines
838 B
Python
24 lines
838 B
Python
from typing import Awaitable, Callable
|
|
|
|
from fastapi import HTTPException, Request, Response
|
|
|
|
MiddlewareCallNext = Callable[[Request], Awaitable[Response]]
|
|
|
|
|
|
async def validate_json(
|
|
request: Request, call_next: MiddlewareCallNext
|
|
) -> Response:
|
|
# Only validate JSON for requests with a body
|
|
if request.method in ("POST", "PUT", "PATCH"):
|
|
# Only attempt JSON parsing when the client indicates a JSON content type.
|
|
content_type = (request.headers.get("content-type") or "").lower()
|
|
if "json" in content_type:
|
|
try:
|
|
# attempt to parse json body
|
|
await request.json()
|
|
except Exception:
|
|
raise HTTPException(
|
|
status_code=400, detail="Invalid JSON payload")
|
|
response = await call_next(request)
|
|
return response
|