123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- package cms
- import (
- "context"
- "go-common/app/interface/main/tv/model"
- "go-common/library/ecode"
- "go-common/library/log"
- )
- // LoadArcsMediaMap loads a batch of arc meta
- func (d *Dao) LoadArcsMediaMap(ctx context.Context, aids []int64) (resMetas map[int64]*model.ArcCMS, err error) {
- var (
- cachedMetas map[int64]*model.ArcCMS // cache hit seasons
- missedMetas map[int64]*model.ArcCMS // cache miss seasons, pick from DB
- missed []int64 // cache miss seasons
- addCache = true // whether we need to fill DB data in MC
- )
- resMetas = make(map[int64]*model.ArcCMS) // merge info from MC and from DB
- // pick up the information for these season ids
- if cachedMetas, missed, err = d.ArcsMetaCache(ctx, aids); err != nil {
- log.Error("LoadArcsMedia ArcsMetaCache Aids:%v, Error:%v", aids, err)
- err = nil
- addCache = false // mc error, we don't add
- }
- if len(missed) > 0 {
- if missedMetas, err = d.ArcMetas(ctx, missed); err != nil {
- log.Error("LoadArcsMedia ArcMetas Sids:%v, Error:%v", missed, err)
- return
- }
- }
- // merge info from DB and the info from MC
- for sid, v := range cachedMetas {
- resMetas[sid] = v
- }
- for sid, v := range missedMetas {
- resMetas[sid] = v
- }
- // async Reset the DB data in MC for next time
- log.Info("Set Sids [%d], MissedMetas [%d] Data in MC", len(aids), len(missedMetas))
- if addCache && len(missedMetas) > 0 {
- for _, art := range missedMetas {
- d.AddArcMetaCache(art)
- }
- }
- return
- }
- // LoadVideosMeta picks the videos meta info
- func (d *Dao) LoadVideosMeta(ctx context.Context, cids []int64) (resMetas map[int64]*model.VideoCMS, err error) {
- var (
- cachedMetas map[int64]*model.VideoCMS // cache hit seasons
- missedMetas map[int64]*model.VideoCMS // cache miss seasons, pick from DB
- missed []int64 // cache miss seasons
- addCache = true // whether we need to fill DB data in MC
- )
- resMetas = make(map[int64]*model.VideoCMS) // merge info from MC and from DB
- // pick up the information for these season ids
- if cachedMetas, missed, err = d.VideosMetaCache(ctx, cids); err != nil {
- log.Error("LoadVideosMeta VideosMetaCache Aids:%v, Error:%v", cids, err)
- err = nil
- addCache = false // mc error, we don't add
- }
- if len(missed) > 0 {
- if missedMetas, err = d.VideoMetas(ctx, missed); err != nil {
- log.Error("LoadVideosMeta VideoMetas Sids:%v, Error:%v", missed, err)
- return
- }
- }
- // merge info from DB and the info from MC
- for sid, v := range cachedMetas {
- resMetas[sid] = v
- }
- for sid, v := range missedMetas {
- resMetas[sid] = v
- }
- // async Reset the DB data in MC for next time
- log.Info("Set Sids [%d], MissedMetas [%d] Data in MC", len(cids), len(missedMetas))
- if addCache && len(missedMetas) > 0 {
- for _, art := range missedMetas {
- d.AddVideoMetaCache(art)
- }
- }
- return
- }
- // LoadArcsMedia loads the arc meta cms data from cache, for missed ones, pick them from the DB
- func (d *Dao) LoadArcsMedia(ctx context.Context, aids []int64) (arcs []*model.ArcCMS, err error) {
- var (
- resMetas map[int64]*model.ArcCMS // merge info from MC and from DB
- )
- if resMetas, err = d.LoadArcsMediaMap(ctx, aids); err != nil {
- log.Error("LoadArcsMedia LoadArcsMediaMap Aids: %v, Err: %v", aids, err)
- return
- }
- // re-arrange the info, according to the order got from Redis
- for _, v := range aids {
- if arcCMS, ok := resMetas[v]; !ok {
- log.Error("PickDBeiPage LoadArcsMedia Miss Info for Sid: %d", v)
- continue
- } else {
- arcs = append(arcs, arcCMS)
- }
- }
- return
- }
- // LoadArcMeta loads the arc meta cms data from cache, for missed ones, pick them from the DB
- func (d *Dao) LoadArcMeta(ctx context.Context, aid int64) (arcMeta *model.ArcCMS, err error) {
- if arcMeta, err = d.ArcMetaCache(ctx, aid); err != nil { // mc error
- log.Error("LoadArcMedia Get Aid [%d] from CMS Error (%v)", aid, err)
- return
- }
- if arcMeta != nil { // mc found
- return
- }
- if arcMeta, err = d.ArcMetaDB(ctx, aid); err != nil { // db error
- log.Error("LoadArcMedia ArcMetaDB Aid ERROR (%d) (%v)", aid, err)
- return
- }
- if arcMeta == nil { // db not found
- err = ecode.NothingFound
- return
- }
- d.AddArcMetaCache(arcMeta) // db found, re-fill the cache
- return
- }
- // LoadVideoMeta loads the video meta cms data from cache, for missed ones, pick them from the DB
- func (d *Dao) LoadVideoMeta(ctx context.Context, cid int64) (videoMeta *model.VideoCMS, err error) {
- if videoMeta, err = d.VideoMetaCache(ctx, cid); err != nil { // mc error
- log.Error("LoadVideoMeta Get Cid [%d] from CMS Error (%v)", cid, err)
- return
- }
- if videoMeta != nil { // mc found
- return
- }
- if videoMeta, err = d.VideoMetaDB(ctx, cid); err != nil { // db error
- log.Error("LoadArcMedia ArcMetaDB Aid ERROR (%d) (%v)", cid, err)
- return
- }
- if videoMeta == nil { // db not found
- err = ecode.NothingFound
- return
- }
- d.AddVideoMetaCache(videoMeta) // db found, re-fill the cache
- return
- }
|