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 }