instances.go 3.9 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 7
	serverUtils "github.com/easysoft/zendata/src/server/utils"
	"github.com/easysoft/zendata/src/service"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
8
	constant "github.com/easysoft/zendata/src/utils/const"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
9
	fileUtils "github.com/easysoft/zendata/src/utils/file"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
10
	stringUtils "github.com/easysoft/zendata/src/utils/string"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
11
	"github.com/easysoft/zendata/src/utils/vari"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
12
	"github.com/jinzhu/gorm"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
13 14
	"gopkg.in/yaml.v3"
	"io/ioutil"
15
	"strings"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
16 17 18 19
)

type InstancesService struct {
	instancesRepo *serverRepo.InstancesRepo
aaronchen2k2k's avatar
aaronchen2k2k 已提交
20
	referRepo  *serverRepo.ReferRepo
aaronchen2k2k's avatar
aaronchen2k2k 已提交
21 22 23
	resService *ResService
}

24 25
func (s *InstancesService) List(keywords string, page int) (list []*model.ZdInstances, total int) {
	list, total, _ = s.instancesRepo.List(strings.TrimSpace(keywords), page)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
26 27 28
	return
}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
29
func (s *InstancesService) Get(id int) (instances model.ZdInstances, dirTree model.Dir) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
30 31
	instances, _ = s.instancesRepo.Get(uint(id))

aaronchen2k2k's avatar
aaronchen2k2k 已提交
32 33 34
	dirTree = model.Dir{Name: fileUtils.AddSepIfNeeded(constant.ResDirYaml)}
	serverUtils.GetDirTree(&dirTree)

aaronchen2k2k's avatar
aaronchen2k2k 已提交
35 36 37 38
	return
}

func (s *InstancesService) Save(instances *model.ZdInstances) (err error) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
39 40 41 42 43 44 45 46 47 48 49 50 51 52
	instances.Folder = serverUtils.DealWithPathSepRight(instances.Folder)
	instances.Path = vari.WorkDir + instances.Folder + serverUtils.AddExt(instances.Title, ".yaml")
	instances.Name = service.PathToName(instances.Path, constant.ResDirYaml)

	if instances.ID == 0 {
		err = s.Create(instances)
	} else {
		err = s.Update(instances)
	}

	return
}
func (s *InstancesService) Create(instances *model.ZdInstances) (err error) {
	err = s.instancesRepo.Create(instances)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
53
	s.updateYaml(instances.ID)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
54 55 56 57 58 59 60 61 62 63 64 65 66

	return
}
func (s *InstancesService) Update(instances *model.ZdInstances) (err error) {
	var old model.ZdInstances
	old, err = s.instancesRepo.Get(instances.ID)
	if err == gorm.ErrRecordNotFound {
		return
	}
	if instances.Path != old.Path {
		fileUtils.RemoveExist(old.Path)
	}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
67
	s.updateYaml(instances.ID)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
68 69 70 71 72

	return
}

func (s *InstancesService) Remove(id int) (err error) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
73 74 75
	var old model.ZdInstances
	old, err = s.instancesRepo.Get(uint(id))
	if err == gorm.ErrRecordNotFound {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
76 77 78
		return
	}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
79
	fileUtils.RemoveExist(old.Path)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
80
	err = s.instancesRepo.Remove(uint(id))
aaronchen2k2k's avatar
aaronchen2k2k 已提交
81 82 83
	return
}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
84 85 86 87 88 89 90 91 92 93 94
func (s *InstancesService) updateYaml(id uint) (err error) {
	var po model.ZdInstances
	po, _ = s.instancesRepo.Get(id)

	s.genYaml(&po)
	err = s.instancesRepo.UpdateYaml(po)
	fileUtils.WriteFile(po.Path, po.Yaml)

	return
}
func (s *InstancesService) genYaml(config *model.ZdInstances) (str string) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
95 96 97 98 99

	return
}

func (s *InstancesService) importResToDB(instances []model.ResFile, list []*model.ZdInstances) (err error) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
100 101 102 103 104
	names := make([]string, 0)
	for _, item := range list {
		names = append(names, item.Path)
	}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
105 106
	for _, inst := range instances {
		if !stringUtils.FindInArrBool(inst.Path, names) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
			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
			instPo.Folder = serverUtils.GetRelativePath(instPo.Path)
			instPo.Yaml = string(content)

			s.instancesRepo.Create(&instPo)

			for i, item := range instPo.Instances {
				item.Ord = i + 1
				s.saveItemToDB(&item, 0, instPo.ID)
			}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
124 125 126 127 128
		}
	}

	return
}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
129
func (s *InstancesService) saveItemToDB(item *model.ZdInstancesItem, parentID, instancesID uint) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
130 131 132 133
	if item.Instance != "" { // instance node
		item.Field = item.Instance
	}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
134 135 136 137
	item.InstancesID = instancesID
	item.ParentID = parentID
	s.instancesRepo.SaveItem(item)

aaronchen2k2k's avatar
aaronchen2k2k 已提交
138 139
	for i, child := range item.Fields {
		child.Ord = i + 1
aaronchen2k2k's avatar
aaronchen2k2k 已提交
140 141 142
		s.saveItemToDB(child, item.ID, instancesID)
	}
}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
143

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