diff --git a/internal/database/vulnerability.go b/internal/database/vulnerability.go index de67dbeb..77766207 100644 --- a/internal/database/vulnerability.go +++ b/internal/database/vulnerability.go @@ -265,10 +265,22 @@ func (db *DB) UpdateVulnerability(id string, vuln *Vulnerability) error { // DeleteVulnerability 删除漏洞 func (db *DB) DeleteVulnerability(id string) error { - _, err := db.Exec("DELETE FROM vulnerabilities WHERE id = ?", id) + tx, err := db.Begin() if err != nil { + return fmt.Errorf("开启事务失败: %w", err) + } + defer func() { _ = tx.Rollback() }() + + // 删除漏洞前先解除项目事实中的关联,避免前端继续显示已删除漏洞的短 ID。 + if _, err := tx.Exec("UPDATE project_facts SET related_vulnerability_id = NULL WHERE related_vulnerability_id = ?", id); err != nil { + return fmt.Errorf("清理事实漏洞关联失败: %w", err) + } + if _, err := tx.Exec("DELETE FROM vulnerabilities WHERE id = ?", id); err != nil { return fmt.Errorf("删除漏洞失败: %w", err) } + if err := tx.Commit(); err != nil { + return fmt.Errorf("提交事务失败: %w", err) + } return nil }