fix: check-update只从已发布版本中选取最新版本, 用所有版本匹配客户端版本号
This commit is contained in:
@@ -62,18 +62,29 @@ func handleAppCheckUpdate(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 查询该应用的所有版本(包括已失效的),按ID降序(创建顺序)
|
||||
var allVersions []model.Version
|
||||
if err := database.DB.Where("application_id = ?", app.ID).
|
||||
// 查询该应用的所有已发布版本,按ID降序(用于获取最新版本和下载地址)
|
||||
var publishedVersions []model.Version
|
||||
if err := database.DB.Where("application_id = ? AND publish_status = ?", app.ID, "published").
|
||||
Order("id DESC").
|
||||
Preload("Files").
|
||||
Find(&allVersions).Error; err != nil {
|
||||
Find(&publishedVersions).Error; err != nil {
|
||||
response.Error(c, 500, "获取版本列表失败")
|
||||
return
|
||||
}
|
||||
|
||||
// 没有任何版本
|
||||
if len(allVersions) == 0 {
|
||||
// 同时查询所有版本(包括已失效的),用于匹配客户端版本号
|
||||
var allVersions []model.Version
|
||||
if clientVersion != "" {
|
||||
if err := database.DB.Where("application_id = ?", app.ID).
|
||||
Order("id DESC").
|
||||
Find(&allVersions).Error; err != nil {
|
||||
response.Error(c, 500, "获取版本列表失败")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// 没有任何已发布版本
|
||||
if len(publishedVersions) == 0 {
|
||||
response.Success(c, gin.H{
|
||||
"has_update": false,
|
||||
"current_version": clientVersion,
|
||||
@@ -95,9 +106,9 @@ func handleAppCheckUpdate(c *gin.Context) {
|
||||
return v
|
||||
}
|
||||
|
||||
// 如果没有传入版本号,直接返回最新版本(安装器模式,优先全量包)
|
||||
// 如果没有传入版本号,直接返回最新已发布版本(安装器模式,优先全量包)
|
||||
if clientVersion == "" {
|
||||
latestVersion := &allVersions[0]
|
||||
latestVersion := &publishedVersions[0]
|
||||
|
||||
// 确定下载地址:无版本号时 download_url 优先指向全量包
|
||||
downloadURL := latestVersion.FullPackagePath
|
||||
@@ -165,10 +176,10 @@ func handleAppCheckUpdate(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 判断客户端版本状态:检查是否有更高ID的强制更新版本
|
||||
// 判断客户端版本状态:检查是否有更高ID的强制更新版本(只看已发布版本)
|
||||
isSuperseded := false
|
||||
for i := range allVersions {
|
||||
v := &allVersions[i]
|
||||
for i := range publishedVersions {
|
||||
v := &publishedVersions[i]
|
||||
// 存在ID更高(创建时间更晚)的强制更新版本
|
||||
if v.ID > clientVersionRecord.ID && v.UpdateStrategy == "forced" {
|
||||
isSuperseded = true
|
||||
@@ -183,8 +194,8 @@ func handleAppCheckUpdate(c *gin.Context) {
|
||||
|
||||
if isSuperseded {
|
||||
// 找到ID最高的强制更新版本
|
||||
for i := range allVersions {
|
||||
v := &allVersions[i]
|
||||
for i := range publishedVersions {
|
||||
v := &publishedVersions[i]
|
||||
if v.ID > clientVersionRecord.ID && v.UpdateStrategy == "forced" {
|
||||
if latestVersion == nil || v.ID > latestVersion.ID {
|
||||
latestVersion = v
|
||||
@@ -194,8 +205,8 @@ func handleAppCheckUpdate(c *gin.Context) {
|
||||
updateStrategy = "forced"
|
||||
} else {
|
||||
// 没有强制更新,检查是否有更高ID的版本(普通更新)
|
||||
// 最新版本就是ID最高的版本(已经是按ID降序排列,第一个就是最新)
|
||||
latestVersion = &allVersions[0]
|
||||
// 最新已发布版本就是ID最高的版本(已经是按ID降序排列,第一个就是最新)
|
||||
latestVersion = &publishedVersions[0]
|
||||
|
||||
// 只有当最新版本ID大于客户端版本ID时才需要更新
|
||||
if latestVersion.ID > clientVersionRecord.ID {
|
||||
|
||||
Reference in New Issue
Block a user