243 lines
5.8 KiB
Go
243 lines
5.8 KiB
Go
|
package search
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
|
||
|
mdlSearch "go-common/app/interface/main/tv/model/search"
|
||
|
v1 "go-common/app/service/main/archive/api"
|
||
|
"go-common/library/log"
|
||
|
"go-common/library/sync/errgroup"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
_showHide = 0
|
||
|
season = "番剧"
|
||
|
upper = "用户"
|
||
|
movie = "影视"
|
||
|
_searchType = "all"
|
||
|
_mobiAPP = "app"
|
||
|
_bangumiType = 1
|
||
|
_biliUserType = 2
|
||
|
_filmType = 3
|
||
|
_mediaBangumiType = 7
|
||
|
_mediaFtType = 8
|
||
|
)
|
||
|
|
||
|
// UserSearch search user .
|
||
|
func (s *Service) UserSearch(ctx context.Context, arg *mdlSearch.UserSearch) (res []*mdlSearch.User, err error) {
|
||
|
if res, err = s.dao.UserSearch(ctx, arg); err != nil {
|
||
|
log.Error("s.dao.UserSearch error(%v)", err)
|
||
|
}
|
||
|
if len(res) == 0 {
|
||
|
res = make([]*mdlSearch.User, 0)
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// SearchAll search all .
|
||
|
func (s *Service) SearchAll(ctx context.Context, arg *mdlSearch.UserSearch) (res *mdlSearch.ResultAll, err error) {
|
||
|
var (
|
||
|
user = &mdlSearch.Search{}
|
||
|
avm map[int64]*v1.Arc
|
||
|
avids []int64
|
||
|
items []*mdlSearch.Item
|
||
|
wildCfg = s.conf.Wild.WildSearch
|
||
|
)
|
||
|
arg.SeasonNum = wildCfg.SeasonNum
|
||
|
arg.MovieNum = wildCfg.MovieNum
|
||
|
arg.SearchType = _searchType
|
||
|
arg.MobiAPP = _mobiAPP
|
||
|
if user, err = s.dao.SearchAllWild(ctx, arg); err != nil {
|
||
|
log.Error(" s.dao.SearchAllWild error(%v)", err)
|
||
|
}
|
||
|
res = &mdlSearch.ResultAll{}
|
||
|
if user == nil {
|
||
|
return
|
||
|
}
|
||
|
res.Trackid = user.Trackid
|
||
|
res.Page = user.Page
|
||
|
res.Attribute = user.Attribute
|
||
|
nis := make([]*mdlSearch.NavInfo, 0, 4)
|
||
|
// season
|
||
|
if user.PageInfo.Bangumi != nil {
|
||
|
var nav = &mdlSearch.NavInfo{
|
||
|
Name: season,
|
||
|
Total: user.PageInfo.Bangumi.NumResult,
|
||
|
Pages: user.PageInfo.Bangumi.Pages,
|
||
|
Type: _bangumiType,
|
||
|
}
|
||
|
if user.PageInfo.Bangumi.NumResult > wildCfg.SeasonNum {
|
||
|
nav.Show = wildCfg.SeasonMore
|
||
|
} else {
|
||
|
nav.Show = _showHide
|
||
|
}
|
||
|
nis = append(nis, nav)
|
||
|
}
|
||
|
// media season
|
||
|
if user.PageInfo.MediaBangumi != nil {
|
||
|
var nav = &mdlSearch.NavInfo{
|
||
|
Name: season,
|
||
|
Total: user.PageInfo.MediaBangumi.NumResult,
|
||
|
Pages: user.PageInfo.MediaBangumi.Pages,
|
||
|
Type: _mediaBangumiType,
|
||
|
}
|
||
|
if user.PageInfo.MediaBangumi.NumResult > wildCfg.SeasonNum {
|
||
|
nav.Show = wildCfg.SeasonMore
|
||
|
} else {
|
||
|
nav.Show = _showHide
|
||
|
}
|
||
|
nis = append(nis, nav)
|
||
|
}
|
||
|
// upper
|
||
|
if user.PageInfo.BiliUser != nil {
|
||
|
var nav = &mdlSearch.NavInfo{
|
||
|
Name: upper,
|
||
|
Total: user.PageInfo.BiliUser.NumResult,
|
||
|
Pages: user.PageInfo.BiliUser.Pages,
|
||
|
Type: _biliUserType,
|
||
|
}
|
||
|
nis = append(nis, nav)
|
||
|
}
|
||
|
// movie
|
||
|
if user.PageInfo.Film != nil {
|
||
|
var nav = &mdlSearch.NavInfo{
|
||
|
Name: movie,
|
||
|
Total: user.PageInfo.Film.NumResult,
|
||
|
Pages: user.PageInfo.Film.Pages,
|
||
|
Type: _filmType,
|
||
|
}
|
||
|
if user.PageInfo.Movie != nil && user.PageInfo.Movie.NumResult > wildCfg.MovieNum {
|
||
|
nav.Show = wildCfg.MovieMore
|
||
|
} else {
|
||
|
nav.Show = _showHide
|
||
|
}
|
||
|
nis = append(nis, nav)
|
||
|
}
|
||
|
// media movie
|
||
|
if user.PageInfo.MediaFt != nil {
|
||
|
var nav = &mdlSearch.NavInfo{
|
||
|
Name: movie,
|
||
|
Total: user.PageInfo.MediaFt.NumResult,
|
||
|
Pages: user.PageInfo.MediaFt.Pages,
|
||
|
Type: _mediaFtType,
|
||
|
}
|
||
|
if user.PageInfo.MediaFt.NumResult > wildCfg.MovieNum {
|
||
|
nav.Show = wildCfg.MovieMore
|
||
|
} else {
|
||
|
nav.Show = _showHide
|
||
|
}
|
||
|
nis = append(nis, nav)
|
||
|
}
|
||
|
res.NavInfo = nis
|
||
|
// archive
|
||
|
for _, v := range user.Result.Video {
|
||
|
avids = append(avids, v.ID)
|
||
|
}
|
||
|
for _, v := range user.Result.Movie {
|
||
|
if v.Type == "movie" {
|
||
|
avids = append(avids, v.Aid)
|
||
|
}
|
||
|
}
|
||
|
if arg.Page == 1 {
|
||
|
for _, v := range user.Result.User {
|
||
|
for _, vr := range v.Res {
|
||
|
avids = append(avids, vr.Aid)
|
||
|
}
|
||
|
}
|
||
|
for _, v := range user.Result.BiliUser {
|
||
|
for _, vr := range v.Res {
|
||
|
avids = append(avids, vr.Aid)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
group := new(errgroup.Group)
|
||
|
if len(avids) != 0 {
|
||
|
group.Go(func() (err error) {
|
||
|
if avm, err = s.arcDao.Archives(ctx, avids); err != nil {
|
||
|
log.Error("%+v", err)
|
||
|
err = nil
|
||
|
}
|
||
|
return
|
||
|
})
|
||
|
}
|
||
|
if err = group.Wait(); err != nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// item add data .
|
||
|
var promptBangumi, promptFt string
|
||
|
// season
|
||
|
bangumi := user.Result.Bangumi
|
||
|
items = make([]*mdlSearch.Item, 0, len(bangumi))
|
||
|
for _, v := range bangumi {
|
||
|
si := &mdlSearch.Item{}
|
||
|
si.FromSeason(v, mdlSearch.GotoBangumiWeb)
|
||
|
items = append(items, si)
|
||
|
}
|
||
|
if len(res.Items.Season) > 5 && arg.RID == 0 {
|
||
|
res.Items.Season = res.Items.Season[:5]
|
||
|
res.Items.Season = items
|
||
|
} else {
|
||
|
res.Items.Season = items
|
||
|
}
|
||
|
// movie
|
||
|
movie := user.Result.Movie
|
||
|
items = make([]*mdlSearch.Item, 0, len(movie))
|
||
|
for _, v := range movie {
|
||
|
si := &mdlSearch.Item{}
|
||
|
si.FromMovie(v, avm)
|
||
|
items = append(items, si)
|
||
|
}
|
||
|
res.Items.Movie = items
|
||
|
// season2
|
||
|
mb := user.Result.MediaBangumi
|
||
|
// movie2
|
||
|
mf := user.Result.MediaFt
|
||
|
items = make([]*mdlSearch.Item, 0, len(mb)+len(mf))
|
||
|
for _, v := range mb {
|
||
|
si := &mdlSearch.Item{}
|
||
|
si.FromMedia(v, promptBangumi, mdlSearch.GotoBangumi, nil)
|
||
|
items = append(items, si)
|
||
|
}
|
||
|
for _, v := range mf {
|
||
|
si := &mdlSearch.Item{}
|
||
|
si.FromMedia(v, promptFt, mdlSearch.GotoMovie, nil)
|
||
|
si.Goto = mdlSearch.GotoAv
|
||
|
items = append(items, si)
|
||
|
}
|
||
|
if len(res.Items.Season2) > 5 && arg.RID == 0 {
|
||
|
res.Items.Season2 = res.Items.Season2[:5]
|
||
|
res.Items.Season2 = items
|
||
|
} else {
|
||
|
res.Items.Season2 = items
|
||
|
}
|
||
|
|
||
|
items = make([]*mdlSearch.Item, 0, len(user.Result.Video))
|
||
|
for _, v := range user.Result.Video {
|
||
|
si := &mdlSearch.Item{}
|
||
|
si.FromVideo(v, avm[v.ID])
|
||
|
items = append(items, si)
|
||
|
}
|
||
|
res.Items.Archive = items
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// PgcSearch search .
|
||
|
func (s *Service) PgcSearch(ctx context.Context, arg *mdlSearch.UserSearch) (res *mdlSearch.TypeSearch, err error) {
|
||
|
var (
|
||
|
wildCfg = s.conf.Wild.WildSearch
|
||
|
)
|
||
|
arg.SeasonNum = wildCfg.SeasonNum
|
||
|
arg.MovieNum = wildCfg.MovieNum
|
||
|
arg.SearchType = _searchType
|
||
|
arg.MobiAPP = _mobiAPP
|
||
|
if res, err = s.dao.PgcSearch(ctx, arg); err != nil {
|
||
|
log.Error("[wild.PgcSearch] s.dao.PgcSearch error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
if len(res.Items) <= 0 {
|
||
|
res.Items = make([]*mdlSearch.Item, 0)
|
||
|
}
|
||
|
return
|
||
|
}
|