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

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
}