uniugm/admin/apps/game/domain/project.go

71 lines
1.6 KiB
Go
Raw Normal View History

2025-04-18 17:17:23 +08:00
package domain
import (
2025-04-27 17:23:19 +08:00
"admin/apps/game/domain/entity"
2025-04-24 20:39:31 +08:00
"admin/apps/game/domain/projects"
2025-04-18 17:17:23 +08:00
"admin/apps/game/domain/repo"
2025-04-24 20:39:31 +08:00
"admin/apps/game/model"
"admin/lib/xlog"
2025-04-18 17:17:23 +08:00
"gorm.io/gorm"
2025-04-24 20:39:31 +08:00
"time"
2025-04-18 17:17:23 +08:00
)
2025-04-24 20:39:31 +08:00
type ProjectService struct {
repo repo.IProjectRepo
2025-04-18 17:17:23 +08:00
}
2025-04-24 20:39:31 +08:00
func NewProjectService(db *gorm.DB) *ProjectService {
return &ProjectService{repo: repo.NewProjectRepo(db)}
}
2025-04-27 17:23:19 +08:00
func (svc *ProjectService) List() ([]*entity.Project, error) {
return svc.repo.List()
}
2025-04-24 20:39:31 +08:00
func (svc *ProjectService) EnsureProjectsDBData() error {
_, err := svc.repo.EnsureProjectsDBData()
go svc.startProjectBackGroundWorker()
return err
2025-04-18 17:17:23 +08:00
}
2025-04-24 20:39:31 +08:00
func (svc *ProjectService) GetProjectInvokeApiAddr(projectId string, serverIds []int) ([]string, error) {
et, _, err := svc.repo.GetByProjectId(projectId)
2025-04-18 17:17:23 +08:00
if err != nil {
2025-04-24 20:39:31 +08:00
return nil, err
2025-04-18 17:17:23 +08:00
}
2025-04-24 20:39:31 +08:00
return []string{et.ToPo().(*model.Project).ApiAddr}, nil
2025-04-18 17:17:23 +08:00
}
2025-04-24 20:39:31 +08:00
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
}
2025-04-18 17:17:23 +08:00
2025-04-24 20:39:31 +08:00
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
}
}
}
2025-04-18 17:17:23 +08:00
2025-04-24 20:39:31 +08:00
time.Sleep(time.Second * 60)
}
2025-04-18 17:17:23 +08:00
}