Files
verify/backend/internal/router/app/info.go
T

146 lines
4.0 KiB
Go

package app
import (
"verification-platform-backend/internal/database"
"verification-platform-backend/internal/model"
"verification-platform-backend/internal/service"
"verification-platform-backend/pkg/response"
"github.com/gin-gonic/gin"
)
func SetupInfoRoutes(r *gin.RouterGroup) {
r.GET("/info", handleAppGetInfo)
r.GET("/check-update", handleAppCheckUpdate)
r.GET("/announcements", handleAppGetAnnouncements)
}
func handleAppGetInfo(c *gin.Context) {
appKey := c.Param("appKey")
var app model.Application
if err := database.DB.Where("app_key = ?", appKey).First(&app).Error; err != nil {
response.Error(c, 404, "应用不存在")
return
}
if service.GetApplicationDisabledStatus(app.ID) {
response.Error(c, 403, "该应用已被禁用")
return
}
response.Success(c, gin.H{
"id": app.ID,
"name": app.Name,
"description": app.Description,
"icon_url": app.IconURL,
"status": app.Status,
"billing_type": app.BillingType,
"login_policy": app.LoginPolicy,
"max_devices": app.MaxDevices,
"multi_open_mode": app.MultiOpenMode,
"max_instances": app.MaxInstances,
"enable_trial": app.EnableTrial,
"trial_balance": app.TrialBalance,
"heartbeat_interval": app.HeartbeatInterval,
"heartbeat_timeout": app.HeartbeatTimeout,
})
}
func handleAppCheckUpdate(c *gin.Context) {
appKey := c.Param("appKey")
var app model.Application
if err := database.DB.Where("app_key = ?", appKey).First(&app).Error; err != nil {
response.Error(c, 404, "应用不存在")
return
}
if service.GetApplicationDisabledStatus(app.ID) {
response.Error(c, 403, "该应用已被禁用")
return
}
clientVersion := c.Query("version")
var latestVersion model.Version
err := database.DB.Where("application_id = ? AND status = ?", app.ID, "active").Order("created_at DESC").Preload("Files").First(&latestVersion).Error
if err != nil {
response.Success(c, gin.H{
"has_update": false,
"latest_version": "",
"download_url": "",
"update_notes": "",
"update_strategy": "",
"update_method": "",
"files": []interface{}{},
})
return
}
hasUpdate := clientVersion != latestVersion.Version
if latestVersion.UpdateStrategy == "forced" {
hasUpdate = true
}
files := make([]gin.H, len(latestVersion.Files))
for i, f := range latestVersion.Files {
files[i] = gin.H{
"file_path": f.FilePath,
"file_name": f.FileName,
"file_size": f.FileSize,
"file_hash": f.FileHash,
"file_type": f.FileType,
"is_required": f.IsRequired,
}
}
response.Success(c, gin.H{
"has_update": hasUpdate,
"latest_version": latestVersion.Version,
"download_url": latestVersion.FilePath,
"file_size": latestVersion.FileSize,
"file_hash": latestVersion.FileHash,
"entry_file": latestVersion.EntryFile,
"update_notes": latestVersion.Description,
"update_strategy": latestVersion.UpdateStrategy,
"update_type": latestVersion.UpdateType,
"update_method": latestVersion.UpdateMethod,
"changelog": latestVersion.Changelog,
"files": files,
})
}
func handleAppGetAnnouncements(c *gin.Context) {
appKey := c.Param("appKey")
var app model.Application
if err := database.DB.Where("app_key = ?", appKey).First(&app).Error; err != nil {
response.Error(c, 404, "应用不存在")
return
}
if service.GetApplicationDisabledStatus(app.ID) {
response.Error(c, 403, "该应用已被禁用")
return
}
var announcements []model.Announcement
if err := database.DB.Where("application_id = ? AND status = ?", app.ID, "active").Order("is_top DESC, created_at DESC").Find(&announcements).Error; err != nil {
response.Error(c, 500, "获取公告失败")
return
}
result := make([]gin.H, len(announcements))
for i, a := range announcements {
result[i] = gin.H{
"id": a.ID,
"title": a.Title,
"content": a.Content,
"type": a.Type,
"is_top": a.IsTop,
"created_at": a.CreatedAt,
}
}
response.Success(c, result)
}