go-common/app/interface/live/app-interface/service/v2/sky_horse.go
2019-04-22 18:49:16 +08:00

75 lines
2.2 KiB
Go

package v2
import (
"context"
"github.com/pkg/errors"
v2pb "go-common/app/interface/live/app-interface/api/http/v2"
"go-common/app/interface/live/app-interface/dao"
"go-common/library/ecode"
)
const (
_skyHorseRecTimeOut = 100
_recTypeForce = 3
_mobileIndexBadgeColorDefault = "#FB9E60"
_recTypeSkyHorse = 4
)
func (s *IndexService) getSkyHorseRoomListForIndex(ctx context.Context, respMyIdol *v2pb.MMyIdol, mid int64, buvid string, build int64, platform string, recPage int64, quality int64) (respSkyHorseRoomList []*v2pb.CommonRoomItem, err error) {
respSkyHorseRoomList = make([]*v2pb.CommonRoomItem, 0)
duplicate := make([]int64, 0)
// ctx可以换带cancel或timeout的
for _, idol := range respMyIdol.List {
duplicate = append(duplicate, idol.Roomid)
}
respSkyHorseRoomList, err = s.getSkyHorseRoomList(ctx, mid, buvid, build, platform, duplicate, recPage, quality)
if err != nil {
return
}
return
}
func (s *IndexService) getSkyHorseRoomList(ctx context.Context, uid int64, buvid string, build int64, platform string, idolIds []int64, recPage int64, quality int64) (respSkyHorseRoomList []*v2pb.CommonRoomItem, err error) {
// 天马对关注去重
duplicates := idolIds
idolDuplicateMap := make(map[int64]bool)
for _, id := range duplicates {
if _, ok := idolDuplicateMap[id]; !ok {
idolDuplicateMap[id] = true
}
}
strongRecLen := 0
//天马不考虑位置好的
recPool := s.getRecPoolAllPosition(ctx, nil, duplicates)
// 获取强推
if len(recPool) > 0 {
for _, strongInfo := range recPool {
if strongInfo.Roomid == 0 {
continue
}
if _, ok := idolDuplicateMap[strongInfo.Roomid]; !ok {
duplicates = append(duplicates, strongInfo.Roomid)
strongRecLen++
}
}
}
skyHorseRec, skyHorseErr := dao.SkyHorseApi.GetSkyHorseRec(ctx, uid, buvid, build, platform, duplicates, strongRecLen, _skyHorseRecTimeOut)
if skyHorseErr != nil {
err = errors.WithMessage(ecode.SkyHorseError, "")
return
}
roomIds := make([]int64, 0)
for _, skyHorseInfo := range skyHorseRec.Data {
roomIds = append(roomIds, int64(skyHorseInfo.Id))
}
return s.getRecRoomList(ctx, roomIds, recPool, build, platform, idolDuplicateMap, _recTypeSkyHorse, quality)
}