71 lines
1.6 KiB
Go
71 lines
1.6 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/lib/xlog"
|
|
"gorm.io/gorm"
|
|
"time"
|
|
)
|
|
|
|
type ProjectService struct {
|
|
repo repo.IProjectRepo
|
|
}
|
|
|
|
func NewProjectService(db *gorm.DB) *ProjectService {
|
|
return &ProjectService{repo: repo.NewProjectRepo(db)}
|
|
}
|
|
|
|
func (svc *ProjectService) List() ([]*entity.Project, error) {
|
|
return svc.repo.List()
|
|
}
|
|
|
|
func (svc *ProjectService) EnsureProjectsDBData() error {
|
|
_, err := svc.repo.EnsureProjectsDBData()
|
|
go svc.startProjectBackGroundWorker()
|
|
return err
|
|
}
|
|
|
|
func (svc *ProjectService) GetProjectInvokeApiAddr(projectId string, serverIds []int) ([]string, error) {
|
|
et, _, err := svc.repo.GetByProjectId(projectId)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return []string{et.ToPo().(*model.Project).ApiAddr}, nil
|
|
}
|
|
|
|
func (svc *ProjectService) startProjectBackGroundWorker() {
|
|
for {
|
|
allProjects, err := svc.repo.List()
|
|
if err != nil {
|
|
xlog.Warnf("list all projects error:%v", err)
|
|
time.Sleep(time.Second * 60)
|
|
continue
|
|
}
|
|
for _, p := range allProjects {
|
|
apiAddr := p.GetApiAddr()
|
|
if apiAddr == "" {
|
|
continue
|
|
}
|
|
|
|
po := p.ToPo().(*model.Project)
|
|
handler := projects.GetProjectValueChoicesGetHook(po.ProjectId)
|
|
if handler != nil {
|
|
itemsChoices, err := handler.GetItems(p)
|
|
if err != nil {
|
|
xlog.Warnf("get project %v items error:%v", po.ProjectId, err)
|
|
} else {
|
|
if len(itemsChoices) > 100 {
|
|
itemsChoices = itemsChoices[:100]
|
|
}
|
|
model.ProjectsAllItems[po.ProjectId] = itemsChoices
|
|
}
|
|
}
|
|
}
|
|
|
|
time.Sleep(time.Second * 60)
|
|
}
|
|
}
|