288 lines
9.6 KiB
Go
288 lines
9.6 KiB
Go
|
package cms
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"database/sql"
|
||
|
"fmt"
|
||
|
|
||
|
"go-common/app/interface/main/tv/model"
|
||
|
xsql "go-common/library/database/sql"
|
||
|
"go-common/library/log"
|
||
|
"go-common/library/xstr"
|
||
|
)
|
||
|
|
||
|
const (
|
||
|
_seasonCols = "SELECT id, cover, title , upinfo, `desc`, category, area, play_time, role, staff, total_num, style,origin_name,alias,status FROM tv_ep_season "
|
||
|
_epCols = "SELECT epid, cover, title, subtitle, pay_status FROM tv_content "
|
||
|
_seasonMetas = _seasonCols + " WHERE id IN (%s)"
|
||
|
_arcMetas = "SELECT title, aid, content, cover, typeid, pubtime, videos, valid, deleted, result FROM ugc_archive WHERE aid IN (%s)"
|
||
|
_videoMeta = "SELECT cid, eptitle, aid, index_order, valid, deleted, result FROM ugc_video WHERE cid = ?"
|
||
|
_videoMetas = "SELECT cid, eptitle, aid, index_order, valid, deleted, result FROM ugc_video WHERE cid IN (%s)"
|
||
|
_epMetas = _epCols + " WHERE epid IN (%s) AND is_deleted = 0 "
|
||
|
_simpleEPC = "SELECT `id`, `epid`, `state`, `is_deleted`, `valid`, `season_id` , `mark` FROM `tv_content` WHERE `epid` = ? LIMIT 1"
|
||
|
_simpleEPCs = "SELECT `id`, `epid`, `state`, `is_deleted`, `valid`, `season_id` , `mark` FROM `tv_content` WHERE `epid` IN (%s)"
|
||
|
_simpleSea = "SELECT `id`, `is_deleted`, `check`, `valid` FROM `tv_ep_season` WHERE `id` = ? LIMIT 1"
|
||
|
_simpleSeas = "SELECT `id`, `is_deleted`, `check`, `valid` FROM `tv_ep_season` WHERE `id` IN (%s)"
|
||
|
_seasonCMS = _seasonCols + "WHERE id = ? AND is_deleted = 0"
|
||
|
_epCMS = _epCols + " WHERE epid = ? AND is_deleted = 0 "
|
||
|
_newestOrder = "SELECT a.epid,b.`order` FROM tv_content a LEFT JOIN tv_ep_content b ON a.epid=b.id " +
|
||
|
"WHERE a.season_id=? AND a.state= ? AND a.valid= ? AND a.is_deleted=0 ORDER by `order` DESC LIMIT 1"
|
||
|
epStatePass = 3
|
||
|
_CMSValid = 1
|
||
|
)
|
||
|
|
||
|
// VideoMetaDB picks video from DB
|
||
|
func (d *Dao) VideoMetaDB(c context.Context, cid int64) (meta *model.VideoCMS, err error) {
|
||
|
rows, err := d.db.Query(c, _videoMeta, cid)
|
||
|
if err != nil {
|
||
|
log.Error("VideoMetaDB d.db.Query error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
defer rows.Close()
|
||
|
for rows.Next() {
|
||
|
li := &model.VideoCMS{}
|
||
|
if err = rows.Scan(&li.CID, &li.Title, &li.AID, &li.IndexOrder, &li.Valid, &li.Deleted, &li.Result); err != nil {
|
||
|
log.Error("VideoMetaDB row.Scan error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
meta = li
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// ArcMetaDB picks arc from DB
|
||
|
func (d *Dao) ArcMetaDB(c context.Context, aid int64) (meta *model.ArcCMS, err error) {
|
||
|
rows, err := d.db.Query(c, fmt.Sprintf(_arcMetas, fmt.Sprintf("%d", aid)))
|
||
|
if err != nil {
|
||
|
log.Error("ArcMetas d.db.Query error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
defer rows.Close()
|
||
|
for rows.Next() {
|
||
|
li := &model.ArcCMS{}
|
||
|
if err = rows.Scan(&li.Title, &li.AID, &li.Content, &li.Cover, &li.TypeID, &li.Pubtime, &li.Videos, &li.Valid, &li.Deleted, &li.Result); err != nil {
|
||
|
log.Error("ArcMetas row.Scan error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
meta = li
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// VideoMetas picks video from DB
|
||
|
func (d *Dao) VideoMetas(c context.Context, cids []int64) (meta map[int64]*model.VideoCMS, err error) {
|
||
|
meta = make(map[int64]*model.VideoCMS)
|
||
|
rows, err := d.db.Query(c, fmt.Sprintf(_videoMetas, xstr.JoinInts(cids)))
|
||
|
if err != nil {
|
||
|
log.Error("VideoMetaDB d.db.Query error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
defer rows.Close()
|
||
|
for rows.Next() {
|
||
|
li := &model.VideoCMS{}
|
||
|
if err = rows.Scan(&li.CID, &li.Title, &li.AID, &li.IndexOrder, &li.Valid, &li.Deleted, &li.Result); err != nil {
|
||
|
log.Error("VideoMetaDB row.Scan error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
meta[int64(li.CID)] = li
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// ArcMetas picks seasons from DB
|
||
|
func (d *Dao) ArcMetas(c context.Context, aids []int64) (metas map[int64]*model.ArcCMS, err error) {
|
||
|
metas = make(map[int64]*model.ArcCMS)
|
||
|
rows, err := d.db.Query(c, fmt.Sprintf(_arcMetas, xstr.JoinInts(aids)))
|
||
|
if err != nil {
|
||
|
log.Error("ArcMetas d.db.Query error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
defer rows.Close()
|
||
|
for rows.Next() {
|
||
|
li := &model.ArcCMS{}
|
||
|
if err = rows.Scan(&li.Title, &li.AID, &li.Content, &li.Cover, &li.TypeID, &li.Pubtime, &li.Videos, &li.Valid, &li.Deleted, &li.Result); err != nil {
|
||
|
log.Error("ArcMetas row.Scan error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
metas[li.AID] = li
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// SeasonMetas picks seasons from DB
|
||
|
func (d *Dao) SeasonMetas(c context.Context, sids []int64) (metas map[int64]*model.SeasonCMS, err error) {
|
||
|
metas = make(map[int64]*model.SeasonCMS)
|
||
|
rows, err := d.db.Query(c, fmt.Sprintf(_seasonMetas, xstr.JoinInts(sids)))
|
||
|
if err != nil {
|
||
|
log.Error("SeasonMetas d.db.Query error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
defer rows.Close()
|
||
|
for rows.Next() {
|
||
|
li := &model.SeasonCMS{}
|
||
|
// SELECT id, cover, title , upinfo, `desc`, category, area, play_time, role, staff, total_num, style, origin_name, status
|
||
|
if err = rows.Scan(&li.SeasonID, &li.Cover, &li.Title, &li.UpInfo, &li.Desc, &li.Category, &li.Area,
|
||
|
&li.Playtime, &li.Role, &li.Staff, &li.TotalNum, &li.Style, &li.OriginName, &li.Alias, &li.PayStatus); err != nil {
|
||
|
log.Error("SeasonMetas row.Scan error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
metas[int64(li.SeasonID)] = li
|
||
|
}
|
||
|
for _, v := range metas {
|
||
|
v.NewestEPID, v.NewestOrder, _ = d.NewestOrder(c, v.SeasonID)
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// NewestOrder picks one season's newest passed ep's order column value
|
||
|
func (d *Dao) NewestOrder(c context.Context, sid int64) (epid int64, newestOrder int, err error) {
|
||
|
if err = d.db.QueryRow(c, _newestOrder, sid, epStatePass, _CMSValid).Scan(&epid, &newestOrder); err != nil { // get the qualified aid to sync
|
||
|
log.Warn("d.NewestOrder(sid %d).Query error(%v)", sid, err)
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// EpMetas picks ep info from DB
|
||
|
func (d *Dao) EpMetas(c context.Context, epids []int64) (metas map[int64]*model.EpCMS, err error) {
|
||
|
metas = make(map[int64]*model.EpCMS)
|
||
|
rows, err := d.db.Query(c, fmt.Sprintf(_epMetas, xstr.JoinInts(epids)))
|
||
|
if err != nil {
|
||
|
log.Error("EpMetas d.db.Query error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
defer rows.Close()
|
||
|
for rows.Next() {
|
||
|
li := &model.EpCMS{}
|
||
|
if err = rows.Scan(&li.EPID, &li.Cover, &li.Title, &li.Subtitle, &li.PayStatus); err != nil {
|
||
|
log.Error("EpMetas row.Scan error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
metas[li.EPID] = li
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// EpAuthDB pick ep data from DB for Cache missing case
|
||
|
func (d *Dao) EpAuthDB(c context.Context, cid int64) (ep *model.EpAuth, err error) {
|
||
|
var row *xsql.Row
|
||
|
if row = d.db.QueryRow(c, _simpleEPC, cid); err != nil {
|
||
|
log.Error("d.db.QueryRow(%d) error(%v)", cid, err)
|
||
|
return
|
||
|
}
|
||
|
ep = &model.EpAuth{}
|
||
|
if err = row.Scan(&ep.ID, &ep.EPID, &ep.State, &ep.IsDeleted, &ep.Valid, &ep.SeasonID, &ep.NoMark); err != nil {
|
||
|
if err == sql.ErrNoRows {
|
||
|
err = nil
|
||
|
ep = nil
|
||
|
} else {
|
||
|
log.Error("row.Scan() error(%v)", err)
|
||
|
}
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// SnAuthDB .
|
||
|
func (d *Dao) SnAuthDB(c context.Context, cid int64) (s *model.SnAuth, err error) {
|
||
|
var row *xsql.Row
|
||
|
if row = d.db.QueryRow(c, _simpleSea, cid); err != nil {
|
||
|
log.Error("d.db.QueryRow(%d) error(%v)", cid, err)
|
||
|
return
|
||
|
}
|
||
|
s = &model.SnAuth{}
|
||
|
if err = row.Scan(&s.ID, &s.IsDeleted, &s.Check, &s.Valid); err != nil {
|
||
|
if err == sql.ErrNoRows {
|
||
|
err = nil
|
||
|
s = nil
|
||
|
} else {
|
||
|
log.Error("row.Scan() error(%v)", err)
|
||
|
}
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// SnsAuthDB .
|
||
|
func (d *Dao) SnsAuthDB(c context.Context, sids []int64) (snsAuth map[int64]*model.SnAuth, err error) {
|
||
|
snsAuth = make(map[int64]*model.SnAuth)
|
||
|
rows, err := d.db.Query(c, fmt.Sprintf(_simpleSeas, xstr.JoinInts(sids)))
|
||
|
if err != nil {
|
||
|
log.Error("ArcMetas d.db.Query error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
defer rows.Close()
|
||
|
for rows.Next() {
|
||
|
s := &model.SnAuth{}
|
||
|
if err = rows.Scan(&s.ID, &s.IsDeleted, &s.Check, &s.Valid); err != nil {
|
||
|
log.Error("SnsAuthDB row.Scan error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
snsAuth[s.ID] = s
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// EpsAuthDB def.
|
||
|
func (d *Dao) EpsAuthDB(c context.Context, epids []int64) (epsAuth map[int64]*model.EpAuth, err error) {
|
||
|
epsAuth = make(map[int64]*model.EpAuth)
|
||
|
rows, err := d.db.Query(c, fmt.Sprintf(_simpleEPCs, xstr.JoinInts(epids)))
|
||
|
if err != nil {
|
||
|
log.Error("ArcMetas d.db.Query error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
defer rows.Close()
|
||
|
for rows.Next() {
|
||
|
ep := &model.EpAuth{}
|
||
|
if err = rows.Scan(&ep.ID, &ep.EPID, &ep.State, &ep.IsDeleted, &ep.Valid, &ep.SeasonID, &ep.NoMark); err != nil {
|
||
|
log.Error("SnsAuthDB row.Scan error(%v)", err)
|
||
|
return
|
||
|
}
|
||
|
epsAuth[ep.EPID] = ep
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// SeasonCMS gets the fields that can be changed from tv-cms side to offer the TV APP
|
||
|
func (d *Dao) SeasonCMS(c context.Context, sid int64) (season *model.SeasonCMS, err error) {
|
||
|
var row *xsql.Row
|
||
|
if row = d.db.QueryRow(c, _seasonCMS, sid); err != nil {
|
||
|
log.Error("d.db.QueryRow(%d) error(%v)", sid, err)
|
||
|
return
|
||
|
}
|
||
|
season = &model.SeasonCMS{}
|
||
|
// select id, cover, `desc`, title , upinfo, category, area, play_time, role, staff, total_num, style, status
|
||
|
if err = row.Scan(&season.SeasonID, &season.Cover, &season.Desc, &season.Title, &season.UpInfo,
|
||
|
&season.Category, &season.Area, &season.Playtime, &season.Role, &season.Staff, &season.TotalNum,
|
||
|
&season.Style, &season.OriginName, &season.Alias, &season.PayStatus); err != nil {
|
||
|
if err == sql.ErrNoRows {
|
||
|
err = nil
|
||
|
season = nil
|
||
|
} else {
|
||
|
log.Error("row.Scan(sid %d) error(%v)", sid, err)
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
// add newest info
|
||
|
season.NewestEPID, season.NewestOrder, _ = d.NewestOrder(c, sid)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// EpCMS gets the fields that can be changed from tv-cms side to offer the TV APP
|
||
|
func (d *Dao) EpCMS(c context.Context, epid int64) (ep *model.EpCMS, err error) {
|
||
|
var row *xsql.Row
|
||
|
if row = d.db.QueryRow(c, _epCMS, epid); err != nil {
|
||
|
log.Error("d.db.QueryRow(%d) error(%v)", epid, err)
|
||
|
return
|
||
|
}
|
||
|
ep = &model.EpCMS{}
|
||
|
// select id, cover, `desc`, title , upinfo, category, area, play_time, role, staff, total_num, style
|
||
|
if err = row.Scan(&ep.EPID, &ep.Cover, &ep.Title, &ep.Subtitle, &ep.PayStatus); err != nil {
|
||
|
if err == sql.ErrNoRows {
|
||
|
err = nil
|
||
|
ep = nil
|
||
|
} else {
|
||
|
log.Error("row.Scan(sid %d) error(%v)", epid, err)
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
return
|
||
|
}
|