Create & Init Project...
This commit is contained in:
105
app/interface/main/tv/service/thirdp/dangbei.go
Normal file
105
app/interface/main/tv/service/thirdp/dangbei.go
Normal file
@ -0,0 +1,105 @@
|
||||
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
|
||||
}
|
Reference in New Issue
Block a user