@@ -0,0 +1,328 @@
|
||||
package commentser
|
||||
|
||||
import (
|
||||
"91porn-server/app/service/userser"
|
||||
"91porn-server/common"
|
||||
"91porn-server/common/constant"
|
||||
"91porn-server/models/v/cmtmod"
|
||||
"91porn-server/models/v/followmod"
|
||||
"91porn-server/models/v/likemod"
|
||||
"91porn-server/models/v/usermod"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
type ObjectID = primitive.ObjectID
|
||||
|
||||
// 获取父评论的附加信息--用户头像/是否点赞/是否是关注
|
||||
func getParentCommentTackInfo(uid uint64, cModList []cmtmod.Comment) (data []cmtmod.ParentRespList, err error) {
|
||||
now := time.Now()
|
||||
if cModList == nil {
|
||||
return []cmtmod.ParentRespList{}, err
|
||||
}
|
||||
var CIDs []ObjectID
|
||||
var UIDs []uint64
|
||||
for _, value := range cModList {
|
||||
if uid != value.UserID && value.IsAdvertiser {
|
||||
continue
|
||||
}
|
||||
tmp := cmtmod.ParentRespList{
|
||||
ID: value.ID.Hex(),
|
||||
ObjID: value.ObjID.Hex(),
|
||||
UserID: value.UserID,
|
||||
LikeCount: value.LikeCount,
|
||||
LinkStr: value.LinkStr,
|
||||
IsFollow: false,
|
||||
IsAuthor: value.IsAuthor,
|
||||
IsLike: false,
|
||||
IsDelete: value.IsDelete,
|
||||
IsGodComment: value.IsGodComment,
|
||||
CommCount: value.CommentCount,
|
||||
CommCountBurden: value.CommentCount,
|
||||
Content: value.Content,
|
||||
Image: value.Image,
|
||||
Status: value.Status,
|
||||
City: value.City,
|
||||
QuoteType: value.QuoteType,
|
||||
QuoteID: value.QuoteID,
|
||||
QuoteTitle: value.QuoteTitle,
|
||||
QuoteImg: value.QuoteImg,
|
||||
CreatedAt: value.CreatedAt,
|
||||
Info: []cmtmod.ChildRespList{}, // 空值处理
|
||||
}
|
||||
CIDs = append(CIDs, value.ID)
|
||||
UIDs = append(UIDs, value.UserID)
|
||||
data = append(data, tmp)
|
||||
}
|
||||
var wg = sync.WaitGroup{}
|
||||
var errs []error
|
||||
wg.Add(3)
|
||||
// 获取点赞记录信息
|
||||
common.Go(func() {
|
||||
defer wg.Done()
|
||||
likedList, err1 := likemod.FindLikesByObjIDS(constant.LikeTypeComment, uid, CIDs)
|
||||
if err1 != nil {
|
||||
errs = append(errs, err1)
|
||||
return
|
||||
}
|
||||
for k, v := range data {
|
||||
for _, ls := range likedList {
|
||||
if v.ID == ls.ObjID.Hex() {
|
||||
data[k].IsLike = true
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
// 获取用户昵称/性别/头像地址
|
||||
common.Go(func() {
|
||||
defer wg.Done()
|
||||
users, err1 := usermod.FindUsersByUID(UIDs)
|
||||
if err1 != nil {
|
||||
errs = append(errs, err1)
|
||||
return
|
||||
}
|
||||
|
||||
for k, v := range data {
|
||||
for _, u := range users {
|
||||
if v.UserID == u.UID {
|
||||
data[k].UserName = u.Name
|
||||
data[k].UserPortrait = u.Portrait
|
||||
data[k].Gender = u.Gender
|
||||
data[k].Age = u.Age()
|
||||
data[k].Level = u.VipLevel
|
||||
data[k].VipLevel = u.VipLevel
|
||||
data[k].SuperUser = u.GetSuperUser(now)
|
||||
data[k].Awards = u.Awards
|
||||
data[k].AwardsExpire = userser.HandleUserAwardsExpire(u)
|
||||
data[k].VipExpireDate = u.VipExpireDate
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
// 是否关注
|
||||
common.Go(func() {
|
||||
defer wg.Done()
|
||||
fMap, err1 := followmod.IsFollowUsers(uid, UIDs)
|
||||
if err1 != nil {
|
||||
errs = append(errs, err1)
|
||||
return
|
||||
}
|
||||
for k, v := range data {
|
||||
if fMap[v.UserID] {
|
||||
data[k].IsFollow = true
|
||||
} else {
|
||||
data[k].IsFollow = false
|
||||
}
|
||||
}
|
||||
})
|
||||
wg.Wait()
|
||||
if len(errs) > 0 {
|
||||
err = errs[0]
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// 获取父评论的作者或者热门的首条子评论
|
||||
func getFstChildCmtOfParent(isAdvertiser bool, objID ObjectID, list []cmtmod.ParentRespList, ids []ObjectID, uid uint64, author uint64, curTime time.Time) (data []cmtmod.ParentRespList, err error) {
|
||||
if list == nil || ids == nil {
|
||||
return
|
||||
}
|
||||
// 先获取作者的子评论
|
||||
aList, err := cmtmod.GetFstAuthorCmtOfParentCmt(isAdvertiser, objID, ids, author, curTime)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var cmtMap = make(map[ObjectID]*cmtmod.Comment)
|
||||
for _, v := range aList {
|
||||
_v := v
|
||||
cmtMap[v.CID] = &_v
|
||||
}
|
||||
// 获取其余的子评论
|
||||
cList, err := cmtmod.GetFstCmtOfParentCmt(isAdvertiser, objID, ids, curTime)
|
||||
for _, v := range cList {
|
||||
_v := v
|
||||
if cmtMap[v.CID] == nil {
|
||||
cmtMap[v.CID] = &_v
|
||||
}
|
||||
}
|
||||
var childList []cmtmod.Comment
|
||||
for _, v := range cmtMap {
|
||||
childList = append(childList, *v)
|
||||
}
|
||||
cResList, err := getChildCommentTackInfo(uid, childList)
|
||||
var childMap = make(map[string]*cmtmod.ChildRespList)
|
||||
for _, v := range cResList {
|
||||
_v := v
|
||||
childMap[v.CID] = &_v
|
||||
}
|
||||
for _, v := range list {
|
||||
if childMap[v.ID] != nil {
|
||||
v.Info = []cmtmod.ChildRespList{*childMap[v.ID]}
|
||||
data = append(data, v)
|
||||
} else {
|
||||
data = append(data, v)
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// 获取子评论的附加信息--用户头像/是否点赞/是否是关注
|
||||
func getChildCommentTackInfo(uid uint64, cModList []cmtmod.Comment) (data []cmtmod.ChildRespList, err error) {
|
||||
now := time.Now()
|
||||
if len(cModList) == 0 {
|
||||
return
|
||||
}
|
||||
var CIDs []ObjectID
|
||||
var UIDs []uint64
|
||||
var toUIDs []uint64
|
||||
|
||||
for _, value := range cModList {
|
||||
if uid != value.UserID && value.IsAdvertiser {
|
||||
continue
|
||||
}
|
||||
tmp := cmtmod.ChildRespList{
|
||||
ID: value.ID.Hex(),
|
||||
ObjID: value.ObjID.Hex(),
|
||||
CID: value.CID.Hex(),
|
||||
UserID: value.UserID,
|
||||
ToUserID: value.ToUserID,
|
||||
LikeCount: value.LikeCount,
|
||||
LinkStr: value.LinkStr,
|
||||
Level: value.Level,
|
||||
IsFollow: false,
|
||||
IsAuthor: value.IsAuthor,
|
||||
IsLike: false,
|
||||
IsDelete: value.IsDelete,
|
||||
Content: value.Content,
|
||||
Image: value.Image,
|
||||
Status: value.Status,
|
||||
City: value.City,
|
||||
QuoteType: value.QuoteType,
|
||||
QuoteID: value.QuoteID,
|
||||
QuoteTitle: value.QuoteTitle,
|
||||
QuoteImg: value.QuoteImg,
|
||||
CreatedAt: value.CreatedAt,
|
||||
}
|
||||
CIDs = append(CIDs, value.ID)
|
||||
UIDs = append(UIDs, value.UserID)
|
||||
data = append(data, tmp)
|
||||
if value.ToUserID != 0 {
|
||||
toUIDs = append(UIDs, value.ToUserID)
|
||||
}
|
||||
}
|
||||
var wg = sync.WaitGroup{}
|
||||
var errs []error
|
||||
wg.Add(4)
|
||||
// 是否点赞
|
||||
common.Go(func() {
|
||||
defer wg.Done()
|
||||
likedList, err1 := likemod.FindLikesByObjIDS(constant.LikeTypeComment, uid, CIDs)
|
||||
if err1 != nil {
|
||||
errs = append(errs, err1)
|
||||
return
|
||||
}
|
||||
for k, v := range data {
|
||||
for _, ls := range likedList {
|
||||
if v.ID == ls.ObjID.Hex() {
|
||||
data[k].IsLike = true
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
// 获取用户昵称/性别/头像地址
|
||||
common.Go(func() {
|
||||
defer wg.Done()
|
||||
users, err1 := usermod.FindUsersByUID(UIDs)
|
||||
if err1 != nil {
|
||||
errs = append(errs, err1)
|
||||
return
|
||||
}
|
||||
|
||||
for k, v := range data {
|
||||
for _, u := range users {
|
||||
if v.UserID == u.UID {
|
||||
data[k].UserName = u.Name
|
||||
data[k].UserPortrait = u.Portrait
|
||||
data[k].Gender = u.Gender
|
||||
data[k].Age = u.Age()
|
||||
data[k].VipLevel = u.VipLevel
|
||||
data[k].Awards = u.Awards
|
||||
data[k].AwardsExpire = userser.HandleUserAwardsExpire(u)
|
||||
data[k].SuperUser = u.GetSuperUser(now)
|
||||
data[k].VipExpireDate = u.VipExpireDate
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
// 获取回复用户
|
||||
common.Go(func() {
|
||||
defer wg.Done()
|
||||
if toUIDs == nil || len(toUIDs) == 0 {
|
||||
return
|
||||
}
|
||||
toUsers, err1 := usermod.FindUsersByUID(toUIDs)
|
||||
if err1 != nil {
|
||||
errs = append(errs, err1)
|
||||
return
|
||||
}
|
||||
for k, v := range data {
|
||||
for _, u := range toUsers {
|
||||
if v.ToUserID == u.UID {
|
||||
data[k].ToUserName = u.Name
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
})
|
||||
// 是否关注
|
||||
common.Go(func() {
|
||||
defer wg.Done()
|
||||
followers, err1 := followmod.IsFollowUsers(uid, UIDs)
|
||||
if err1 != nil {
|
||||
errs = append(errs, err1)
|
||||
return
|
||||
}
|
||||
for k, v := range data {
|
||||
data[k].IsFollow = followers[v.UserID]
|
||||
}
|
||||
})
|
||||
wg.Wait()
|
||||
if len(errs) > 0 {
|
||||
err = errs[0]
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// 计算分页信息
|
||||
func getNewPageInfo(total int64, pageNumber int64, pageSize int64) (int64, int64) {
|
||||
var curPage = pageNumber - total/pageSize
|
||||
var skip, limit int64
|
||||
if curPage == 1 {
|
||||
skip = 0
|
||||
limit = (pageSize - total%pageSize) + 1
|
||||
} else {
|
||||
skip = pageSize - total%pageSize + (curPage-2)*pageSize
|
||||
limit = (pageSize) + 1
|
||||
}
|
||||
return skip, limit
|
||||
}
|
||||
|
||||
// 排序
|
||||
func sortCmtList(ids []ObjectID, cmtList []cmtmod.Comment) (list []cmtmod.Comment) {
|
||||
var cMap = make(map[ObjectID]cmtmod.Comment)
|
||||
for _, v := range cmtList {
|
||||
cMap[v.ID] = v
|
||||
}
|
||||
for _, v := range ids {
|
||||
list = append(list, cMap[v])
|
||||
}
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user