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.
112 lines
2.9 KiB
112 lines
2.9 KiB
package search |
|
|
|
import ( |
|
"context" |
|
"strconv" |
|
|
|
"go-common/app/interface/main/tv/model" |
|
searchMdl "go-common/app/interface/main/tv/model/search" |
|
"go-common/library/ecode" |
|
"go-common/library/log" |
|
"go-common/library/xstr" |
|
) |
|
|
|
const ( |
|
_searchAll = "all_tv" |
|
_searchPGC = "tv_pgc" |
|
_searchUGC = "tv_ugc" |
|
_typePGC = "pgc" |
|
) |
|
|
|
// SearchSug returns the result of search sug |
|
func (s *Service) SearchSug(ctx context.Context, req *searchMdl.ReqSug) (result searchMdl.SugResponse, err error) { |
|
if result, err = s.dao.SearchSug(ctx, req); err != nil { |
|
return |
|
} |
|
build, _ := strconv.Atoi(req.Build) |
|
if build != 0 && build <= s.conf.Search.SugPGCBuild && len(result.Result.Tag) > 0 { |
|
var filtered = []*searchMdl.STag{} |
|
for _, v := range result.Result.Tag { |
|
if v.Type == _typePGC { |
|
filtered = append(filtered, v) |
|
} |
|
} |
|
result.Result.Tag = filtered |
|
} |
|
return |
|
} |
|
|
|
func (s *Service) batchToCommonPgc(ctx context.Context, input []*searchMdl.PgcResult) (output []*searchMdl.CommonResult) { |
|
var ( |
|
err error |
|
cids []int64 |
|
cmsRes map[int64]*model.SeasonCMS |
|
) |
|
for _, v := range input { |
|
output = append(output, v.ToCommon()) |
|
cids = append(cids, int64(v.ID)) |
|
} |
|
if cmsRes, err = s.cmsDao.LoadSnsCMSMap(ctx, cids); err != nil { |
|
log.Error("[search.cornerMark] cids(%s) error(%v)", xstr.JoinInts(cids), err) |
|
return |
|
} |
|
for idx, v := range output { |
|
if r, ok := cmsRes[int64(v.ID)]; ok && r.NeedVip() { |
|
output[idx].CornerMark = &(*s.conf.Cfg.SnVipCorner) |
|
} |
|
} |
|
return |
|
} |
|
|
|
func batchToCommonUgc(input []*searchMdl.UgcResult) (output []*searchMdl.CommonResult) { |
|
for _, v := range input { |
|
output = append(output, v.ToCommon()) |
|
} |
|
return |
|
} |
|
|
|
// SearchRes distinguishes the search type and pick the result |
|
func (s *Service) SearchRes(ctx context.Context, req *searchMdl.ReqSearch) (data *searchMdl.RespForClient, err error) { |
|
var resCommon *searchMdl.ResultResponse |
|
data = &searchMdl.RespForClient{ |
|
SearchType: req.SearchType, |
|
} |
|
switch req.SearchType { |
|
case _searchAll: |
|
var resAll searchMdl.RespAll |
|
if resAll, resCommon, err = s.dao.SearchAll(ctx, req); err != nil { |
|
return |
|
} |
|
if resAll.PageInfo != nil { |
|
data.PageInfo = resAll.PageInfo |
|
} |
|
if resAll.Result != nil { |
|
data.ResultAll = &searchMdl.AllForClient{ |
|
Pgc: s.batchToCommonPgc(ctx, resAll.Result.Pgc), |
|
Ugc: batchToCommonUgc(resAll.Result.Ugc), |
|
} |
|
} |
|
case _searchPGC: |
|
var resPgc searchMdl.RespPgc |
|
if resPgc, resCommon, err = s.dao.SearchPgc(ctx, req); err != nil { |
|
return |
|
} |
|
data.PGC = s.batchToCommonPgc(ctx, resPgc.Result) |
|
case _searchUGC: |
|
if req.Category == 0 { // in case of ugc, must have category |
|
err = ecode.RequestErr |
|
return |
|
} |
|
var resUgc searchMdl.RespUgc |
|
if resUgc, resCommon, err = s.dao.SearchUgc(ctx, req); err != nil { |
|
return |
|
} |
|
data.UGC = batchToCommonUgc(resUgc.Result) |
|
default: |
|
data = nil |
|
err = ecode.TvDangbeiWrongType |
|
return |
|
} |
|
data.ResultResponse = resCommon |
|
return |
|
}
|
|
|