config.go 3.0 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 8
	serverUtils "github.com/easysoft/zendata/src/server/utils"
	"github.com/easysoft/zendata/src/service"
	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 20 21 22
)

type ConfigService struct {
	configRepo *serverRepo.ConfigRepo
	resService *ResService
}

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

aaronchen2k2k's avatar
aaronchen2k2k 已提交
28 29 30 31 32 33 34
func (s *ConfigService) Get(id int) (config model.ZdConfig, dirTree model.Dir) {
	if id > 0 {
		config, _ = s.configRepo.Get(uint(id))
	}

	dirTree = model.Dir{Name: fileUtils.AddSepIfNeeded(constant.ResDirYaml)}
	serverUtils.GetDirTree(&dirTree)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
35 36 37 38 39

	return
}

func (s *ConfigService) Save(config *model.ZdConfig) (err error) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
	config.Folder = serverUtils.DealWithPathSepRight(config.Folder)
	config.Path = vari.WorkDir + config.Folder + serverUtils.AddExt(config.Title, ".yaml")
	config.Name = service.PathToName(config.Path, constant.ResDirYaml)

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

	return
}

func (s *ConfigService) Create(config *model.ZdConfig) (err error) {
	s.dataToYaml(config)
	err = s.configRepo.Create(config)

	return
}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
60
func (s *ConfigService) Update(config *model.ZdConfig) (err error) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
61
	var old model.ZdConfig
aaronchen2k2k's avatar
aaronchen2k2k 已提交
62
	old, err = s.configRepo.Get(config.ID)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
63 64 65
	if err == gorm.ErrRecordNotFound {
		return
	}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
66
	if config.Path != old.Path {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
67 68 69
		fileUtils.RemoveExist(old.Path)
	}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
70 71
	s.dataToYaml(config)
	err = s.configRepo.Update(config)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
72 73 74 75 76

	return
}

func (s *ConfigService) Remove(id int) (err error) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
77 78 79
	var old model.ZdConfig
	old, err = s.configRepo.Get(uint(id))
	if err == gorm.ErrRecordNotFound {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
80 81 82
		return
	}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
83
	fileUtils.RemoveExist(old.Path)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
84
	err = s.configRepo.Remove(uint(id))
aaronchen2k2k's avatar
aaronchen2k2k 已提交
85 86 87 88

	return
}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
89 90 91 92 93 94
func (s *ConfigService) dataToYaml(config *model.ZdConfig) (str string) {

	return
}

func (s *ConfigService) importResToDB(config []model.ResFile, list []*model.ZdConfig) (err error) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
95 96 97 98 99 100 101
	names := make([]string, 0)
	for _, item := range list {
		names = append(names, item.Path)
	}

	for _, item := range config {
		if !stringUtils.FindInArrBool(item.Path, names) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
102 103 104 105 106 107 108 109
			content, _ := ioutil.ReadFile(item.Path)
			yamlContent := stringUtils.ReplaceSpecialChars(content)
			config := model.ZdConfig{}
			err = yaml.Unmarshal(yamlContent, &config)
			config.Title = item.Title
			config.Name = item.Name
			config.Desc = item.Desc
			config.Path = item.Path
aaronchen2k2k's avatar
aaronchen2k2k 已提交
110
			config.Folder = serverUtils.GetRelativePath(config.Path)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
111 112
			config.Field = item.Title
			config.Note = item.Desc
aaronchen2k2k's avatar
aaronchen2k2k 已提交
113
			config.Yaml = string(content)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
114

aaronchen2k2k's avatar
aaronchen2k2k 已提交
115
			s.configRepo.Create(&config)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
116 117 118 119 120 121 122 123 124
		}
	}

	return
}

func NewConfigService(configRepo *serverRepo.ConfigRepo) *ConfigService {
	return &ConfigService{configRepo: configRepo}
}