Files
SkinbaseNova/app/Data/Moderation/ModerationResultData.php

89 lines
3.6 KiB
PHP

<?php
namespace App\Data\Moderation;
use App\Enums\ModerationStatus;
use App\Enums\ModerationSeverity;
class ModerationResultData
{
public function __construct(
public readonly int $score,
public readonly ModerationSeverity $severity,
public readonly ModerationStatus $status,
public readonly array $reasons,
public readonly array $matchedLinks,
public readonly array $matchedDomains,
public readonly array $matchedKeywords,
public readonly string $contentHash,
public readonly string $scannerVersion,
public readonly array $ruleHits = [],
public readonly ?string $contentHashNormalized = null,
public readonly ?string $groupKey = null,
public readonly ?int $userRiskScore = null,
public readonly bool $autoHideRecommended = false,
public readonly ?string $contentTargetType = null,
public readonly ?int $contentTargetId = null,
public readonly ?string $campaignKey = null,
public readonly ?int $clusterScore = null,
public readonly ?string $clusterReason = null,
public readonly ?string $policyName = null,
public readonly ?int $priorityScore = null,
public readonly ?string $reviewBucket = null,
public readonly ?string $escalationStatus = null,
public readonly ?string $aiProvider = null,
public readonly ?string $aiLabel = null,
public readonly ?string $aiSuggestedAction = null,
public readonly ?int $aiConfidence = null,
public readonly ?string $aiExplanation = null,
public readonly array $aiRawResponse = [],
public readonly array $scoreBreakdown = [],
) {}
public function isClean(): bool
{
return $this->severity === ModerationSeverity::Low && $this->score === 0;
}
public function isSuspicious(): bool
{
return $this->score >= app('config')->get('content_moderation.severity_thresholds.medium', 30);
}
public function toArray(): array
{
return [
'score' => $this->score,
'severity' => $this->severity->value,
'status' => $this->status->value,
'reasons' => $this->reasons,
'matched_links' => $this->matchedLinks,
'matched_domains' => $this->matchedDomains,
'matched_keywords' => $this->matchedKeywords,
'content_hash' => $this->contentHash,
'scanner_version' => $this->scannerVersion,
'rule_hits' => $this->ruleHits,
'content_hash_normalized' => $this->contentHashNormalized,
'group_key' => $this->groupKey,
'user_risk_score' => $this->userRiskScore,
'auto_hide_recommended' => $this->autoHideRecommended,
'content_target_type' => $this->contentTargetType,
'content_target_id' => $this->contentTargetId,
'campaign_key' => $this->campaignKey,
'cluster_score' => $this->clusterScore,
'cluster_reason' => $this->clusterReason,
'policy_name' => $this->policyName,
'priority_score' => $this->priorityScore,
'review_bucket' => $this->reviewBucket,
'escalation_status' => $this->escalationStatus,
'ai_provider' => $this->aiProvider,
'ai_label' => $this->aiLabel,
'ai_suggested_action' => $this->aiSuggestedAction,
'ai_confidence' => $this->aiConfidence,
'ai_explanation' => $this->aiExplanation,
'ai_raw_response' => $this->aiRawResponse,
'score_breakdown' => $this->scoreBreakdown,
];
}
}