123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- package thirdp
- import (
- "math"
- "go-common/app/interface/main/tv/dao/thirdp"
- "go-common/app/interface/main/tv/model"
- tpMdl "go-common/app/interface/main/tv/model/thirdp"
- "go-common/library/ecode"
- "go-common/library/log"
- "github.com/pkg/errors"
- )
- func (s *Service) buildPager(req *tpMdl.ReqDBeiPages) (pager *model.IdxPager, err error) {
- var (
- addCache bool
- count int
- )
- // pick up the count from redis, otherwise pick it from DB
- if count, err = s.dao.GetThirdpCnt(ctx, req.TypeC); err != nil {
- if count, err = s.dao.ThirdpCnt(ctx, req.TypeC); err != nil {
- return // if db count still error, fatal error
- }
- log.Error("PickDBeiPage - Can't Get Count, Pass by DB, Page %d", req.Page)
- addCache = true
- }
- pager = &model.IdxPager{
- CurrentPage: int(req.Page),
- TotalItems: count,
- TotalPages: int(math.Ceil(float64(count) / float64(req.Ps))),
- PageSize: int(req.Ps),
- }
- if req.Page > int64(pager.TotalPages) {
- err = ecode.TvDangbeiPageNotExist
- return
- }
- // async Reset the DB data: Count & CurrentPage ID in MC for next time
- if addCache {
- cache.Save(func() {
- s.dao.SetThirdpCnt(ctx, count, req.TypeC)
- log.Info("PickDBeiPage Set Count %d Into Cache", count)
- })
- }
- return
- }
- // PickDBeiPage picks the dangbei's page
- func (s *Service) PickDBeiPage(page int64, typeC string) (data *tpMdl.DBeiPage, err error) {
- var (
- cPageID int64
- sids []int64 // this page's season ids
- sns []*model.SeasonCMS
- arcs []*model.ArcCMS
- dbeiSns []*tpMdl.DBeiSeason
- pager *model.IdxPager
- )
- req := &tpMdl.ReqDBeiPages{
- Ps: s.conf.Cfg.Dangbei.Pagesize,
- TypeC: typeC,
- Page: page,
- }
- if pager, err = s.buildPager(req); err != nil {
- return
- }
- if req.LastID, err = s.dao.LoadPageID(ctx, req); err != nil {
- log.Error("MangoPage getPageID LastPage %d Miss, Pass by offset", page-1)
- return
- }
- if sids, cPageID, err = s.dao.DBeiPages(ctx, req); err != nil {
- return
- }
- if len(sids) == 0 {
- err = errors.Wrapf(ecode.NothingFound, "Type_C [%s], Page [%d], Offset Result Empty", typeC, page)
- return
- }
- // load data from cache and transform data to Dangbei structure
- if typeC == thirdp.DBeiPGC { // pgc - seasonCMS
- if sns, _, err = s.cmsDao.LoadSnsCMS(ctx, sids); err != nil {
- log.Error("PickDBeiPage - PGC - LoadSnsCMS - Sids %v, Error %v", sids, err)
- return
- }
- for _, v := range sns { // transform the object to DbeiSeason
- dbeiSns = append(dbeiSns, tpMdl.DBeiSn(v))
- }
- } else if typeC == thirdp.DBeiUGC { // ugc - arcCMS
- if arcs, err = s.cmsDao.LoadArcsMedia(ctx, sids); err != nil {
- log.Error("PickDBeiPage - UGC - LoadArcsMedia - Sids %v, Error %v", sids, err)
- return
- }
- for _, v := range arcs {
- first, second := s.arcDao.GetPTypeName(int32(v.TypeID))
- dbeiSns = append(dbeiSns, tpMdl.DbeiArc(v, first, second))
- }
- }
- // async Reset the DB data: CurrentPage ID in MC for next time
- cache.Save(func() {
- s.dao.SetPageID(ctx, &tpMdl.ReqPageID{Page: page, ID: cPageID, TypeC: typeC})
- })
- data = &tpMdl.DBeiPage{
- List: dbeiSns,
- Pager: pager,
- }
- return
- }
|