fix: 删除版本时恢复被取代的旧版本, 回滚时处理取代版本已删除的情况

This commit is contained in:
Trae AI
2026-06-21 17:27:53 +08:00
parent f1f7181a77
commit d1251a9356
+38
View File
@@ -800,6 +800,15 @@ func handleBatchDeleteVersions(c *gin.Context) {
return
}
// 恢复被删除版本取代的旧版本为 published
database.DB.Model(&model.Version{}).
Where("superseded_by IN ?", req.IDs).
Updates(map[string]interface{}{
"publish_status": "published",
"superseded_by": nil,
"deprecated_at": nil,
})
response.Success(c, nil)
}
@@ -1152,6 +1161,35 @@ func handleRollbackVersion(c *gin.Context) {
return
}
// 检查取代它的版本是否还存在,如果不存在则直接恢复
if version.SupersededBy != nil {
var superseder model.Version
if err := database.DB.First(&superseder, *version.SupersededBy).Error; err != nil {
// 取代版本已被删除,直接恢复为 published
version.PublishStatus = "published"
version.SupersededBy = nil
version.DeprecatedAt = nil
database.DB.Save(&version)
userIDPtr := &userID
versionIDPtr := &version.ID
service.CreateLog(service.LogParams{
UserID: userIDPtr,
LogType: "version",
Action: "rollback",
Resource: "version",
ResourceID: versionIDPtr,
Details: fmt.Sprintf("回滚版本(取代版本已删除): %s (应用ID: %d)", version.Version, version.ApplicationID),
})
response.Success(c, gin.H{
"id": version.ID,
"publish_status": version.PublishStatus,
})
return
}
}
now := time.Now()
version.PublishStatus = "published"
version.SupersededBy = nil