package application import ( "context" "encoding/json" "github.com/perfect-panel/server/internal/model/client" "github.com/perfect-panel/server/internal/svc" "github.com/perfect-panel/server/internal/types" "github.com/perfect-panel/server/pkg/logger" "github.com/perfect-panel/server/pkg/xerr" "github.com/pkg/errors" ) type GetAppVersionListLogic struct { logger.Logger ctx context.Context svcCtx *svc.ServiceContext } func NewGetAppVersionListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetAppVersionListLogic { return &GetAppVersionListLogic{ Logger: logger.WithContext(ctx), ctx: ctx, svcCtx: svcCtx, } } func (l *GetAppVersionListLogic) GetAppVersionList(req *types.GetAppVersionListRequest) (resp *types.GetAppVersionListResponse, err error) { var versions []*client.ApplicationVersion var total int64 db := l.svcCtx.DB.Model(&client.ApplicationVersion{}) if req.Platform != "" { db = db.Where("platform = ?", req.Platform) } err = db.Count(&total).Error if err != nil { return nil, errors.Wrapf(xerr.NewErrCode(xerr.DatabaseQueryError), "get version list count error: %v", err) } offset := (req.Page - 1) * req.Size if offset < 0 { offset = 0 } err = db.Offset(offset).Limit(req.Size).Order("id desc").Find(&versions).Error if err != nil { return nil, errors.Wrapf(xerr.NewErrCode(xerr.DatabaseQueryError), "get version list error: %v", err) } var list []*types.ApplicationVersion for _, v := range versions { desc := make(map[string]string) _ = json.Unmarshal(v.Description, &desc) list = append(list, &types.ApplicationVersion{ Id: v.Id, Platform: v.Platform, Version: v.Version, MinVersion: v.MinVersion, ForceUpdate: v.ForceUpdate, Description: desc, Url: v.Url, IsDefault: v.IsDefault, IsInReview: v.IsInReview, CreatedAt: v.CreatedAt.Unix(), }) } return &types.GetAppVersionListResponse{ Total: total, List: list, }, nil }