Files
huangguo_server/app/service/modulevideoser/modulevideo.go
T
rootandClaude Opus 5 8679200f41 Initial commit
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 13:57:10 +08:00

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
}