uniugm/admin/apps/game/domain/project.go
2025-04-27 17:23:19 +08:00

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