You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
4.1 KiB
143 lines
4.1 KiB
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 |
|
}
|
|
|