81 lines
2.8 KiB
Go
81 lines
2.8 KiB
Go
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
|
|
}
|