go-common/app/job/main/tv/model/ugc/databus.go

139 lines
3.9 KiB
Go
Raw Normal View History

2019-04-22 10:49:16 +00:00
package ugc
import (
"time"
arcmdl "go-common/app/service/main/archive/api"
)
// ArcMsg reprensents the archive Notify-T message structure
type ArcMsg struct {
Action string `json:"action"`
Table string `json:"table"`
Old *ArchDatabus `json:"old"`
New *ArchDatabus `json:"new"`
}
// ArchDatabus model ( we pick the fields that we need )
type ArchDatabus struct {
Aid int64 `json:"aid"`
Mid int64 `json:"mid"`
TypeID int32 `json:"typeid"`
Videos int64 `json:"videos"`
Duration int `json:"duration"`
Title string `json:"title"`
Cover string `json:"cover"`
Content string `json:"content"`
Attribute int32 `json:"attribute"`
Copyright int32 `json:"copyright"`
State int32 `json:"state"`
Access int `json:"access"`
PubTime string `json:"pubtime"`
}
// VideoDiff reprensents the result of videos comparison
type VideoDiff struct {
Aid int64
Equal []int64 // totally equal
New []int64 // new added videos
Updated []*arcmdl.Page
Removed []int64
}
// DatabusVideo is the struct of message for the modification of ugc_Video
type DatabusVideo struct {
New *MarkVideo `json:"new"`
Old *MarkVideo `json:"old"`
}
// DatabusArc is the struct of message for the modification of ugc_archive
type DatabusArc struct {
Old *MarkArc `json:"old"`
New *MarkArc `json:"new"`
}
// MarkVideo contains the main fields that we want to pick up from databus message
type MarkVideo struct {
Mark int `json:"mark"`
Deleted int `json:"deleted"`
CID int64 `json:"cid"`
AID int64 `json:"aid"`
EPTitle string `json:"eptitle"`
IndexOrder int `json:"index_order"`
Valid int `json:"valid"`
Result int `json:"result"`
Submit int `json:"submit"`
Transcoded int `json:"transcoded"`
Retry int64 `json:"retry"`
}
// MarkArc contains the main fields that we want to pick up from databus message
type MarkArc struct {
ID int `json:"id"`
AID int64 `json:"aid"`
MID int `json:"mid"`
TypeID int32 `json:"typeid"`
Videos int `json:"videos"`
Title string `json:"title"`
Cover string `json:"cover"`
Content string `json:"content"`
Duration int `json:"duration"`
Copyright int `json:"copyright"`
Pubtime string `json:"pubtime"`
Ctime string `json:"ctime"`
Mtime string `json:"mtime"`
State int `json:"state"`
Manual int `json:"manual"`
Valid int `json:"valid"`
Submit int `json:"submit"`
Retry int `json:"retry"`
Result int `json:"result"`
Deleted int `json:"deleted"`
InjectTime string `json:"inject_time"`
Reason string `json:"reason"`
}
// IsPass returns whether the arc is able to play
func (a MarkArc) IsPass() bool {
return a.Deleted == 0 && a.Valid == 1 && a.Result == 1
}
// CidReq reprensents the structure for reporting cid
type CidReq struct {
CID int64 `json:"cid"`
}
// CidResp represents the structure of cid reporting API's response
type CidResp struct {
Code int `json:"code"`
Message string `json:"message"`
}
// ToReport distinguishes whether the CID need to be reported to video cloud
func (vm *MarkVideo) ToReport(criCID int64) bool {
return vm.Deleted == 0 && vm.Mark == 0 && vm.CID > criCID
}
// ToAudit distinguishes whether the CID need to be reported to the license owner
func (vm *MarkVideo) ToAudit(criCID int64) bool {
return vm.Submit == 1 && (vm.Transcoded == 1 || vm.CID <= criCID) && vm.Retry < time.Now().Unix() && vm.Deleted == 0
}
// CanPlay tells whether a video can play or not
func (vm *MarkVideo) CanPlay() bool {
return vm.Result == 1 && vm.Deleted == 0 && vm.Valid == 1
}
// ToCMS transforms a databus video to CMS info
func (vm *MarkVideo) ToCMS() *VideoCMS {
return &VideoCMS{
CID: int(vm.CID),
Title: vm.EPTitle,
AID: int(vm.AID),
IndexOrder: vm.IndexOrder,
Valid: vm.Valid,
Deleted: vm.Deleted,
Result: vm.Result,
}
}