116 lines
2.9 KiB
Go
116 lines
2.9 KiB
Go
package domain
|
|
|
|
import (
|
|
"admin/apps/game/domain/entity"
|
|
"admin/apps/game/domain/projects"
|
|
"admin/apps/game/domain/repo"
|
|
"admin/apps/game/model"
|
|
"admin/internal/errcode"
|
|
"admin/internal/model/dto"
|
|
"admin/lib/xlog"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type ProjectService struct {
|
|
repo repo.IProjectRepo
|
|
}
|
|
|
|
func NewProjectService(db *gorm.DB) *ProjectService {
|
|
repo.ServerRepoInstance = repo.NewServerRepo(db)
|
|
return &ProjectService{repo: repo.NewProjectRepo(db)}
|
|
}
|
|
|
|
func (svc *ProjectService) List() ([]*dto.CommonDtoFieldDesc, []dto.CommonDtoValues, []*entity.Project, error) {
|
|
fields, rows, err := svc.repo.List()
|
|
if err != nil {
|
|
return nil, nil, nil, err
|
|
}
|
|
commonList := make([]dto.CommonDtoValues, 0, len(rows))
|
|
for _, v := range rows {
|
|
commonList = append(commonList, v.ToCommonResource().ToCommonDto())
|
|
}
|
|
return fields, commonList, rows, nil
|
|
}
|
|
|
|
func (svc *ProjectService) GetById(id int) ([]*dto.CommonDtoFieldDesc, dto.CommonDtoValues, *entity.CommonResource, bool, error) {
|
|
fields, et, find, err := svc.repo.GetById(id)
|
|
if err != nil {
|
|
return nil, nil, nil, false, err
|
|
}
|
|
cr := et.ToCommonResource()
|
|
return fields, cr.ToCommonDto(), cr, find, nil
|
|
}
|
|
|
|
func (svc *ProjectService) Create(dtoObj dto.CommonDtoValues) (dto.CommonDtoValues, error) {
|
|
et, err := svc.repo.Create(dtoObj)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return et.ToCommonResource().ToCommonDto(), nil
|
|
}
|
|
|
|
func (svc *ProjectService) Edit(dtoObj dto.CommonDtoValues) error {
|
|
err := svc.repo.Edit(dtoObj)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (svc *ProjectService) Delete(id int) error {
|
|
_, find, err := svc.repo.Delete(id)
|
|
if find {
|
|
|
|
}
|
|
return err
|
|
}
|
|
|
|
func (svc *ProjectService) GetProjectInvokeApiAddr(projectId int, serverIds []int) ([]string, error) {
|
|
_, et, _, err := svc.repo.GetById(projectId)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return []string{et.Po.ApiAddr}, nil
|
|
}
|
|
|
|
func (svc *ProjectService) GetAllItems(projectId int) ([]*dto.CommonDtoFieldChoice, error) {
|
|
_, projectEt, find, err := svc.repo.GetById(projectId)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if !find {
|
|
return nil, errcode.New(errcode.ServerError, "not found project %v db data", projectId)
|
|
}
|
|
|
|
handler := projects.GetProjectValueChoicesGetHook(projectEt.Po.ProjectType)
|
|
if handler == nil {
|
|
xlog.Warnf("project %+v not found choices hook", projectEt.Po)
|
|
return make([]*dto.CommonDtoFieldChoice, 0), nil
|
|
}
|
|
|
|
return handler.GetItems(projectEt)
|
|
}
|
|
|
|
func (svc *ProjectService) GetAllItemBag(projectId int) ([]*dto.ItemBagInfo, error) {
|
|
dbList, err := new(model.ItemBag).List(projectId)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
retList := make([]*dto.ItemBagInfo, 0, len(dbList))
|
|
for _, v := range dbList {
|
|
info := &dto.ItemBagInfo{
|
|
Name: v.Name,
|
|
}
|
|
for _, item := range v.Attach {
|
|
info.Items = append(info.Items, &dto.ItemInfo{
|
|
ItemID: int(item.ID),
|
|
ItemNum: item.Num,
|
|
ItemType: item.ItemType,
|
|
Desc: item.Desc,
|
|
})
|
|
}
|
|
retList = append(retList, info)
|
|
}
|
|
return retList, nil
|
|
}
|