144 lines
4.1 KiB
Go
144 lines
4.1 KiB
Go
package dao
|
|
|
|
import (
|
|
"context"
|
|
"encoding/hex"
|
|
"fmt"
|
|
"strings"
|
|
"time"
|
|
|
|
"go-common/app/job/bbq/recall/internal/model"
|
|
"go-common/app/job/bbq/recall/proto"
|
|
"go-common/app/job/bbq/recall/proto/quality"
|
|
"go-common/library/log"
|
|
|
|
"github.com/golang/snappy"
|
|
)
|
|
|
|
const (
|
|
// _fetchVideo = "select `id`, `title`, `content`, `mid`, `avid`, `cid`, `pubtime`, `ctime`, `mtime`, `duration`, `state`, `tid`, `sub_tid` from video where pubtime > ? limit ?, ?;"
|
|
_fetchVideo = "select `svid`, `title`, `content`, `mid`, `avid`, `cid`, `pubtime`, `ctime`, `mtime`, `duration`, `state`, `tid`, `sub_tid` from video limit ?, ?;"
|
|
_fetchVideoTag = "select `id`, `name`, `type` from `tag` where `id` = ? and `status` = 1;"
|
|
_fetchVideoTagAll = "select `id`, `name`, `type` from `tag` where `status` = 1;"
|
|
_fetchVideoTextTag = "select `tag` from `video_repository` where `svid` = ? limit 1;"
|
|
_queryVideoQuality = "select `stat_info` from `video_forward_index_stat_info` where `svid` = ?;"
|
|
_fetchNewIncomeVideo = "select `svid` from `video` where ctime > ? and state in (%s);"
|
|
)
|
|
|
|
// FetchVideoInfo .
|
|
func (d *Dao) FetchVideoInfo(c context.Context, offset, size int) (result []*model.Video, err error) {
|
|
// rows, err := d.db.Query(c, _fetchVideo, ptime.Format("2006-01-02 15:04:05"), offset, size)
|
|
rows, err := d.db.Query(c, _fetchVideo, offset, size)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
for rows.Next() {
|
|
tmp := &model.Video{}
|
|
if err = rows.Scan(&tmp.SVID, &tmp.Title, &tmp.Content, &tmp.MID, &tmp.AVID, &tmp.CID, &tmp.PubTime, &tmp.CTime, &tmp.MTime, &tmp.Duration, &tmp.State, &tmp.TID, &tmp.SubTID); err != nil {
|
|
log.Error("FetchVideoInfo: %v", err)
|
|
return nil, err
|
|
}
|
|
result = append(result, tmp)
|
|
}
|
|
|
|
return result, nil
|
|
}
|
|
|
|
// FetchVideoTagAll .
|
|
func (d *Dao) FetchVideoTagAll(c context.Context) (result []*proto.Tag, err error) {
|
|
result = make([]*proto.Tag, 0)
|
|
rows, err := d.db.Query(c, _fetchVideoTagAll)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
for rows.Next() {
|
|
tmp := new(proto.Tag)
|
|
if err = rows.Scan(&tmp.TagID, &tmp.TagName, &tmp.TagType); err != nil {
|
|
log.Error("FetchVideoTag: %v", err)
|
|
continue
|
|
}
|
|
result = append(result, tmp)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// FetchVideoTag .
|
|
func (d *Dao) FetchVideoTag(c context.Context, tid int32) (result *proto.Tag, err error) {
|
|
row := d.db.QueryRow(c, _fetchVideoTag, tid)
|
|
|
|
result = new(proto.Tag)
|
|
if err = row.Scan(&result.TagID, &result.TagName, &result.TagType); err != nil {
|
|
log.Error("FetchVideoTag: %v", err)
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// FetchVideoTextTag .
|
|
func (d *Dao) FetchVideoTextTag(c context.Context, svid int64) (result []string, err error) {
|
|
row := d.dbCms.QueryRow(c, _fetchVideoTextTag, svid)
|
|
var tags string
|
|
if err = row.Scan(&tags); err != nil {
|
|
log.Errorv(c, log.KV("log", "_fetchVideoTextTag failed"), log.KV("error", err), log.KV("svid", svid))
|
|
return
|
|
}
|
|
|
|
result = strings.Split(tags, ",")
|
|
return
|
|
}
|
|
|
|
// FetchVideoQuality .
|
|
func (d *Dao) FetchVideoQuality(c context.Context, svid uint64) (result *quality.VideoQuality, err error) {
|
|
var raw string
|
|
row := d.dbOffline.QueryRow(c, _queryVideoQuality, svid)
|
|
row.Scan(&raw)
|
|
if raw == "" {
|
|
return
|
|
}
|
|
|
|
trimed := strings.Trim(raw, "\n")
|
|
hexDst, err := hex.DecodeString(trimed)
|
|
if err != nil {
|
|
log.Error("FetchVideoQuality: %v src[%s] raw[%s]", err, trimed, trimed)
|
|
return
|
|
}
|
|
|
|
snappyDst, err := snappy.Decode(nil, hexDst)
|
|
if err != nil {
|
|
log.Error("FetchVideoQuality: %v src[%s] raw[%s]", err, string(hexDst), trimed)
|
|
return
|
|
}
|
|
|
|
result = &quality.VideoQuality{}
|
|
result.Unmarshal(snappyDst)
|
|
if err != nil {
|
|
log.Error("FetchVideoQuality: %v src[%s] raw[%s]", err, snappyDst, trimed)
|
|
}
|
|
return
|
|
}
|
|
|
|
// FetchNewincomeVideo .
|
|
func (d *Dao) FetchNewincomeVideo() (res []int64, err error) {
|
|
duration, _ := time.ParseDuration("-24h")
|
|
today := time.Now().Add(duration).Format("2006-01-02")
|
|
_query := fmt.Sprintf(_fetchNewIncomeVideo, strings.Join(model.RecommendVideoState, ","))
|
|
row, err := d.db.Query(context.Background(), _query, today)
|
|
if err != nil {
|
|
return
|
|
}
|
|
res = make([]int64, 0)
|
|
for row.Next() {
|
|
var tmp int64
|
|
if err = row.Scan(&tmp); err != nil {
|
|
return
|
|
}
|
|
res = append(res, tmp)
|
|
}
|
|
|
|
return
|
|
}
|