package contentreviewser import ( "fmt" "91porn-server/models/v/contentreviewmod" "91porn-server/models/v/mediacontentmod" "91porn-server/models/v/mediamod" "91porn-server/models/v/vidmod" "go.mongodb.org/mongo-driver/bson/primitive" ) // ApplyResolution 把命中记录里管理员提交的修改写回到对应数据源 // 按 TargetType 分发: // // VIDEO → vidmod.UpdateForReview(title, content, richText) // ACG_MEDIA → mediamod.UpdateForReview(title, summary) // ACG_CONTENT → mediacontentmod.UpdateForReview(name, text) // // 该函数不修改 issue 自身的 resolveStatus;调用方在写回成功后再调 ApproveIssue func ApplyResolution(issue *contentreviewmod.ReviewIssue) error { switch issue.TargetType { case contentreviewmod.IssueTargetVideo: return vidmod.UpdateForReview( issue.TargetID, issue.SubmittedTitle, issue.SubmittedContent, issue.SubmittedRichText, ) case contentreviewmod.IssueTargetACGMedia: return mediamod.UpdateForReview( issue.TargetID, issue.SubmittedTitle, issue.SubmittedContent, ) case contentreviewmod.IssueTargetACGContent: return mediacontentmod.UpdateForReview( issue.TargetID, issue.SubmittedTitle, issue.SubmittedContent, ) default: return fmt.Errorf("unsupported targetType: %s", issue.TargetType) } } // ApplyOffShelfBatch 按 TargetType 分组把命中目标批量下架: // // VIDEO → vidmod.OffShelfManyForReview(TargetIDs) 视频置为 OffShelf(5) // ACG_MEDIA → mediamod.OffShelfManyForReview(TargetIDs) Media 置为 status=0 // ACG_CONTENT → mediacontentmod.OffShelfManyForReview(TargetIDs) 章节置为 isActive=false // // 每个类型一次 UpdateMany;遇到未知 TargetType 直接返回错误,整批回滚交给调用方语义处理。 // 该函数不修改 issue 自身 resolveStatus;调用方下架成功后再调 BatchOffShelfResolveIssues func ApplyOffShelfBatch(issues []*contentreviewmod.ReviewIssue) error { var videoIDs, mediaIDs, contentIDs []primitive.ObjectID for _, iss := range issues { switch iss.TargetType { case contentreviewmod.IssueTargetVideo: videoIDs = append(videoIDs, iss.TargetID) case contentreviewmod.IssueTargetACGMedia: mediaIDs = append(mediaIDs, iss.TargetID) case contentreviewmod.IssueTargetACGContent: contentIDs = append(contentIDs, iss.TargetID) default: return fmt.Errorf("unsupported targetType: %s (issueId=%s)", iss.TargetType, iss.ID.Hex()) } } if err := vidmod.OffShelfManyForReview(videoIDs); err != nil { return fmt.Errorf("offshelf videos fail: %w", err) } if err := mediamod.OffShelfManyForReview(mediaIDs); err != nil { return fmt.Errorf("offshelf media fail: %w", err) } if err := mediacontentmod.OffShelfManyForReview(contentIDs); err != nil { return fmt.Errorf("offshelf media content fail: %w", err) } return nil }