refactor: P4a 服务层改造地基(BizError + base_repository + base_service)
- src/core/exceptions.py:BizError/NotFoundError/PermissionDeniedError - 全局异常处理器接入 BizError → R.failed(含事务回滚语义) - src/common/base_repository.py:泛型 CRUD 仓储基类 - src/common/base_service.py:服务基类(入参数据/出参数据范式) 【验收】BizError 端到端转换为 R.failed(code=403/ok=false);应用启动 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude
parent
d33dc1fc34
commit
a6e094378c
@@ -22,6 +22,7 @@ from flask import request
|
||||
from werkzeug.exceptions import HTTPException
|
||||
|
||||
from utils import R
|
||||
from src.core.exceptions import BizError
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -66,6 +67,17 @@ def register_error_handlers(app):
|
||||
msg = f"服务器内部错误: {str(e)}" if app.debug else "服务器内部错误"
|
||||
return R.failed(msg=msg, code=500), 500
|
||||
|
||||
@app.errorhandler(BizError)
|
||||
def handle_biz_error(e):
|
||||
"""
|
||||
业务异常处理器
|
||||
|
||||
业务代码 raise BizError(...) 时统一转换为 R.failed 响应,
|
||||
并回滚当前事务(teardown_request 处理)。
|
||||
"""
|
||||
logger.info(f"业务异常: {e.msg} (code={e.code})")
|
||||
return R.failed(msg=e.msg, code=e.code, data=e.data, **e.kwargs)
|
||||
|
||||
@app.errorhandler(Exception)
|
||||
def handle_exception(e):
|
||||
# HTTPException 子类(如 abort(403))已有专用 handler,不重复处理
|
||||
|
||||
Reference in New Issue
Block a user