fix: 删除版本时恢复被取代的旧版本, 回滚时处理取代版本已删除的情况
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user