You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
192 lines
4.5 KiB
192 lines
4.5 KiB
package user
|
|
|
|
// 会员关注
|
|
import (
|
|
"live/app/lib"
|
|
"live/app/lib/recook"
|
|
"live/app/model/user"
|
|
)
|
|
|
|
type Follow struct {
|
|
}
|
|
|
|
type ReplyFollowItem struct {
|
|
recook.ReplyUserItem
|
|
Follows uint `json:"follows"`
|
|
Fans uint `json:"fans"`
|
|
IsFollow int `json:"isFollow"`
|
|
}
|
|
|
|
// @Title 获取会员关注列表
|
|
// @Param userId uint true "当前登录会员id,未登录传0"
|
|
// @Param findUserId uint true "需要查询关注列表的会员id"
|
|
func (f *Follow) GetList(userId, findUserId uint, page lib.Page) (result *[]ReplyFollowItem, count int64) {
|
|
userFollow := &user.UserFollow{}
|
|
result = &[]ReplyFollowItem{}
|
|
|
|
// 查询会员关注列表
|
|
start := (page.GetPage() - 1) * page.GetLimit()
|
|
count = userFollow.GetCountByUserId(findUserId)
|
|
if count <= int64(start) {
|
|
// 没有数据,不需要查库
|
|
return
|
|
}
|
|
findFollows := userFollow.GetListByUserId(findUserId, start, page.GetLimit())
|
|
if len(*findFollows) == 0 {
|
|
// 未查询到数据
|
|
return
|
|
}
|
|
followUserIds := []uint{}
|
|
for _, findFollow := range *findFollows {
|
|
followUserIds = append(followUserIds, findFollow.FollowUserId)
|
|
}
|
|
|
|
// 获取会员基础信息
|
|
userItems, err := recook.User.GetUsers(followUserIds)
|
|
if err != nil {
|
|
return
|
|
}
|
|
userItemsMap := map[uint]recook.ReplyUserItem{}
|
|
for _, userItem := range *userItems {
|
|
userItemsMap[userItem.UserId] = userItem
|
|
}
|
|
|
|
// 获取当前用户关注情况
|
|
userFollowsMap := map[uint]user.UserFollow{}
|
|
hasFollow := 1
|
|
if userId != findUserId {
|
|
hasFollow = 0
|
|
userFollows := userFollow.GetByUserIdAndFollowIds(userId, followUserIds)
|
|
for _, userFollow := range userFollows {
|
|
userFollowsMap[userFollow.FollowUserId] = userFollow
|
|
}
|
|
}
|
|
|
|
// 获取会员关注及粉丝数
|
|
userDatas := (&user.UserData{}).GetByUserIds(followUserIds)
|
|
userDatasMap := map[uint]user.UserData{}
|
|
for _, userData := range userDatas {
|
|
userDatasMap[userData.UserId] = userData
|
|
}
|
|
|
|
for _, findFollow := range *findFollows {
|
|
// 如果能查询到会员信息
|
|
if replyUserItem, ok := userItemsMap[findFollow.FollowUserId]; ok {
|
|
isFollow := hasFollow
|
|
if isFollow == 0 {
|
|
// 判断是否关注
|
|
if _, ok := userFollowsMap[findFollow.FollowUserId]; ok {
|
|
isFollow = 1
|
|
|
|
}
|
|
}
|
|
// 获取统计数据
|
|
userData := userDatasMap[findFollow.FollowUserId]
|
|
|
|
*result = append(*result, ReplyFollowItem{
|
|
ReplyUserItem: replyUserItem,
|
|
Follows: userData.Follows,
|
|
Fans: userData.Fans,
|
|
IsFollow: isFollow,
|
|
})
|
|
}
|
|
}
|
|
return result, count
|
|
}
|
|
|
|
// @Title 添加关注
|
|
func (f *Follow) Add(userId, followUserId uint) (result bool) {
|
|
userFollowModel := &user.UserFollow{}
|
|
userFollow := userFollowModel.GetByUserIdAndFollowId(userId, followUserId)
|
|
|
|
tx := userFollowModel.Begin()
|
|
defer func() {
|
|
if result {
|
|
tx.Commit()
|
|
} else {
|
|
tx.Rollback()
|
|
}
|
|
}()
|
|
// 已经关注过
|
|
if userFollow.Id != 0 {
|
|
// 关注过后取消关注
|
|
if userFollow.IsDel == 1 {
|
|
res := userFollowModel.RenewFollow(userId, followUserId)
|
|
if res == 0 {
|
|
return false
|
|
}
|
|
userDataModel := &user.UserData{}
|
|
userDataModel.SetDb(tx)
|
|
res = userDataModel.AddFollow(userId)
|
|
if res == 0 {
|
|
return false
|
|
}
|
|
// 被关注者新增粉丝
|
|
res = userDataModel.AddFans(followUserId)
|
|
if res == 0 {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
} else {
|
|
// 未关注添加关注
|
|
fid := userFollowModel.Create(&user.UserFollow{
|
|
UserId: userId,
|
|
FollowUserId: followUserId,
|
|
})
|
|
if fid == 0 {
|
|
return false
|
|
} else {
|
|
userDataModel := &user.UserData{}
|
|
userDataModel.SetDb(tx)
|
|
res := userDataModel.AddFollow(userId)
|
|
if res == 0 {
|
|
return false
|
|
}
|
|
// 被关注者新增粉丝
|
|
res = userDataModel.AddFans(followUserId)
|
|
if res == 0 {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
|
|
// @Title 取消关注
|
|
func (f *Follow) Cancel(userId, followUserId uint) (result bool) {
|
|
userFollowModel := &user.UserFollow{}
|
|
userFollow := userFollowModel.GetByUserIdAndFollowId(userId, followUserId)
|
|
// 已经关注过
|
|
if userFollow.Id != 0 {
|
|
// 关注过后取消关注
|
|
if userFollow.IsDel == 0 {
|
|
tx := userFollow.Begin()
|
|
defer func() {
|
|
if result {
|
|
tx.Commit()
|
|
} else {
|
|
tx.Rollback()
|
|
}
|
|
}()
|
|
res := userFollowModel.CancelFollow(userId, followUserId)
|
|
if res == 0 {
|
|
return false
|
|
}
|
|
// 统计数据处理
|
|
userDataModel := &user.UserData{}
|
|
userDataModel.SetDb(tx)
|
|
res = userDataModel.CancelFollow(userId)
|
|
if res == 0 {
|
|
return false
|
|
}
|
|
// 被取关者减少粉丝
|
|
res = userDataModel.CancelFans(followUserId)
|
|
if res == 0 {
|
|
return false
|
|
}
|
|
}
|
|
}
|
|
return true
|
|
}
|