uniugm/admin/apps/game/domain/project.go
2025-05-15 17:30:33 +08:00

114 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/apps/game/model/dto"
"admin/internal/errcode"
"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 {
return nil, errcode.New(errcode.ServerError, "not found project %v items handler", projectEt.Po.ProjectType)
}
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
}