@@ -0,0 +1,120 @@
|
||||
package modulevideoser
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"91porn-server/common/stderr"
|
||||
"91porn-server/models/v/modulesectionmod"
|
||||
"91porn-server/models/v/modulevidmod"
|
||||
"91porn-server/models/v/vidmod"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
)
|
||||
|
||||
var (
|
||||
getModuleVideoByID = func(id primitive.ObjectID) (modulevidmod.SectionVideo, error) {
|
||||
videos, err := modulevidmod.Find(bson.M{"_id": id})
|
||||
if err != nil || len(videos) == 0 {
|
||||
return modulevidmod.SectionVideo{}, err
|
||||
}
|
||||
return videos[0], nil
|
||||
}
|
||||
getModuleSectionByID = modulesectionmod.GetBySectionByID
|
||||
updateModuleVideo = modulevidmod.UpdateOne
|
||||
syncVideoModuleID = func(videoID, moduleID primitive.ObjectID) error {
|
||||
_, err := vidmod.UpdateOneByID(videoID, bson.M{
|
||||
"mId": moduleID.Hex(),
|
||||
"updatedAt": time.Now(),
|
||||
})
|
||||
return err
|
||||
}
|
||||
)
|
||||
|
||||
func AddVideo(in *modulevidmod.SectionVideo) stderr.Code {
|
||||
section, err := modulesectionmod.GetBySectionByID(in.SectionID)
|
||||
if err != nil {
|
||||
return stderr.ErrDbQueryError
|
||||
}
|
||||
|
||||
if section.ID.IsZero() {
|
||||
return stderr.CodeEmptyData
|
||||
}
|
||||
mId := section.SubModuleID
|
||||
|
||||
videoInfo, err := vidmod.GetVideoInfo(in.VideoID.Hex())
|
||||
if err != nil {
|
||||
return stderr.ErrDbQueryError
|
||||
}
|
||||
|
||||
if videoInfo.ID.IsZero() {
|
||||
return stderr.CodeEmptyData
|
||||
}
|
||||
|
||||
update := bson.M{}
|
||||
update["mId"] = mId.Hex()
|
||||
update["updatedAt"] = time.Now()
|
||||
in.NewsType = videoInfo.NewsType // 冗余一个字段
|
||||
in.VideoReviewedAt = videoInfo.ReviewAt // 冗余审核时间,方便排序
|
||||
_, err = vidmod.UpdateOneByID(in.VideoID, update)
|
||||
if err != nil {
|
||||
return stderr.ErrDbUpdateError
|
||||
}
|
||||
|
||||
if err := modulevidmod.InsertOne(in); err != nil {
|
||||
return stderr.ErrDbInsertError
|
||||
}
|
||||
return stderr.Success
|
||||
}
|
||||
|
||||
// UpdateVideo 更新专题视频关系,并在移动专题时同步视频所属亚模块。
|
||||
func UpdateVideo(in *modulevidmod.EditSelector) stderr.Code {
|
||||
if in == nil {
|
||||
return stderr.ErrParamError
|
||||
}
|
||||
|
||||
hasID := in.ID != nil && !in.ID.IsZero()
|
||||
hasSectionAndVideo := in.SectionID != nil && !in.SectionID.IsZero() && in.VideoID != nil && !in.VideoID.IsZero()
|
||||
if !hasID && !hasSectionAndVideo {
|
||||
return stderr.ErrParamError
|
||||
}
|
||||
|
||||
// 只修改排序时不需要更新视频归属。
|
||||
if in.SectionID == nil || in.SectionID.IsZero() {
|
||||
if err := updateModuleVideo(in); err != nil {
|
||||
return stderr.ErrDbUpdateError
|
||||
}
|
||||
return stderr.Success
|
||||
}
|
||||
|
||||
var videoID primitive.ObjectID
|
||||
if in.VideoID != nil {
|
||||
videoID = *in.VideoID
|
||||
}
|
||||
if videoID.IsZero() {
|
||||
current, err := getModuleVideoByID(*in.ID)
|
||||
if err != nil {
|
||||
return stderr.ErrDbQueryError
|
||||
}
|
||||
if current.ID.IsZero() || current.VideoID.IsZero() {
|
||||
return stderr.CodeEmptyData
|
||||
}
|
||||
videoID = current.VideoID
|
||||
}
|
||||
|
||||
section, err := getModuleSectionByID(*in.SectionID)
|
||||
if err != nil {
|
||||
return stderr.ErrDbQueryError
|
||||
}
|
||||
if section.ID.IsZero() {
|
||||
return stderr.CodeEmptyData
|
||||
}
|
||||
|
||||
if err = updateModuleVideo(in); err != nil {
|
||||
return stderr.ErrDbUpdateError
|
||||
}
|
||||
if err = syncVideoModuleID(videoID, section.SubModuleID); err != nil {
|
||||
return stderr.ErrDbUpdateError
|
||||
}
|
||||
return stderr.Success
|
||||
}
|
||||
Reference in New Issue
Block a user