121 lines
3.0 KiB
Go
121 lines
3.0 KiB
Go
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
|
|
}
|