instances.go 3.5 KB
Newer Older
aaronchen2k2k's avatar
aaronchen2k2k 已提交
1 2 3 4 5
package serverService

import (
	"github.com/easysoft/zendata/src/model"
	"github.com/easysoft/zendata/src/server/repo"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
6
	constant "github.com/easysoft/zendata/src/utils/const"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
7
	fileUtils "github.com/easysoft/zendata/src/utils/file"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
8
	stringUtils "github.com/easysoft/zendata/src/utils/string"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
9
	"github.com/jinzhu/gorm"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
10 11
	"gopkg.in/yaml.v3"
	"io/ioutil"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
12 13 14 15
)

type InstancesService struct {
	instancesRepo *serverRepo.InstancesRepo
aaronchen2k2k's avatar
aaronchen2k2k 已提交
16
	referRepo  *serverRepo.ReferRepo
aaronchen2k2k's avatar
aaronchen2k2k 已提交
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
	resService *ResService
}

func (s *InstancesService) List() (list []*model.ZdInstances) {
	instances := s.resService.LoadRes("instances")
	list, _ = s.instancesRepo.List()

	s.saveResToDB(instances, list)
	list, _ = s.instancesRepo.List()

	return
}

func (s *InstancesService) Get(id int) (instances model.ZdInstances) {
	instances, _ = s.instancesRepo.Get(uint(id))

	return
}

func (s *InstancesService) Save(instances *model.ZdInstances) (err error) {
	err = s.instancesRepo.Save(instances)

	return
}

func (s *InstancesService) Remove(id int) (err error) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
43 44 45
	var old model.ZdInstances
	old, err = s.instancesRepo.Get(uint(id))
	if err == gorm.ErrRecordNotFound {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
46 47
		return
	}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
48
	fileUtils.RemoveExist(old.Path)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
49

aaronchen2k2k's avatar
aaronchen2k2k 已提交
50
	err = s.instancesRepo.Remove(uint(id))
aaronchen2k2k's avatar
aaronchen2k2k 已提交
51 52 53
	return
}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
54 55
func (s *InstancesService) GetItemTree(instancesId int) (root model.ZdInstancesItem) {
	root = s.instancesRepo.GetItemTree(instancesId)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
56 57 58 59 60 61 62 63
	return
}
func (s *InstancesService) GetItem(id int) (item model.ZdInstancesItem) {
	item, _ = s.instancesRepo.GetItem(uint(id))
	return
}

func (s *InstancesService) CreateItem(domainId, targetId int, mode string) (item *model.ZdInstancesItem, err error) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
64
	item = &model.ZdInstancesItem{Field: "instances_", Note: "", InstancesID: uint(domainId)}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
65 66 67
	item.Ord = s.instancesRepo.GetMaxOrder(domainId)

	err = s.instancesRepo.SaveItem(item)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
68
	s.referRepo.CreateDefault(item.ID, constant.ResTypeInstances)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
69 70 71 72 73 74 75 76 77 78 79 80 81

	return
}
func (s *InstancesService) SaveItem(item *model.ZdInstancesItem) (err error) {
	err = s.instancesRepo.SaveItem(item)
	return
}

func (s *InstancesService) RemoveItem(id int) (err error) {
	err = s.instancesRepo.RemoveItem(uint(id))
	return
}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
82 83 84 85 86 87
func (s *InstancesService) saveResToDB(instances []model.ResFile, list []*model.ZdInstances) (err error) {
	names := make([]string, 0)
	for _, item := range list {
		names = append(names, item.Path)
	}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
88 89
	for _, inst := range instances {
		if !stringUtils.FindInArrBool(inst.Path, names) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
90
			//if strings.Contains(inst.Path, "_test") {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
91 92 93 94 95 96 97 98
				content, _ := ioutil.ReadFile(inst.Path)
				yamlContent := stringUtils.ReplaceSpecialChars(content)
				instPo := model.ZdInstances{}
				err = yaml.Unmarshal(yamlContent, &instPo)
				instPo.Title = inst.Title
				instPo.Name = inst.Name
				instPo.Desc = inst.Desc
				instPo.Path = inst.Path
aaronchen2k2k's avatar
aaronchen2k2k 已提交
99
				instPo.Yaml = string(content)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
100 101 102

				s.instancesRepo.Save(&instPo)

aaronchen2k2k's avatar
aaronchen2k2k 已提交
103 104
				for i, item := range instPo.Instances {
					item.Ord = i + 1
aaronchen2k2k's avatar
aaronchen2k2k 已提交
105 106 107
					s.saveItemToDB(&item, 0, instPo.ID)
				}
			//}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
108 109 110 111 112
		}
	}

	return
}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
113
func (s *InstancesService) saveItemToDB(item *model.ZdInstancesItem, parentID, instancesID uint) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
114 115 116 117
	if item.Instance != "" { // instance node
		item.Field = item.Instance
	}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
118 119 120 121
	item.InstancesID = instancesID
	item.ParentID = parentID
	s.instancesRepo.SaveItem(item)

aaronchen2k2k's avatar
aaronchen2k2k 已提交
122 123
	for i, child := range item.Fields {
		child.Ord = i + 1
aaronchen2k2k's avatar
aaronchen2k2k 已提交
124 125 126
		s.saveItemToDB(child, item.ID, instancesID)
	}
}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
127

aaronchen2k2k's avatar
aaronchen2k2k 已提交
128 129
func NewInstancesService(instancesRepo *serverRepo.InstancesRepo, referRepo *serverRepo.ReferRepo) *InstancesService {
	return &InstancesService{instancesRepo: instancesRepo, referRepo: referRepo}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
130
}