kra/internal/biz/system/version.go

125 lines
3.2 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}