第一次提交
This commit is contained in:
86
backend/app/core/exceptions.py
Normal file
86
backend/app/core/exceptions.py
Normal file
@@ -0,0 +1,86 @@
|
||||
"""
|
||||
自定义异常类
|
||||
"""
|
||||
from fastapi import HTTPException, status
|
||||
|
||||
|
||||
class BaseAPIException(HTTPException):
|
||||
"""基础API异常"""
|
||||
def __init__(self, status_code: int, detail: str, error_code: str = None):
|
||||
super().__init__(status_code=status_code, detail=detail)
|
||||
self.error_code = error_code
|
||||
|
||||
|
||||
class ValidationError(BaseAPIException):
|
||||
"""验证错误"""
|
||||
def __init__(self, detail: str):
|
||||
super().__init__(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
detail=detail,
|
||||
error_code="VALIDATION_ERROR"
|
||||
)
|
||||
|
||||
|
||||
class NotFoundError(BaseAPIException):
|
||||
"""资源未找到错误"""
|
||||
def __init__(self, resource: str, resource_id: str = None):
|
||||
detail = f"{resource}不存在"
|
||||
if resource_id:
|
||||
detail += f": {resource_id}"
|
||||
super().__init__(
|
||||
status_code=status.HTTP_404_NOT_FOUND,
|
||||
detail=detail,
|
||||
error_code="NOT_FOUND"
|
||||
)
|
||||
|
||||
|
||||
class UnauthorizedError(BaseAPIException):
|
||||
"""未授权错误"""
|
||||
def __init__(self, detail: str = "未授权访问"):
|
||||
super().__init__(
|
||||
status_code=status.HTTP_401_UNAUTHORIZED,
|
||||
detail=detail,
|
||||
error_code="UNAUTHORIZED"
|
||||
)
|
||||
|
||||
|
||||
class ForbiddenError(BaseAPIException):
|
||||
"""禁止访问错误"""
|
||||
def __init__(self, detail: str = "无权访问此资源"):
|
||||
super().__init__(
|
||||
status_code=status.HTTP_403_FORBIDDEN,
|
||||
detail=detail,
|
||||
error_code="FORBIDDEN"
|
||||
)
|
||||
|
||||
|
||||
class ConflictError(BaseAPIException):
|
||||
"""资源冲突错误"""
|
||||
def __init__(self, detail: str):
|
||||
super().__init__(
|
||||
status_code=status.HTTP_409_CONFLICT,
|
||||
detail=detail,
|
||||
error_code="CONFLICT"
|
||||
)
|
||||
|
||||
|
||||
class InternalServerError(BaseAPIException):
|
||||
"""内部服务器错误"""
|
||||
def __init__(self, detail: str = "服务器内部错误"):
|
||||
super().__init__(
|
||||
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
detail=detail,
|
||||
error_code="INTERNAL_ERROR"
|
||||
)
|
||||
|
||||
|
||||
class WorkflowExecutionError(BaseAPIException):
|
||||
"""工作流执行错误"""
|
||||
def __init__(self, detail: str, node_id: str = None):
|
||||
if node_id:
|
||||
detail = f"节点 {node_id} 执行失败: {detail}"
|
||||
super().__init__(
|
||||
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
detail=detail,
|
||||
error_code="WORKFLOW_EXECUTION_ERROR"
|
||||
)
|
||||
Reference in New Issue
Block a user