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" "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 }