mirror of
https://github.com/Cccc-owo/CheckInApp.git
synced 2026-06-17 14:06:28 +00:00
feat: improve error handling and code quality
后端改进: - 添加统一异常处理系统 (exceptions.py, response.py) - 实现自定义异常类 (ValidationError, AuthorizationError, ResourceNotFoundError, BusinessLogicError) - 配置全局异常处理器,统一 API 错误响应格式 - 迁移业务逻辑错误到自定义异常 (users.py, auth.py) - 添加 SQL LIKE 通配符转义,防止通配符滥用 - 使用 EmailStr 进行邮箱格式验证 - 移除敏感字段暴露 (jwt_sub) 前端改进: - 配置 ESLint 9 (flat config) 和 Prettier - 修复所有 ESLint 错误和警告 - 移除未使用的变量和导入 - 为组件添加 PropTypes 默认值 - 统一代码格式和风格
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
"""
|
||||
自定义异常类
|
||||
|
||||
提供统一的异常处理机制,避免直接抛出通用Exception
|
||||
"""
|
||||
|
||||
|
||||
class BaseAPIException(Exception):
|
||||
"""API 异常基类"""
|
||||
|
||||
def __init__(self, message: str, status_code: int = 500, error_code: str = None):
|
||||
self.message = message
|
||||
self.status_code = status_code
|
||||
self.error_code = error_code or self.__class__.__name__
|
||||
super().__init__(self.message)
|
||||
|
||||
|
||||
class ValidationError(BaseAPIException):
|
||||
"""验证错误 - 400"""
|
||||
|
||||
def __init__(self, message: str, error_code: str = "VALIDATION_ERROR"):
|
||||
super().__init__(message, status_code=400, error_code=error_code)
|
||||
|
||||
|
||||
class AuthenticationError(BaseAPIException):
|
||||
"""认证错误 - 401"""
|
||||
|
||||
def __init__(self, message: str = "未授权", error_code: str = "AUTHENTICATION_ERROR"):
|
||||
super().__init__(message, status_code=401, error_code=error_code)
|
||||
|
||||
|
||||
class AuthorizationError(BaseAPIException):
|
||||
"""授权错误 - 403"""
|
||||
|
||||
def __init__(self, message: str = "无权限访问", error_code: str = "AUTHORIZATION_ERROR"):
|
||||
super().__init__(message, status_code=403, error_code=error_code)
|
||||
|
||||
|
||||
class ResourceNotFoundError(BaseAPIException):
|
||||
"""资源未找到 - 404"""
|
||||
|
||||
def __init__(self, message: str = "资源未找到", error_code: str = "NOT_FOUND"):
|
||||
super().__init__(message, status_code=404, error_code=error_code)
|
||||
|
||||
|
||||
class ResourceConflictError(BaseAPIException):
|
||||
"""资源冲突 - 409"""
|
||||
|
||||
def __init__(self, message: str = "资源冲突", error_code: str = "CONFLICT"):
|
||||
super().__init__(message, status_code=409, error_code=error_code)
|
||||
|
||||
|
||||
class BusinessLogicError(BaseAPIException):
|
||||
"""业务逻辑错误 - 默认422,但可自定义状态码(如429)"""
|
||||
|
||||
def __init__(self, message: str, error_code: str = "BUSINESS_ERROR", status_code: int = 422):
|
||||
super().__init__(message, status_code=status_code, error_code=error_code)
|
||||
|
||||
|
||||
class InternalServerError(BaseAPIException):
|
||||
"""服务器内部错误 - 500"""
|
||||
|
||||
def __init__(self, message: str = "服务器内部错误", error_code: str = "INTERNAL_ERROR"):
|
||||
super().__init__(message, status_code=500, error_code=error_code)
|
||||
Reference in New Issue
Block a user