diff --git a/backend/internal/router/app/info.go b/backend/internal/router/app/info.go index 10f5d01..1002f17 100644 --- a/backend/internal/router/app/info.go +++ b/backend/internal/router/app/info.go @@ -216,18 +216,57 @@ func handleAppCheckUpdate(c *gin.Context) { } } - // 确定下载地址:优先使用完整包地址,其次自定义地址 - downloadURL := latestVersion.FilePath - downloadSize := latestVersion.FileSize - downloadHash := latestVersion.FileHash + // 确定下载地址 + var downloadURL string + var downloadSize int64 + var downloadHash string + var fullPackageURL string + var fullPackageSize int64 + var fullPackageHash string + var isPatchUpdate bool - // 使用完整包地址(如果有) - if latestVersion.FullPackagePath != "" { - downloadURL = latestVersion.FullPackagePath - downloadSize = latestVersion.FullPackageSize - downloadHash = latestVersion.FullPackageHash + if latestVersion.UpdateType == "patch" && latestVersion.BaseVersionID != nil { + // 最新版本是补丁类型 + // 检查客户端版本是否是基础版本 + if clientVersionRecord.ID == *latestVersion.BaseVersionID { + // 客户端是基础版本,可以下载补丁包 + downloadURL = latestVersion.FilePath + downloadSize = latestVersion.FileSize + downloadHash = latestVersion.FileHash + isPatchUpdate = true + } else { + // 客户端不是基础版本,需要下载完整包 + if latestVersion.FullPackagePath != "" { + downloadURL = latestVersion.FullPackagePath + downloadSize = latestVersion.FullPackageSize + downloadHash = latestVersion.FullPackageHash + } else { + // 没有完整包,使用补丁包(可能合并失败) + downloadURL = latestVersion.FilePath + downloadSize = latestVersion.FileSize + downloadHash = latestVersion.FileHash + } + } + // 保存完整包地址作为备选 + if latestVersion.FullPackagePath != "" { + fullPackageURL = latestVersion.FullPackagePath + fullPackageSize = latestVersion.FullPackageSize + fullPackageHash = latestVersion.FullPackageHash + } + } else { + // 全量版本,直接使用文件路径 + downloadURL = latestVersion.FilePath + downloadSize = latestVersion.FileSize + downloadHash = latestVersion.FileHash + // 全量版本的完整包就是自己 + if latestVersion.FullPackagePath != "" { + fullPackageURL = latestVersion.FullPackagePath + fullPackageSize = latestVersion.FullPackageSize + fullPackageHash = latestVersion.FullPackageHash + } } - // 自定义地址优先级最高 + + // 自定义地址优先级最高(覆盖下载地址) if latestVersion.CustomDownloadURL != "" { downloadURL = latestVersion.CustomDownloadURL } @@ -249,22 +288,19 @@ func handleAppCheckUpdate(c *gin.Context) { "files": files, } - // 检查是否有适合客户端版本的增量更新 - // 查找以客户端版本为基础版本的 patch 更新 - var patchVersion model.Version - err := database.DB.Where("application_id = ? AND update_type = ? AND base_version_id = ? AND publish_status = ?", - app.ID, "patch", clientVersionRecord.ID, "published"). - Order("id DESC"). - Preload("Files"). - First(&patchVersion).Error - - if err == nil { - // 找到了增量更新 + // 如果是补丁更新,添加补丁信息 + if isPatchUpdate { result["is_patch"] = true - result["base_version"] = clientVersion - result["patch_url"] = patchVersion.FilePath - result["patch_size"] = patchVersion.FileSize - result["patch_hash"] = patchVersion.FileHash + result["patch_url"] = downloadURL + result["patch_size"] = downloadSize + result["patch_hash"] = downloadHash + } + + // 如果有完整包,添加完整包信息作为备选 + if fullPackageURL != "" { + result["full_package_url"] = fullPackageURL + result["full_package_size"] = fullPackageSize + result["full_package_hash"] = fullPackageHash } response.Success(c, result)