addressBook.go 2.8 KB

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