""" 漏洞数据模型 """ from sqlalchemy import Column, Integer, String, DateTime, Text, Boolean, ForeignKey, Enum, Float from sqlalchemy.sql import func from sqlalchemy.orm import relationship import enum from app.database import Base class SeverityLevel(enum.Enum): """严重程度枚举""" CRITICAL = "critical" HIGH = "high" MEDIUM = "medium" LOW = "low" INFO = "info" class VulnerabilityCategory(enum.Enum): """漏洞分类枚举""" SECURITY = "security" PERFORMANCE = "performance" MAINTAINABILITY = "maintainability" RELIABILITY = "reliability" USABILITY = "usability" class VulnerabilityStatus(enum.Enum): """漏洞状态枚举""" OPEN = "open" FIXED = "fixed" FALSE_POSITIVE = "false_positive" WONT_FIX = "wont_fix" class Vulnerability(Base): """漏洞模型""" __tablename__ = "vulnerabilities" id = Column(Integer, primary_key=True, index=True) scan_id = Column(Integer, ForeignKey("scans.id"), nullable=False) # 漏洞基本信息 rule_id = Column(String(100), nullable=False) # 规则ID message = Column(Text, nullable=False) # 漏洞描述 category = Column(Enum(VulnerabilityCategory), nullable=False) severity = Column(Enum(SeverityLevel), nullable=False) # 位置信息 file_path = Column(String(500), nullable=False) line_number = Column(Integer) column_number = Column(Integer) end_line = Column(Integer) end_column = Column(Integer) # 代码上下文 code_snippet = Column(Text) # 相关代码片段 context_before = Column(Text) # 前置代码上下文 context_after = Column(Text) # 后置代码上下文 # AI增强信息 ai_enhanced = Column(Boolean, default=False) ai_confidence = Column(Float) # AI置信度 0-1 ai_suggestion = Column(Text) # AI修复建议 # 状态管理 status = Column(Enum(VulnerabilityStatus), default=VulnerabilityStatus.OPEN) assigned_to = Column(String(100)) # 分配给谁 fix_commit = Column(String(100)) # 修复的提交哈希 # 时间戳 created_at = Column(DateTime(timezone=True), server_default=func.now()) updated_at = Column(DateTime(timezone=True), onupdate=func.now()) fixed_at = Column(DateTime(timezone=True)) # 关联关系 scan = relationship("Scan", back_populates="vulnerabilities") def __repr__(self): return f""