github.com/easysoft/zendata@v0.0.0-20240513203326-705bd5a7fd67/internal/server/service/field.go (about) 1 package serverService 2 3 import ( 4 consts "github.com/easysoft/zendata/internal/pkg/const" 5 "github.com/easysoft/zendata/internal/pkg/model" 6 serverRepo "github.com/easysoft/zendata/internal/server/repo" 7 ) 8 9 type FieldService struct { 10 DefRepo *serverRepo.DefRepo `inject:""` 11 FieldRepo *serverRepo.FieldRepo `inject:""` 12 ReferRepo *serverRepo.ReferRepo `inject:""` 13 14 DefService *DefService `inject:""` 15 } 16 17 func (s *FieldService) GetTree(defId uint) (root *model.ZdField, err error) { 18 root, err = s.FieldRepo.GetDefFieldTree(defId) 19 return 20 } 21 22 func (s *FieldService) Get(fieldId int) (field model.ZdField, err error) { 23 field, err = s.FieldRepo.Get(uint(fieldId)) 24 25 return 26 } 27 28 func (s *FieldService) Save(field *model.ZdField) (err error) { 29 err = s.FieldRepo.Save(field) 30 s.DefService.updateYaml(field.DefID) 31 32 return 33 } 34 func (s *FieldService) Create(defId, targetId uint, name string, mode string) (field *model.ZdField, err error) { 35 field = &model.ZdField{DefID: defId} 36 field.Field = name 37 if mode == "root" { 38 field.DefID = defId 39 field.ParentID = 0 40 } else { 41 var target model.ZdField 42 43 target, err = s.FieldRepo.Get(targetId) 44 field.DefID = target.DefID 45 46 if mode == "child" { 47 field.ParentID = target.ID 48 } else { 49 field.ParentID = target.ParentID 50 } 51 field.Ord = s.FieldRepo.GetMaxOrder(field.ParentID) 52 } 53 54 err = s.FieldRepo.Save(field) 55 s.ReferRepo.CreateDefault(field.ID, consts.ResTypeDef) 56 57 s.DefService.updateYaml(field.DefID) 58 59 return 60 } 61 62 func (s *FieldService) Remove(id int) (defId int, err error) { 63 field, _ := s.FieldRepo.Get(uint(id)) 64 defId = int(field.DefID) 65 66 err = s.deleteFieldAndChildren(field.DefID, field.ID) 67 68 s.DefService.updateYaml(field.DefID) 69 70 return 71 } 72 73 func (s *FieldService) Move(srcId, targetId uint, mode string) (defId uint, srcField model.ZdField, err error) { 74 srcField, err = s.FieldRepo.Get(srcId) 75 targetField, err := s.FieldRepo.Get(targetId) 76 defId = srcField.DefID 77 78 if "0" == mode { 79 srcField.ParentID = targetId 80 srcField.Ord = s.FieldRepo.GetMaxOrder(srcField.ParentID) 81 } else if "-1" == mode { 82 err = s.FieldRepo.AddOrderForTargetAndNextCases(srcField.ID, targetField.Ord, targetField.ParentID) 83 if err != nil { 84 return 85 } 86 87 srcField.ParentID = targetField.ParentID 88 srcField.Ord = targetField.Ord 89 } else if "1" == mode { 90 err = s.FieldRepo.AddOrderForNextCases(srcField.ID, targetField.Ord, targetField.ParentID) 91 if err != nil { 92 return 93 } 94 95 srcField.ParentID = targetField.ParentID 96 srcField.Ord = targetField.Ord + 1 97 } 98 99 err = s.FieldRepo.UpdateOrdAndParent(srcField) 100 101 s.DefService.updateYaml(defId) 102 103 return 104 } 105 106 func (s *FieldService) deleteFieldAndChildren(defId, fieldId uint) (err error) { 107 err = s.FieldRepo.Remove(fieldId) 108 if err == nil { 109 children, _ := s.FieldRepo.GetChildren(defId, fieldId) 110 for _, child := range children { 111 s.deleteFieldAndChildren(child.DefID, child.ID) 112 } 113 } 114 115 return 116 } 117 118 func NewFieldService(defRepo *serverRepo.DefRepo, fieldRepo *serverRepo.FieldRepo, 119 referRepo *serverRepo.ReferRepo, 120 defService *DefService) *FieldService { 121 return &FieldService{DefRepo: defRepo, FieldRepo: fieldRepo, ReferRepo: referRepo, 122 DefService: defService} 123 }