Skip to content

Commit 1e80e3e

Browse files
ImTotemclaude
andcommitted
fix: add grade column to tables.py + middleware error alerting
1. tables.py: members table was missing grade column definition (migration 003 added it to DB but tables.py was not updated) 2. Slack alerts: Starlette ServerErrorMiddleware catches exceptions before FastAPI exception handlers. Add ErrorAlertMiddleware that logs to root logger (→ SlackHandler) before re-raising. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 3ca0727 commit 1e80e3e

2 files changed

Lines changed: 17 additions & 2 deletions

File tree

src/bcsd_api/exception/handlers.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,36 @@
22

33
from fastapi import FastAPI, Request
44
from fastapi.responses import JSONResponse
5+
from starlette.middleware.base import BaseHTTPMiddleware
56

67
from .base import AppException
78

8-
logger = logging.getLogger("bcsd_api.error")
9+
root_logger = logging.getLogger()
910

1011

1112
def register_handlers(app: FastAPI) -> None:
13+
app.add_middleware(ErrorAlertMiddleware)
14+
1215
@app.exception_handler(AppException)
1316
async def _handle(request: Request, exc: AppException) -> JSONResponse:
1417
body = {"error_code": exc.error_code, "message": exc.message}
1518
return JSONResponse(status_code=exc.status_code, content=body)
1619

1720
@app.exception_handler(Exception)
1821
async def _unhandled(request: Request, exc: Exception) -> JSONResponse:
19-
logging.getLogger().error(
22+
root_logger.error(
2023
"%s %s: %s", request.method, request.url.path, exc, exc_info=exc,
2124
)
2225
body = {"error_code": "INTERNAL_ERROR", "message": "internal server error"}
2326
return JSONResponse(status_code=500, content=body)
27+
28+
29+
class ErrorAlertMiddleware(BaseHTTPMiddleware):
30+
async def dispatch(self, request, call_next):
31+
try:
32+
return await call_next(request)
33+
except Exception as exc:
34+
root_logger.error(
35+
"%s %s: %s", request.method, request.url.path, exc, exc_info=exc,
36+
)
37+
raise

src/bcsd_api/tables.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
Column("role", String),
1818
Column("join_date", String),
1919
Column("payment_status", String, server_default="미납"),
20+
Column("grade", String),
2021
Column("last_updated", String),
2122
)
2223

0 commit comments

Comments
 (0)