addressBook.go 3.0 KB

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