Files
rustdesk-api/service/addressBook.go
2024-09-24 14:43:27 +08:00

116 lines
3.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package service
import (
"Gwen/global"
"Gwen/model"
"gorm.io/gorm"
)
type AddressBookService struct {
}
func (s *AddressBookService) Info(id string) *model.AddressBook {
p := &model.AddressBook{}
global.DB.Where("id = ?", id).First(p)
return p
}
func (s *AddressBookService) InfoByUserIdAndId(userid uint, id string) *model.AddressBook {
p := &model.AddressBook{}
global.DB.Where("user_id = ? and id = ?", userid, id).First(p)
return p
}
func (s *AddressBookService) InfoByRowId(id uint) *model.AddressBook {
p := &model.AddressBook{}
global.DB.Where("row_id = ?", id).First(p)
return p
}
func (s *AddressBookService) ListByUserId(userId, page, pageSize uint) (res *model.AddressBookList) {
res = s.List(page, pageSize, func(tx *gorm.DB) {
tx.Where("user_id = ?", userId)
})
return
}
func (s *AddressBookService) ListByUserIds(userIds []uint, page, pageSize uint) (res *model.AddressBookList) {
res = s.List(page, pageSize, func(tx *gorm.DB) {
tx.Where("user_id in (?)", userIds)
})
return
}
// AddAddressBook
func (s *AddressBookService) AddAddressBook(ab *model.AddressBook) error {
return global.DB.Create(ab).Error
}
// UpdateAddressBook
func (s *AddressBookService) UpdateAddressBook(abs []*model.AddressBook, userId uint) error {
//比较peers和数据库中的数据如果peers中的数据在数据库中不存在则添加如果存在则更新如果数据库中的数据在peers中不存在则删除
// 开始事务
tx := global.DB.Begin()
//1. 获取数据库中的数据
var dbABs []*model.AddressBook
tx.Where("user_id = ?", userId).Find(&dbABs)
//2. 比较peers和数据库中的数据
//2.1 获取peers中的id
aBIds := make(map[string]*model.AddressBook)
for _, ab := range abs {
aBIds[ab.Id] = ab
}
//2.2 获取数据库中的id
dbABIds := make(map[string]*model.AddressBook)
for _, dbAb := range dbABs {
dbABIds[dbAb.Id] = dbAb
}
//2.3 比较peers和数据库中的数据
for id, ab := range aBIds {
dbAB, ok := dbABIds[id]
ab.UserId = userId
if !ok {
//添加
tx.Create(ab)
} else {
//更新
tx.Model(&model.AddressBook{}).Where("row_id = ?", dbAB.RowId).Updates(ab)
}
}
//2.4 删除
for id, dbAB := range dbABIds {
_, ok := aBIds[id]
if !ok {
tx.Delete(dbAB)
}
}
tx.Commit()
return nil
}
func (t *AddressBookService) List(page, pageSize uint, where func(tx *gorm.DB)) (res *model.AddressBookList) {
res = &model.AddressBookList{}
res.Page = int64(page)
res.PageSize = int64(pageSize)
tx := global.DB.Model(&model.AddressBook{})
if where != nil {
where(tx)
}
tx.Count(&res.Total)
tx.Scopes(Paginate(page, pageSize))
tx.Find(&res.AddressBooks)
return
}
// Create 创建
func (t *AddressBookService) Create(u *model.AddressBook) error {
res := global.DB.Create(u).Error
return res
}
func (t *AddressBookService) Delete(u *model.AddressBook) error {
return global.DB.Delete(u).Error
}
// Update 更新
func (t *AddressBookService) Update(u *model.AddressBook) error {
return global.DB.Model(u).Updates(u).Error
}