CodeReview/backend/app/schemas/audit_rule.py

130 lines
4.3 KiB
Python
Raw Normal View History

"""
审计规则 Schema
"""
from typing import Optional, Dict, Any, List
from pydantic import BaseModel, Field
from datetime import datetime
# ==================== 审计规则 ====================
class AuditRuleBase(BaseModel):
"""审计规则基础Schema"""
rule_code: str = Field(..., min_length=1, max_length=50, description="规则标识")
name: str = Field(..., min_length=1, max_length=200, description="规则名称")
description: Optional[str] = Field(None, description="规则描述")
category: str = Field(..., description="规则类别: security/bug/performance/style/maintainability")
severity: str = Field("medium", description="严重程度: critical/high/medium/low")
custom_prompt: Optional[str] = Field(None, description="自定义检测提示词")
fix_suggestion: Optional[str] = Field(None, description="修复建议模板")
reference_url: Optional[str] = Field(None, max_length=500, description="参考链接")
enabled: bool = Field(True, description="是否启用")
sort_order: int = Field(0, description="排序权重")
class AuditRuleCreate(AuditRuleBase):
"""创建审计规则"""
pass
class AuditRuleUpdate(BaseModel):
"""更新审计规则"""
rule_code: Optional[str] = Field(None, min_length=1, max_length=50)
name: Optional[str] = Field(None, min_length=1, max_length=200)
description: Optional[str] = None
category: Optional[str] = None
severity: Optional[str] = None
custom_prompt: Optional[str] = None
fix_suggestion: Optional[str] = None
reference_url: Optional[str] = None
enabled: Optional[bool] = None
sort_order: Optional[int] = None
class AuditRuleResponse(AuditRuleBase):
"""审计规则响应"""
id: str
rule_set_id: str
created_at: Optional[datetime] = None
updated_at: Optional[datetime] = None
class Config:
from_attributes = True
# ==================== 审计规则集 ====================
class AuditRuleSetBase(BaseModel):
"""审计规则集基础Schema"""
name: str = Field(..., min_length=1, max_length=100, description="规则集名称")
description: Optional[str] = Field(None, description="规则集描述")
language: str = Field("all", description="适用语言")
rule_type: str = Field("custom", description="规则集类型: security/quality/performance/custom")
severity_weights: Optional[Dict[str, int]] = Field(
default_factory=lambda: {"critical": 10, "high": 5, "medium": 2, "low": 1},
description="严重程度权重"
)
is_active: bool = Field(True, description="是否启用")
sort_order: int = Field(0, description="排序权重")
class AuditRuleSetCreate(AuditRuleSetBase):
"""创建审计规则集"""
rules: Optional[List[AuditRuleCreate]] = Field(default_factory=list, description="规则列表")
class AuditRuleSetUpdate(BaseModel):
"""更新审计规则集"""
name: Optional[str] = Field(None, min_length=1, max_length=100)
description: Optional[str] = None
language: Optional[str] = None
rule_type: Optional[str] = None
severity_weights: Optional[Dict[str, int]] = None
is_default: Optional[bool] = None
is_active: Optional[bool] = None
sort_order: Optional[int] = None
class AuditRuleSetResponse(AuditRuleSetBase):
"""审计规则集响应"""
id: str
is_default: bool = False
is_system: bool = False
created_by: Optional[str] = None
created_at: Optional[datetime] = None
updated_at: Optional[datetime] = None
rules: List[AuditRuleResponse] = Field(default_factory=list)
rules_count: int = 0
enabled_rules_count: int = 0
class Config:
from_attributes = True
class AuditRuleSetListResponse(BaseModel):
"""审计规则集列表响应"""
items: List[AuditRuleSetResponse]
total: int
class AuditRuleSetExport(BaseModel):
"""规则集导出格式"""
name: str
description: Optional[str]
language: str
rule_type: str
severity_weights: Dict[str, int]
rules: List[AuditRuleBase]
export_version: str = "1.0"
class AuditRuleSetImport(BaseModel):
"""规则集导入格式"""
name: str
description: Optional[str] = None
language: str = "all"
rule_type: str = "custom"
severity_weights: Optional[Dict[str, int]] = None
rules: List[AuditRuleCreate]