125 lines
3.2 KiB
Go
125 lines
3.2 KiB
Go
package system
|
||
|
||
import (
|
||
"context"
|
||
"errors"
|
||
"strconv"
|
||
"time"
|
||
)
|
||
|
||
var (
|
||
ErrVersionNotFound = errors.New("版本不存在")
|
||
)
|
||
|
||
// SysVersion 版本管理实体
|
||
type SysVersion struct {
|
||
ID int64
|
||
VersionName string
|
||
VersionCode string
|
||
Description string
|
||
VersionData string
|
||
CreatedAt time.Time
|
||
UpdatedAt time.Time
|
||
}
|
||
|
||
// VersionSearchReq 版本搜索请求
|
||
type VersionSearchReq struct {
|
||
Page int
|
||
PageSize int
|
||
VersionName *string
|
||
VersionCode *string
|
||
CreatedAtRange []time.Time
|
||
}
|
||
|
||
// VersionRepo 版本仓储接口
|
||
type VersionRepo interface {
|
||
Create(ctx context.Context, version *SysVersion) error
|
||
Delete(ctx context.Context, id string) error
|
||
DeleteByIds(ctx context.Context, ids []string) error
|
||
GetById(ctx context.Context, id string) (*SysVersion, error)
|
||
GetList(ctx context.Context, req *VersionSearchReq) ([]*SysVersion, int64, error)
|
||
}
|
||
|
||
// VersionUsecase 版本用例
|
||
type VersionUsecase struct {
|
||
repo VersionRepo
|
||
menuRepo MenuRepo
|
||
apiRepo ApiRepo
|
||
dictRepo DictionaryRepo
|
||
}
|
||
|
||
// NewVersionUsecase 创建版本用例
|
||
func NewVersionUsecase(repo VersionRepo, menuRepo MenuRepo, apiRepo ApiRepo, dictRepo DictionaryRepo) *VersionUsecase {
|
||
return &VersionUsecase{
|
||
repo: repo,
|
||
menuRepo: menuRepo,
|
||
apiRepo: apiRepo,
|
||
dictRepo: dictRepo,
|
||
}
|
||
}
|
||
|
||
// CreateSysVersion 创建版本
|
||
func (uc *VersionUsecase) CreateSysVersion(ctx context.Context, version *SysVersion) error {
|
||
return uc.repo.Create(ctx, version)
|
||
}
|
||
|
||
// DeleteSysVersion 删除版本
|
||
func (uc *VersionUsecase) DeleteSysVersion(ctx context.Context, id string) error {
|
||
return uc.repo.Delete(ctx, id)
|
||
}
|
||
|
||
// DeleteSysVersionByIds 批量删除版本
|
||
func (uc *VersionUsecase) DeleteSysVersionByIds(ctx context.Context, ids []string) error {
|
||
return uc.repo.DeleteByIds(ctx, ids)
|
||
}
|
||
|
||
// GetSysVersion 根据ID获取版本
|
||
func (uc *VersionUsecase) GetSysVersion(ctx context.Context, id string) (*SysVersion, error) {
|
||
return uc.repo.GetById(ctx, id)
|
||
}
|
||
|
||
// GetSysVersionInfoList 分页获取版本列表
|
||
func (uc *VersionUsecase) GetSysVersionInfoList(ctx context.Context, req *VersionSearchReq) ([]*SysVersion, int64, error) {
|
||
return uc.repo.GetList(ctx, req)
|
||
}
|
||
|
||
// GetMenusByIds 根据ID列表获取菜单数据
|
||
func (uc *VersionUsecase) GetMenusByIds(ctx context.Context, ids []uint) ([]*Menu, error) {
|
||
// 转换为string类型
|
||
strIds := make([]string, len(ids))
|
||
for i, id := range ids {
|
||
strIds[i] = strconv.FormatUint(uint64(id), 10)
|
||
}
|
||
baseMenus, err := uc.menuRepo.FindBaseMenusByIds(ctx, strIds)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
// 转换为Menu类型
|
||
menus := make([]*Menu, len(baseMenus))
|
||
for i, bm := range baseMenus {
|
||
menus[i] = &Menu{
|
||
BaseMenu: *bm,
|
||
MenuId: bm.ID,
|
||
}
|
||
}
|
||
return menus, nil
|
||
}
|
||
|
||
// GetApisByIds 根据ID列表获取API数据
|
||
func (uc *VersionUsecase) GetApisByIds(ctx context.Context, ids []uint) ([]*Api, error) {
|
||
return uc.apiRepo.FindByIds(ctx, ids)
|
||
}
|
||
|
||
// GetDictionariesByIds 根据ID列表获取字典数据(简化实现)
|
||
func (uc *VersionUsecase) GetDictionariesByIds(ctx context.Context, ids []uint) ([]*Dictionary, error) {
|
||
var result []*Dictionary
|
||
for _, id := range ids {
|
||
dict, err := uc.dictRepo.FindByID(ctx, id)
|
||
if err != nil {
|
||
continue
|
||
}
|
||
result = append(result, dict)
|
||
}
|
||
return result, nil
|
||
}
|