-
Notifications
You must be signed in to change notification settings - Fork 48
/
field.go
123 lines (96 loc) · 3.09 KB
/
field.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package serverService
import (
consts "github.com/easysoft/zendata/internal/pkg/const"
"github.com/easysoft/zendata/internal/pkg/model"
serverRepo "github.com/easysoft/zendata/internal/server/repo"
)
type FieldService struct {
DefRepo *serverRepo.DefRepo `inject:""`
FieldRepo *serverRepo.FieldRepo `inject:""`
ReferRepo *serverRepo.ReferRepo `inject:""`
DefService *DefService `inject:""`
}
func (s *FieldService) GetTree(defId uint) (root *model.ZdField, err error) {
root, err = s.FieldRepo.GetDefFieldTree(defId)
return
}
func (s *FieldService) Get(fieldId int) (field model.ZdField, err error) {
field, err = s.FieldRepo.Get(uint(fieldId))
return
}
func (s *FieldService) Save(field *model.ZdField) (err error) {
err = s.FieldRepo.Save(field)
s.DefService.updateYaml(field.DefID)
return
}
func (s *FieldService) Create(defId, targetId uint, name string, mode string) (field *model.ZdField, err error) {
field = &model.ZdField{DefID: defId}
field.Field = name
if mode == "root" {
field.DefID = defId
field.ParentID = 0
} else {
var target model.ZdField
target, err = s.FieldRepo.Get(targetId)
field.DefID = target.DefID
if mode == "child" {
field.ParentID = target.ID
} else {
field.ParentID = target.ParentID
}
field.Ord = s.FieldRepo.GetMaxOrder(field.ParentID)
}
err = s.FieldRepo.Save(field)
s.ReferRepo.CreateDefault(field.ID, consts.ResTypeDef)
s.DefService.updateYaml(field.DefID)
return
}
func (s *FieldService) Remove(id int) (defId int, err error) {
field, _ := s.FieldRepo.Get(uint(id))
defId = int(field.DefID)
err = s.deleteFieldAndChildren(field.DefID, field.ID)
s.DefService.updateYaml(field.DefID)
return
}
func (s *FieldService) Move(srcId, targetId uint, mode string) (defId uint, srcField model.ZdField, err error) {
srcField, err = s.FieldRepo.Get(srcId)
targetField, err := s.FieldRepo.Get(targetId)
defId = srcField.DefID
if "0" == mode {
srcField.ParentID = targetId
srcField.Ord = s.FieldRepo.GetMaxOrder(srcField.ParentID)
} else if "-1" == mode {
err = s.FieldRepo.AddOrderForTargetAndNextCases(srcField.ID, targetField.Ord, targetField.ParentID)
if err != nil {
return
}
srcField.ParentID = targetField.ParentID
srcField.Ord = targetField.Ord
} else if "1" == mode {
err = s.FieldRepo.AddOrderForNextCases(srcField.ID, targetField.Ord, targetField.ParentID)
if err != nil {
return
}
srcField.ParentID = targetField.ParentID
srcField.Ord = targetField.Ord + 1
}
err = s.FieldRepo.UpdateOrdAndParent(srcField)
s.DefService.updateYaml(defId)
return
}
func (s *FieldService) deleteFieldAndChildren(defId, fieldId uint) (err error) {
err = s.FieldRepo.Remove(fieldId)
if err == nil {
children, _ := s.FieldRepo.GetChildren(defId, fieldId)
for _, child := range children {
s.deleteFieldAndChildren(child.DefID, child.ID)
}
}
return
}
func NewFieldService(defRepo *serverRepo.DefRepo, fieldRepo *serverRepo.FieldRepo,
referRepo *serverRepo.ReferRepo,
defService *DefService) *FieldService {
return &FieldService{DefRepo: defRepo, FieldRepo: fieldRepo, ReferRepo: referRepo,
DefService: defService}
}