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.
123 lines
2.9 KiB
123 lines
2.9 KiB
package pack
|
|
|
|
import (
|
|
"context"
|
|
"github.com/TremblingV5/DouTok/applications/feed/rpc"
|
|
"github.com/TremblingV5/DouTok/applications/feed/service"
|
|
"github.com/TremblingV5/DouTok/kitex_gen/comment"
|
|
"github.com/TremblingV5/DouTok/kitex_gen/favorite"
|
|
"github.com/TremblingV5/DouTok/kitex_gen/feed"
|
|
"github.com/TremblingV5/DouTok/kitex_gen/user"
|
|
"strconv"
|
|
)
|
|
|
|
func PackFeedListResp(list []service.VideoInHB, code int32, msg string, user_id int64) (*feed.DouyinFeedResponse, error) {
|
|
res := feed.DouyinFeedResponse{
|
|
StatusCode: code,
|
|
StatusMsg: msg,
|
|
}
|
|
|
|
next_time := "9999999999"
|
|
var video_list []*feed.Video
|
|
|
|
var video_id_list []int64
|
|
validateMap := make(map[int64]bool)
|
|
var userIdList []int64
|
|
validateUserIdMap := make(map[int64]bool)
|
|
for _, v := range list {
|
|
videoId := v.GetId()
|
|
if _, ok := validateMap[videoId]; !ok {
|
|
video_id_list = append(video_id_list, v.GetId())
|
|
validateMap[videoId] = true
|
|
}
|
|
userId := v.GetAuthorId()
|
|
if _, ok := validateUserIdMap[userId]; !ok {
|
|
userIdList = append(userIdList, userId)
|
|
validateUserIdMap[userId] = true
|
|
}
|
|
if v.GetTimestamp() < next_time {
|
|
next_time = v.GetTimestamp()
|
|
}
|
|
}
|
|
|
|
userInfoResp, err := rpc.GetUserListByIds(context.Background(), &user.DouyinUserListRequest{
|
|
UserList: userIdList,
|
|
})
|
|
if err != nil {
|
|
return nil, nil
|
|
}
|
|
userInfo := userInfoResp.UserList
|
|
userMap := make(map[int64]*user.User)
|
|
for _, v := range userInfo {
|
|
userMap[v.Id] = v
|
|
}
|
|
|
|
isFavoriteResp, err := rpc.IsFavorite(context.Background(), &favorite.DouyinIsFavoriteRequest{
|
|
UserId: user_id,
|
|
VideoIdList: video_id_list,
|
|
})
|
|
if err != nil {
|
|
return nil, nil
|
|
}
|
|
isFavorite := isFavoriteResp.Result
|
|
|
|
favoriteCountResp, err := rpc.FavoriteCount(context.Background(), &favorite.DouyinFavoriteCountRequest{
|
|
VideoIdList: video_id_list,
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
favoriteCount := favoriteCountResp.Result
|
|
|
|
commentCountResp, err := rpc.CommentCount(context.Background(), &comment.DouyinCommentCountRequest{
|
|
VideoIdList: video_id_list,
|
|
})
|
|
if err != nil {
|
|
return nil, nil
|
|
}
|
|
commentCount := commentCountResp.Result
|
|
|
|
for _, v := range list {
|
|
var temp feed.Video
|
|
|
|
temp.Id = v.GetId()
|
|
temp.PlayUrl = v.GetVideoUrl()
|
|
temp.CoverUrl = v.GetCoverUrl()
|
|
temp.Title = v.GetTitle()
|
|
|
|
value, ok := favoriteCount[v.GetId()]
|
|
if ok {
|
|
temp.FavoriteCount = value
|
|
} else {
|
|
temp.FavoriteCount = 0
|
|
}
|
|
|
|
commentCnt, ok := commentCount[v.GetId()]
|
|
if ok {
|
|
temp.CommentCount = commentCnt
|
|
} else {
|
|
temp.CommentCount = 0
|
|
}
|
|
|
|
isFav, ok := isFavorite[v.GetId()]
|
|
if ok {
|
|
temp.IsFavorite = isFav
|
|
} else {
|
|
temp.IsFavorite = false
|
|
}
|
|
|
|
temp.Author = userMap[v.GetAuthorId()]
|
|
|
|
video_list = append(video_list, &temp)
|
|
|
|
if v.GetTimestamp() < next_time {
|
|
next_time = v.GetTimestamp()
|
|
}
|
|
}
|
|
|
|
res.VideoList = video_list
|
|
next_time_int64, _ := strconv.Atoi(next_time)
|
|
res.NextTime = int64(next_time_int64)
|
|
|
|
return &res, nil
|
|
}
|
|
|