Initial commit

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-15 13:57:10 +08:00
co-authored by Claude Opus 5
commit 8679200f41
1897 changed files with 257900 additions and 0 deletions
+140
View File
@@ -0,0 +1,140 @@
package likeser
import (
"sync"
"time"
"91porn-server/app/service/searcher"
"91porn-server/common"
"91porn-server/common/log"
"91porn-server/models/v/likemod"
"91porn-server/models/v/usermod"
"go.mongodb.org/mongo-driver/bson/primitive"
)
type VideoRes = searcher.VideoRes
type UserBInfo = usermod.BaseInfo
type ObjectID = primitive.ObjectID
type Like = likemod.Like
type Record struct {
//点赞者UID
LUID uint64 `json:"lUID"`
//点赞者名字
LName string `json:"lName"`
//点赞者头像
LPortrait string `json:"lPortrait"`
//点赞类型 video:对视频点赞 comment:对评论点赞
LType string `json:"lType"`
//点赞时间
LTime time.Time `json:"lTime"`
//视屏信息
Video VideoRes `json:"video"`
}
type RecordPage struct {
HasNext bool `json:"hasNext"`
List []Record `json:"list"`
}
func RecordPages(uid uint64, skip, limit int64) (RecordPage, error) {
limitEx := limit + 1
likeList, err := likemod.ListByLikedUserID(uid, skip, limitEx)
if err != nil {
return RecordPage{}, err
}
hasNext := false
if len(likeList) > int(limit) {
hasNext = true
likeList = likeList[:limit]
}
vidMap := make(map[ObjectID]ObjectID, len(likeList)) //object->vid map
vids := make([]ObjectID, 0, len(likeList))
cmtIDs := make([]ObjectID, 0, len(likeList))
uids := make([]uint64, 0, len(likeList))
for _, v := range likeList {
if v.Type == "video" {
vids = append(vids, v.ObjID) //视屏ID
vidMap[v.ObjID] = v.ObjID
} else if v.Type == "comment" {
cmtIDs = append(cmtIDs, v.ObjID) //评论ID
}
uids = append(uids, v.UserID)
}
var (
wg = sync.WaitGroup{}
videoResList []VideoRes
userInfos []*UserBInfo
)
wg.Add(2)
common.Go(func() {
defer wg.Done()
list, err := searcher.GetVideoResList(uid, vids)
if err != nil {
log.Error("commentser GetVideoResList faild", log.E(err))
}
videoResList = list
})
common.Go(func() {
defer wg.Done()
list, err := usermod.GetUsersBaseInfo(uids)
if err != nil {
log.Error("commentser GetUsersBaseInfo faild", log.E(err))
}
userInfos = list
})
wg.Wait()
videoResMap := make(map[ObjectID]VideoRes, len(videoResList))
for _, v := range videoResList {
vidp := v.VideoInfo.ID
if vidp != nil {
videoResMap[*vidp] = v
}
}
userInfoMap := make(map[uint64]*usermod.BaseInfo, len(userInfos))
for _, v := range userInfos {
userInfoMap[v.UID] = v
}
recordList := tRecordList(likeList, vidMap, videoResMap, userInfoMap)
return RecordPage{
hasNext,
recordList,
}, nil
}
func tRecordList(likeList []Like,
vidMap map[ObjectID]ObjectID,
videoResMap map[ObjectID]VideoRes,
userInfoMap map[uint64]*usermod.BaseInfo,
) []Record {
recordList := make([]Record, 0, len(likeList))
for _, v := range likeList {
userInfo, ok := userInfoMap[v.UserID]
if !ok {
continue
}
vid, ok := vidMap[v.ObjID]
if !ok {
continue
}
videoRes, ok := videoResMap[vid]
if !ok {
continue
}
record := Record{
LUID: userInfo.UID,
LName: userInfo.Name,
LPortrait: userInfo.Portrait,
LType: v.Type,
LTime: v.CreatedAt,
Video: videoRes,
}
recordList = append(recordList, record)
}
return recordList
}