github.com/easysoft/zendata@v0.0.0-20240513203326-705bd5a7fd67/internal/server/service/text.go (about) 1 package serverService 2 3 import ( 4 "strings" 5 6 "github.com/easysoft/zendata/internal/pkg/domain" 7 8 consts "github.com/easysoft/zendata/internal/pkg/const" 9 "github.com/easysoft/zendata/internal/pkg/helper" 10 "github.com/easysoft/zendata/internal/pkg/model" 11 serverRepo "github.com/easysoft/zendata/internal/server/repo" 12 serverUtils "github.com/easysoft/zendata/internal/server/utils" 13 fileUtils "github.com/easysoft/zendata/pkg/utils/file" 14 "github.com/easysoft/zendata/pkg/utils/vari" 15 "gorm.io/gorm" 16 ) 17 18 type TextService struct { 19 TextRepo *serverRepo.TextRepo `inject:""` 20 ResService *ResService `inject:""` 21 } 22 23 func (s *TextService) List(keywords string, page int) (list []*model.ZdText, total int) { 24 list, total, _ = s.TextRepo.List(strings.TrimSpace(keywords), page) 25 26 return 27 } 28 29 func (s *TextService) Get(id int) (text model.ZdText, dirs []domain.Dir) { 30 text, _ = s.TextRepo.Get(uint(id)) 31 32 serverUtils.GetDirs(consts.ResDirYaml, &dirs) 33 34 return 35 } 36 37 func (s *TextService) Save(text *model.ZdText) (err error) { 38 text.Folder = serverUtils.DealWithPathSepRight(text.Folder) 39 text.Path = vari.WorkDir + text.Folder + serverUtils.AddExt(text.FileName, ".txt") 40 text.ReferName = helper.PathToName(text.Path, consts.ResDirYaml, consts.ResTypeText) 41 42 if text.ID == 0 { 43 err = s.Create(text) 44 } else { 45 err = s.Update(text) 46 } 47 48 return 49 } 50 func (s *TextService) Create(text *model.ZdText) (err error) { 51 err = s.TextRepo.Create(text) 52 53 return 54 } 55 func (s *TextService) Update(text *model.ZdText) (err error) { 56 var old model.ZdText 57 old, err = s.TextRepo.Get(text.ID) 58 if err == gorm.ErrRecordNotFound { 59 return 60 } 61 if text.Path != old.Path { 62 fileUtils.RemoveExist(old.Path) 63 } 64 65 err = s.TextRepo.Update(text) 66 67 return 68 } 69 70 func (s *TextService) Remove(id int) (err error) { 71 var old model.ZdText 72 old, err = s.TextRepo.Get(uint(id)) 73 if err == gorm.ErrRecordNotFound { 74 return 75 } 76 77 fileUtils.RemoveExist(old.Path) 78 err = s.TextRepo.Remove(uint(id)) 79 80 return 81 } 82 83 func (s *TextService) Sync(files []domain.ResFile) (err error) { 84 list := s.TextRepo.ListAll() 85 86 mp := map[string]*model.ZdText{} 87 for _, item := range list { 88 mp[item.Path] = item 89 } 90 91 for _, fi := range files { 92 _, found := mp[fi.Path] 93 //logUtils.PrintTo(fi.UpdatedAt.OpenApiDataTypeString() + ", " + mp[fi.Path].UpdatedAt.OpenApiDataTypeString()) 94 if !found { // no record 95 s.SyncToDB(fi) 96 } else if fi.UpdatedAt.Unix() > mp[fi.Path].UpdatedAt.Unix() { // db is old 97 s.TextRepo.Remove(mp[fi.Path].ID) 98 s.SyncToDB(fi) 99 } else { // db is new 100 101 } 102 } 103 104 return 105 } 106 107 func (s *TextService) SyncToDB(file domain.ResFile) (err error) { 108 text := model.ZdText{ 109 Title: file.Title, 110 Path: file.Path, 111 Folder: serverUtils.GetRelativePath(file.Path), 112 FileName: fileUtils.GetFileName(file.Path), 113 } 114 if strings.Index(text.Path, consts.ResDirYaml) > -1 { 115 text.ReferName = helper.PathToName(text.Path, consts.ResDirYaml, consts.ResTypeText) 116 } else { 117 text.ReferName = helper.PathToName(text.Path, consts.ResDirUsers, consts.ResTypeText) 118 } 119 text.Content = fileUtils.ReadFile(file.Path) 120 121 s.TextRepo.Create(&text) 122 123 return 124 } 125 126 func NewTextService(textRepo *serverRepo.TextRepo) *TextService { 127 return &TextService{TextRepo: textRepo} 128 }