addressBook.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. package service
  2. import (
  3. "Gwen/global"
  4. "Gwen/model"
  5. "github.com/google/uuid"
  6. "gorm.io/gorm"
  7. "strings"
  8. )
  9. type AddressBookService struct {
  10. }
  11. func (s *AddressBookService) Info(id string) *model.AddressBook {
  12. p := &model.AddressBook{}
  13. global.DB.Where("id = ?", id).First(p)
  14. return p
  15. }
  16. func (s *AddressBookService) InfoByUserIdAndId(userid uint, id string) *model.AddressBook {
  17. p := &model.AddressBook{}
  18. global.DB.Where("user_id = ? and id = ?", userid, id).First(p)
  19. return p
  20. }
  21. func (s *AddressBookService) InfoByRowId(id uint) *model.AddressBook {
  22. p := &model.AddressBook{}
  23. global.DB.Where("row_id = ?", id).First(p)
  24. return p
  25. }
  26. func (s *AddressBookService) ListByUserId(userId, page, pageSize uint) (res *model.AddressBookList) {
  27. res = s.List(page, pageSize, func(tx *gorm.DB) {
  28. tx.Where("user_id = ?", userId)
  29. })
  30. return
  31. }
  32. func (s *AddressBookService) ListByUserIds(userIds []uint, page, pageSize uint) (res *model.AddressBookList) {
  33. res = s.List(page, pageSize, func(tx *gorm.DB) {
  34. tx.Where("user_id in (?)", userIds)
  35. })
  36. return
  37. }
  38. // AddAddressBook
  39. func (s *AddressBookService) AddAddressBook(ab *model.AddressBook) error {
  40. return global.DB.Create(ab).Error
  41. }
  42. // UpdateAddressBook
  43. func (s *AddressBookService) UpdateAddressBook(abs []*model.AddressBook, userId uint) error {
  44. //比较peers和数据库中的数据,如果peers中的数据在数据库中不存在,则添加,如果存在则更新,如果数据库中的数据在peers中不存在,则删除
  45. // 开始事务
  46. tx := global.DB.Begin()
  47. //1. 获取数据库中的数据
  48. var dbABs []*model.AddressBook
  49. tx.Where("user_id = ?", userId).Find(&dbABs)
  50. //2. 比较peers和数据库中的数据
  51. //2.1 获取peers中的id
  52. aBIds := make(map[string]*model.AddressBook)
  53. for _, ab := range abs {
  54. aBIds[ab.Id] = ab
  55. }
  56. //2.2 获取数据库中的id
  57. dbABIds := make(map[string]*model.AddressBook)
  58. for _, dbAb := range dbABs {
  59. dbABIds[dbAb.Id] = dbAb
  60. }
  61. //2.3 比较peers和数据库中的数据
  62. for id, ab := range aBIds {
  63. dbAB, ok := dbABIds[id]
  64. ab.UserId = userId
  65. if !ok {
  66. //添加
  67. if ab.Platform == "" || ab.Username == "" || ab.Hostname == "" {
  68. peer := AllService.PeerService.FindById(ab.Id)
  69. if peer.RowId != 0 {
  70. ab.Platform = AllService.AddressBookService.PlatformFromOs(peer.Os)
  71. ab.Username = peer.Username
  72. ab.Hostname = peer.Hostname
  73. }
  74. }
  75. tx.Create(ab)
  76. } else {
  77. //更新
  78. tx.Model(&model.AddressBook{}).Where("row_id = ?", dbAB.RowId).Updates(ab)
  79. }
  80. }
  81. //2.4 删除
  82. for id, dbAB := range dbABIds {
  83. _, ok := aBIds[id]
  84. if !ok {
  85. tx.Delete(dbAB)
  86. }
  87. }
  88. tx.Commit()
  89. return nil
  90. }
  91. func (t *AddressBookService) List(page, pageSize uint, where func(tx *gorm.DB)) (res *model.AddressBookList) {
  92. res = &model.AddressBookList{}
  93. res.Page = int64(page)
  94. res.PageSize = int64(pageSize)
  95. tx := global.DB.Model(&model.AddressBook{})
  96. if where != nil {
  97. where(tx)
  98. }
  99. tx.Count(&res.Total)
  100. tx.Scopes(Paginate(page, pageSize))
  101. tx.Find(&res.AddressBooks)
  102. return
  103. }
  104. // Create 创建
  105. func (t *AddressBookService) Create(u *model.AddressBook) error {
  106. res := global.DB.Create(u).Error
  107. return res
  108. }
  109. func (t *AddressBookService) Delete(u *model.AddressBook) error {
  110. return global.DB.Delete(u).Error
  111. }
  112. // Update 更新
  113. func (t *AddressBookService) Update(u *model.AddressBook) error {
  114. return global.DB.Model(u).Updates(u).Error
  115. }
  116. // ShareByWebClient 分享
  117. func (t *AddressBookService) ShareByWebClient(m *model.ShareRecord) error {
  118. m.ShareToken = uuid.New().String()
  119. return global.DB.Create(m).Error
  120. }
  121. // SharedPeer
  122. func (t *AddressBookService) SharedPeer(shareToken string) *model.ShareRecord {
  123. m := &model.ShareRecord{}
  124. global.DB.Where("share_token = ?", shareToken).First(m)
  125. return m
  126. }
  127. // PlatformFromOs
  128. func (t *AddressBookService) PlatformFromOs(os string) string {
  129. if strings.Contains(os, "Android") || strings.Contains(os, "android") {
  130. return "Android"
  131. }
  132. if strings.Contains(os, "Windows") || strings.Contains(os, "windows") {
  133. return "Windows"
  134. }
  135. if strings.Contains(os, "Linux") || strings.Contains(os, "linux") {
  136. return "Linux"
  137. }
  138. if strings.Contains(os, "mac") || strings.Contains(os, "Mac") {
  139. return "Mac OS"
  140. }
  141. return ""
  142. }