27 lines
771 B
Python
27 lines
771 B
Python
# dao/exceptions.py
|
||
# 数据访问层异常:不依赖 FastAPI,由 main.py 统一注册处理器映射成 HTTP 状态码
|
||
#
|
||
# 这样 api 层就不需要 try/except,也不需要 import HTTPException,
|
||
# 只负责「调用 dao + 组装响应」两件事。
|
||
|
||
|
||
class DaoError(Exception):
|
||
"""DAO 层异常基类:携带 HTTP 状态码与前端可读的提示信息"""
|
||
|
||
status_code = 500
|
||
|
||
def __init__(self, detail: str):
|
||
self.detail = detail
|
||
super().__init__(detail)
|
||
|
||
|
||
class NotFoundError(DaoError):
|
||
"""目标记录不存在、已删除,或外键指向的记录不存在 → 404"""
|
||
|
||
status_code = 404
|
||
|
||
|
||
class ConflictError(DaoError):
|
||
"""主键重复、唯一字段冲突、一对一关系重复 → 409"""
|
||
|
||
status_code = 409 |