refactor(db)!: finalize pooled WNDB v2 migration
This commit is contained in:
@@ -8,6 +8,8 @@ from fastapi.exceptions import RequestValidationError
|
||||
from fastapi.responses import JSONResponse
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
from app.native.wndb.core.database import MaterializedViewRefreshAfterCommitError
|
||||
|
||||
|
||||
class ProblemDetails(BaseModel):
|
||||
"""RFC 9457 compatible error response used by the REST contract."""
|
||||
@@ -53,6 +55,24 @@ def _problem_response(
|
||||
|
||||
|
||||
def install_problem_details_handlers(app: FastAPI) -> None:
|
||||
@app.exception_handler(MaterializedViewRefreshAfterCommitError)
|
||||
async def materialized_view_refresh_error_handler(
|
||||
request: Request,
|
||||
exc: MaterializedViewRefreshAfterCommitError,
|
||||
) -> JSONResponse:
|
||||
response = _problem_response(
|
||||
request,
|
||||
status_code=503,
|
||||
title="Materialized view refresh failed",
|
||||
detail=(
|
||||
f"Project {exc.project!r} changes were committed, but GIS query "
|
||||
"views could not be refreshed. Do not repeat the write blindly."
|
||||
),
|
||||
code="materialized_view_refresh_failed_after_commit",
|
||||
)
|
||||
response.headers["X-TJWater-Changes-Committed"] = "true"
|
||||
return response
|
||||
|
||||
@app.exception_handler(RequestValidationError)
|
||||
async def validation_error_handler(
|
||||
request: Request,
|
||||
|
||||
Reference in New Issue
Block a user