feat: 添加补丁版本基础版本选择功能
- 添加基础版本下拉选择器,仅在补丁更新类型时显示 - 添加应用和更新类型的 watch 监听,自动获取全量版本列表 - 提交时传递 base_version_id 参数 - 添加调试日志便于排查问题 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -272,6 +272,7 @@ type CreateVersionRequest struct {
|
||||
CustomDownloadURL string `json:"custom_download_url"`
|
||||
Description string `json:"description"`
|
||||
Changelog string `json:"changelog"`
|
||||
BaseVersionID *uint `json:"base_version_id"`
|
||||
}
|
||||
|
||||
func handleCreateVersionGlobal(c *gin.Context) {
|
||||
@@ -360,36 +361,47 @@ func handleCreateVersionGlobal(c *gin.Context) {
|
||||
}
|
||||
} else if version.UpdateType == "patch" {
|
||||
// 补丁包:需要找到基础全量包并合并
|
||||
var lastFullVersion model.Version
|
||||
if err := database.DB.Where("application_id = ? AND update_type = ?", req.ApplicationID, "full").
|
||||
Order("id DESC").First(&lastFullVersion).Error; err == nil {
|
||||
version.BaseVersionID = &lastFullVersion.ID
|
||||
var baseVersion model.Version
|
||||
|
||||
// 获取基础版本的全量包路径,如果没有则使用 FilePath
|
||||
baseFullPackagePath := lastFullVersion.FullPackagePath
|
||||
if baseFullPackagePath == "" {
|
||||
baseFullPackagePath = lastFullVersion.FilePath
|
||||
}
|
||||
|
||||
// 合并生成新的全量包
|
||||
fullPkgPath, fullPkgSize, fullPkgHash, err := MergePatchWithFullPackage(
|
||||
baseFullPackagePath,
|
||||
req.FilePath,
|
||||
req.ApplicationID,
|
||||
)
|
||||
if err != nil {
|
||||
log.Printf("[ERROR] Failed to merge patch with full package: %v\n", err)
|
||||
response.Error(c, 500, "合并补丁包失败: "+err.Error())
|
||||
// 优先使用传入的 base_version_id
|
||||
if req.BaseVersionID != nil {
|
||||
if err := database.DB.Where("id = ? AND application_id = ? AND update_type = ?",
|
||||
*req.BaseVersionID, req.ApplicationID, "full").First(&baseVersion).Error; err != nil {
|
||||
response.Error(c, 400, "指定的基础版本不存在或不是全量版本")
|
||||
return
|
||||
}
|
||||
|
||||
version.FullPackagePath = fullPkgPath
|
||||
version.FullPackageSize = fullPkgSize
|
||||
version.FullPackageHash = fullPkgHash
|
||||
} else {
|
||||
response.Error(c, 400, "找不到基础全量包,无法创建补丁版本")
|
||||
// 未指定基础版本,使用最新的全量版本
|
||||
if err := database.DB.Where("application_id = ? AND update_type = ?", req.ApplicationID, "full").
|
||||
Order("id DESC").First(&baseVersion).Error; err != nil {
|
||||
response.Error(c, 400, "找不到基础全量包,无法创建补丁版本")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
version.BaseVersionID = &baseVersion.ID
|
||||
|
||||
// 获取基础版本的全量包路径,如果没有则使用 FilePath
|
||||
baseFullPackagePath := baseVersion.FullPackagePath
|
||||
if baseFullPackagePath == "" {
|
||||
baseFullPackagePath = baseVersion.FilePath
|
||||
}
|
||||
|
||||
// 合并生成新的全量包
|
||||
fullPkgPath, fullPkgSize, fullPkgHash, err := MergePatchWithFullPackage(
|
||||
baseFullPackagePath,
|
||||
req.FilePath,
|
||||
req.ApplicationID,
|
||||
)
|
||||
if err != nil {
|
||||
log.Printf("[ERROR] Failed to merge patch with full package: %v\n", err)
|
||||
response.Error(c, 500, "合并补丁包失败: "+err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
version.FullPackagePath = fullPkgPath
|
||||
version.FullPackageSize = fullPkgSize
|
||||
version.FullPackageHash = fullPkgHash
|
||||
}
|
||||
|
||||
if err := database.DB.Create(&version).Error; err != nil {
|
||||
@@ -425,6 +437,7 @@ type UpdateVersionRequest struct {
|
||||
CustomDownloadURL string `json:"custom_download_url"`
|
||||
Description string `json:"description"`
|
||||
Changelog string `json:"changelog"`
|
||||
BaseVersionID *uint `json:"base_version_id"`
|
||||
}
|
||||
|
||||
func handleUpdateVersionGlobal(c *gin.Context) {
|
||||
|
||||
Reference in New Issue
Block a user