init: hgmj server initial commit
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,191 @@
|
||||
package reportser
|
||||
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"91jd-server/common/dataReport"
|
||||
"91jd-server/common/db"
|
||||
"91jd-server/common/log"
|
||||
"91jd-server/middleware/ua"
|
||||
"91jd-server/models/v/moduleconfmod"
|
||||
"91jd-server/models/v/usermod"
|
||||
"91jd-server/models/v/vidmod"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
)
|
||||
|
||||
type videoMeta struct {
|
||||
mediaID string
|
||||
videoTypeID string
|
||||
videoTypeName string
|
||||
videoContentType string
|
||||
}
|
||||
|
||||
func (m videoMeta) toEventCore(videoID, title string, recommendTraceID string) dataReport.VideoEventCore {
|
||||
return dataReport.VideoEventCore{
|
||||
MediaID: m.mediaID,
|
||||
VideoID: videoID,
|
||||
VideoTitle: title,
|
||||
VideoTypeID: m.videoTypeID,
|
||||
VideoTypeName: m.videoTypeName,
|
||||
VideoContentType: m.videoContentType,
|
||||
RecommendTraceID: recommendTraceID,
|
||||
}
|
||||
}
|
||||
|
||||
func ReportVideoLikeEvent(t *db.MongoTool, user *usermod.User, ua ua.UA, ip string, video *vidmod.VideoModel, cancel bool) error {
|
||||
if user == nil || video == nil || video.ID.IsZero() {
|
||||
return nil
|
||||
}
|
||||
flag := int64(1)
|
||||
if cancel {
|
||||
flag = 2
|
||||
}
|
||||
meta := extractVideoMeta(video)
|
||||
event := dataReport.NewCommonField(dataReport.GenerateGlobalEventID(), dataReport.EventTypeVideoLike, user.UID, user.DistrictCode, ua, ip)
|
||||
event.Payload = jsonRawMessage(&dataReport.VideoLikeEvent{
|
||||
VideoEventCore: meta.toEventCore(video.ID.Hex(), video.Title, ""),
|
||||
Flag: jsonNumber(flag),
|
||||
})
|
||||
return persistEvent(t, event)
|
||||
}
|
||||
|
||||
func ReportVideoCollectEvent(t *db.MongoTool, user *usermod.User, ua ua.UA, ip string, video *vidmod.VideoModel, cancel bool) error {
|
||||
if user == nil || video == nil || video.ID.IsZero() {
|
||||
return nil
|
||||
}
|
||||
flag := int64(1)
|
||||
if cancel {
|
||||
flag = 2
|
||||
}
|
||||
meta := extractVideoMeta(video)
|
||||
event := dataReport.NewCommonField(dataReport.GenerateGlobalEventID(), dataReport.EventTypeVideoCollect, user.UID, user.DistrictCode, ua, ip)
|
||||
event.Payload = jsonRawMessage(&dataReport.VideoCollectEvent{
|
||||
VideoEventCore: meta.toEventCore(video.ID.Hex(), video.Title, ""),
|
||||
Flag: jsonNumber(flag),
|
||||
})
|
||||
return persistEvent(t, event)
|
||||
}
|
||||
|
||||
func ReportVideoCommentEvent(t *db.MongoTool, user *usermod.User, ua ua.UA, ip string, video *vidmod.VideoModel, comment string) error {
|
||||
if user == nil || video == nil || video.ID.IsZero() {
|
||||
return nil
|
||||
}
|
||||
meta := extractVideoMeta(video)
|
||||
event := dataReport.NewCommonField(dataReport.GenerateGlobalEventID(), dataReport.EventTypeVideoComment, user.UID, user.DistrictCode, ua, ip)
|
||||
event.Payload = jsonRawMessage(&dataReport.VideoCommentEvent{
|
||||
VideoEventCore: meta.toEventCore(video.ID.Hex(), video.Title, ""),
|
||||
CommentContent: comment,
|
||||
})
|
||||
return persistEvent(t, event)
|
||||
}
|
||||
|
||||
func ReportVideoStatusChangeEvent(video *vidmod.VideoModel, flag int64) {
|
||||
if video == nil || video.ID.IsZero() || flag == 0 {
|
||||
return
|
||||
}
|
||||
user, err := usermod.FindUserByUID(video.PublisherID)
|
||||
if err != nil || user == nil {
|
||||
return
|
||||
}
|
||||
meta := extractVideoMeta(video)
|
||||
uaInfo := ua.UA{SysType: "PC"}
|
||||
event := dataReport.NewCommonField(dataReport.GenerateGlobalEventID(), dataReport.EventTypeVideoStatusChange, user.UID, user.DistrictCode, uaInfo, "")
|
||||
event.Payload = jsonRawMessage(&dataReport.VideoStatusChangeEvent{
|
||||
MediaID: meta.mediaID,
|
||||
VideoID: video.ID.Hex(),
|
||||
VideoTitle: video.Title,
|
||||
VideoTypeID: meta.videoTypeID,
|
||||
VideoTypeName: meta.videoTypeName,
|
||||
Flag: jsonNumber(flag),
|
||||
})
|
||||
if err := persistEvent(nil, event); err != nil {
|
||||
log.Error("ReportVideoStatusChangeEvent fail", log.Any("video", video.ID.Hex()), log.E(err))
|
||||
}
|
||||
}
|
||||
|
||||
func ReportVideoStatusChangeByIDs(ids []primitive.ObjectID, flag int64) {
|
||||
if len(ids) == 0 || flag == 0 {
|
||||
return
|
||||
}
|
||||
videos, err := vidmod.GetVideoListByIDsNoStatus(ids)
|
||||
if err != nil {
|
||||
log.Error("ReportVideoStatusChangeByIDs fail", log.E(err))
|
||||
return
|
||||
}
|
||||
for _, video := range videos {
|
||||
if video == nil || video.ID.IsZero() {
|
||||
continue
|
||||
}
|
||||
videoCopy := *video
|
||||
ReportVideoStatusChangeEvent(&videoCopy, flag)
|
||||
}
|
||||
}
|
||||
|
||||
func ReportVideoStatusByStatus(ids []primitive.ObjectID, status int) {
|
||||
if flag := VideoStatusFlag(status); flag != 0 {
|
||||
ReportVideoStatusChangeByIDs(ids, flag)
|
||||
}
|
||||
}
|
||||
|
||||
func extractVideoMeta(video *vidmod.VideoModel) videoMeta {
|
||||
if video == nil {
|
||||
return videoMeta{}
|
||||
}
|
||||
meta := videoMeta{
|
||||
mediaID: videoMediaID(video),
|
||||
videoContentType: resolveVideoContentType(video),
|
||||
}
|
||||
if strings.TrimSpace(video.MID) != "" {
|
||||
oid, err := primitive.ObjectIDFromHex(video.MID)
|
||||
if err == nil {
|
||||
module, _ := moduleconfmod.GetByID(oid)
|
||||
if !module.ID.IsZero() {
|
||||
meta.videoTypeID = module.ID.Hex()
|
||||
meta.videoTypeName = module.ModuleName
|
||||
}
|
||||
}
|
||||
}
|
||||
if meta.videoTypeID == "" || meta.videoTypeName == "" {
|
||||
meta.videoTypeID = "default"
|
||||
meta.videoTypeName = "默认分类"
|
||||
}
|
||||
return meta
|
||||
}
|
||||
|
||||
func videoMediaID(video *vidmod.VideoModel) string {
|
||||
if video == nil {
|
||||
return ""
|
||||
}
|
||||
if strings.EqualFold(strings.TrimSpace(video.Via), "laosiji") {
|
||||
return strings.TrimSpace(video.SourceID)
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func resolveVideoContentType(video *vidmod.VideoModel) string {
|
||||
if video == nil {
|
||||
return ""
|
||||
}
|
||||
switch video.NewsType {
|
||||
case vidmod.SHORT:
|
||||
return "short_video"
|
||||
default:
|
||||
return "video"
|
||||
}
|
||||
}
|
||||
|
||||
func VideoStatusFlag(status int) int64 {
|
||||
switch status {
|
||||
case vidmod.OnlinePass:
|
||||
return 1
|
||||
case vidmod.OffShelf, vidmod.IsDeleted:
|
||||
return 2
|
||||
case vidmod.CheckPass, vidmod.Free:
|
||||
return 3
|
||||
case vidmod.CheckFailure:
|
||||
return 4
|
||||
default:
|
||||
return 0
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user