addressBook.go 3.4 KB

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