123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- 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
- }
|