본문으로 건너뛰기

ReviewQueue

범용 검수 큐 — verdict enum + priority + age bonus 정렬 (콘� �츠/신고/환불/검수 모두)

상태

항목
Layercore
TierL1
Statusreleased
Version1.0.0
가격Free (free)
**카�
�고리**Infrastructure

개요

개요

ReviewQueue 는 multi-saas-kit 의 Layer 1 Core Plugin � 니다. 검수 워크플로 일반 패턴 — verdict enum + queue prioritizer — 을 도메인 무관 Pure 로 제공합니다.

분리선 (ADR-039)

ADR-039 사례 3 — 기존 ContentReview plugin (exam.how LessonReviewService 출처) 을 일반화. 'content' 한정 � � → 모든 검수 시나리오 (콘� �츠/신고/환불/회원가� 승인) 활용 가능.

변경: namespace App\Plugins\ContentReviewApp\Plugins\ReviewQueue, slug content-reviewreview-queue, layer domaincore. 코드 자체는 그대로.

핵심 컴포넌트

ReviewVerdict (enum)

  • APPROVED — 통과
  • NEEDS_FIX — 자동/수동 수정 필요
  • REJECTED — 폐기
  • PENDING — 미검수

메서드: isFinal() (approved/rejected), isApproved(), requiresAction().

ReviewQueuePrioritizer (Pure)

  • score($priority, $ageDays) — 가중치 + age bonus 합산
    • urgent=100, high=50, normal=10, low=1
    • age_days × 0.5 보너스 (오래된 항목 우선 처리)
  • sort($items) — 점수 높은 순 정렬 + score 필드 첨부

활용 시나리오

  • academy.how / exam.how: 콘� �츠 검수 (lesson/question 검수 큐)
  • commerce: 환불 요청 검수 큐
  • 게시판: 신고 처리 큐
  • 회원가� : 사� 자 인증 승인 큐
  • 보안: IP 차단 요청 큐

사용 예시

use App\Plugins\ReviewQueue\Services\ReviewQueuePrioritizer;
use App\Plugins\ReviewQueue\Enums\ReviewVerdict;

$priortizer = new ReviewQueuePrioritizer;
$sortedQueue = $priortizer->sort([
['id' => 1, 'priority' => 'urgent', 'age_days' => 2],
['id' => 2, 'priority' => 'normal', 'age_days' => 10],
['id' => 3, 'priority' => 'high', 'age_days' => 5],
]);
// → urgent(101) > high(52.5) > normal(15)

$verdict = ReviewVerdict::APPROVED;
if ($verdict->isFinal()) { /* lock the record */ }

출처

exam.how LessonReviewService 의 review verdict 분류 + queue 정렬 로직 추출 → ReviewQueue plugin 으로 일반화.

의존성

  • core: >=1.1.0

라이선스

MIT

데모


🛒 Plugin Store에서 보기: store.codebase.how/plugins/review-queue