Initial commit

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-15 13:57:10 +08:00
co-authored by Claude Opus 5
commit 8679200f41
1897 changed files with 257900 additions and 0 deletions
+80
View File
@@ -0,0 +1,80 @@
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
}