Glowb Dev Docs
SaaS API피드백 관리자 승인 (v4)

제출 상태 변경

관리자가 검수 라운드의 제출 상태를 원하는 상태로 바꿉니다. 되돌리기와 기업 결정 변경을 모두 처리하며 피드백은 지우지 않습니다.

제출 상태 변경

검수 라운드(스크립트 = 1, 영상 = 2)의 제출 상태를 목표 상태로 바꿉니다. 검수 중인 제출을 제출 전으로 되돌리거나, 기업이 고른 결정(재제출 요청·승인·피드백 포함 승인)을 다른 결정으로 바꿀 때 씁니다. 바꿀 수 있는 목표와 막힌 사유는 제출 상태 조회로 먼저 확인합니다.

ADMIN 권한 필요 (ROLE_ADMIN). 아니면 차단.

HTTP 요청

POST /ai/admin/feedback-approvals/{reviewId}/state
Authorization: Bearer {access_token}
Content-Type: application/json

Path Parameters

파라미터타입필수설명
reviewIdlong예검수 라운드 ID

Request Body

{
  "target": "APPROVED_WITH_FEEDBACK",
  "notifyCreator": true,
  "reason": "기업 요청: 피드백 없이 재제출 요청을 잘못 누름"
}

영상 라운드를 승인·피드백 포함 승인으로 바꿀 때는 업로드 일정을 함께 보냅니다(저장된 일정이 있으면 생략 가능).

{
  "target": "APPROVED",
  "notifyCreator": true,
  "reason": "기업 요청: 재제출 요청 취소 후 승인",
  "uploadDate": {
    "uploadDateType": "CANDIDATE",
    "candidateDates": ["2026-10-06T18:00:00", "2026-10-07T18:00:00", "2026-10-08T18:00:00"]
  }
}
필드타입필수설명
targetstring예BEFORE_SUBMISSION / UNDER_REVIEW / GATE_PENDING / RESUBMIT_REQUESTED / APPROVED / APPROVED_WITH_FEEDBACK
notifyCreatorboolean아니오크리에이터 메일 발송 여부. 생략하면 보내지 않습니다. 아래 표의 경우에만 쓰입니다
reasonstring아니오사유. 히스토리와 슬랙 알림에 함께 남습니다
uploadDateobject조건부업로드 일정. 영상 라운드에서 APPROVED / APPROVED_WITH_FEEDBACK로 바꿀 때 받습니다. 저장된 일정이 없으면 필수, 있으면 선택(생략하면 저장된 일정 그대로, 보내면 덮어쓰기). 제출 상태 조회의 hasUploadDate·options[].requiresUploadDate로 확인합니다. 그 외 목표에서는 무시합니다
uploadDate.uploadDateTypestring예OPTIMAL(3일 이내 최적일) / ASAP(가능한 빨리) / CANDIDATE(후보일 지정)
uploadDate.uploadDatedatetime아니오업로드 예정일. 생략하면 OPTIMAL은 지금+3일, ASAP은 지금
uploadDate.candidateDatesdatetime[]조건부후보일 목록. CANDIDATE면 필수

동작

어느 상태에서든 먼저 기업 검수 대기로 되돌린 뒤, 목표 상태로 정상 흐름을 다시 태웁니다. 그래서 '승인 → 재제출 요청', '재제출 요청 → 승인', '승인 ↔ 피드백 포함 승인' 같은 결정 변경도 같은 방식으로 처리됩니다. 피드백은 어느 경로에서도 삭제하지 않습니다.

1단계 — 기업 검수 대기로 되돌리기

현재 상태되돌리는 내용
검수의 검수 대기게이트 해제(adminApprovalStatus를 게이트 이전 값으로: 첫 제출 NONE, 수정 차수 APPROVED), approvedWithFeedback = false
재제출 요청awaitingRevision = false. 라운드 첫 재제출 요청이었다면 크리에이터 개인 일정의 재제출 지연 사유 제거
승인(스크립트)진행 단계 SECOND_REVIEW → FIRST_REVIEW. 스크립트 승인 때 생긴 빈 2차(영상) 라운드를 삭제해 승인 전 모습으로 되돌립니다(재승인하면 다시 생성). 2차에 제출물·임시저장이 있으면 막힙니다
승인(영상)uploadApproved = false, 최종제출물 업로드일·후보일·업로드 방식 초기화, 진행 단계 UPLOAD_SETTLEMENT → SECOND_REVIEW. 단 목표가 APPROVED / APPROVED_WITH_FEEDBACK(승인 ↔ 피드백 포함 승인)이면 업로드 일정은 지우지 않습니다

라운드는 REVIEWING, 제출된 제출물은 REVIEWING이 됩니다.

2단계 — 목표 상태로 진행

목표처리크리에이터 메일 (notifyCreator = true)
UNDER_REVIEW이번 차수 피드백을 기업 임시저장으로 돌립니다(크리에이터에게 숨김, 기업이 다시 수정·제출)없음
BEFORE_SUBMISSION이번 차수 피드백을 기업 임시저장으로 돌린 뒤 직전 제출을 되돌립니다. 첫 제출이면 제출물 미제출·라운드 PENDING, 수정본이면 라운드 REJECTED + 수정 차수 -1 + awaitingRevision = true(직전 차수 피드백 달린 제출물만 REJECTED)없음
RESUBMIT_REQUESTED이번 차수 피드백이 달린 제출물을 REJECTED, 피드백 해결 표시 해제, 정상 재제출 릴리즈(재제출 마감·지연 사유·일정)스크립트 재제출 요청 / 영상 재제출 요청
APPROVED정상 승인 릴리즈(2차 라운드·일정·진행 단계, 영상이면 업로드 허용). 영상은 uploadDate를 보냈으면 이어서 업로드 일정까지 저장하고(최종제출물 업로드 방식·업로드일·후보일 덮어쓰기, 업로드 허용일 재산정), 생략했으면 저장된 일정을 그대로 씁니다스크립트 승인. 영상은 포스팅 허용 안내 1통(보낸 일정 또는 저장된 일정 기준)
APPROVED_WITH_FEEDBACKapprovedWithFeedback = true로 정상 승인 릴리즈. 영상은 위와 같이 업로드 일정까지 저장스크립트 승인(피드백 포함). 영상은 위와 같음
GATE_PENDING이미 확정된 기업 결정을 다시 검수의 검수 대기로 걸어 둡니다. adminApprovalStatus = PENDING, 결정 종류는 유지(되돌리기 전이 승인·피드백 포함 승인이면 approvedWithFeedback = true, 재제출 요청이면 false), 이번 차수 피드백의 관리자 판단을 PENDING으로 초기화 → 크리에이터 화면에서 피드백이 숨겨지고 대기 목록에 다시 뜹니다. 관리자는 건별 승인/거절로 다시 결정합니다없음. 이후 검수의 검수 결정 시점에 정상 흐름대로 나갑니다

notifyCreator가 false(또는 생략)면 위 메일은 하나도 나가지 않습니다 — 영상 승인 시 업로드 일정을 저장해도 포스팅 허용 안내가 나가지 않습니다. 상태 변경 자체는 메일을 보내지 않습니다(캠페인 알리미 슬랙만 매번 발송).

영상 승인과 업로드 일정 저장은 한 트랜잭션입니다. 업로드 일정이 잘못되면(예: CANDIDATE인데 후보일 없음) 승인까지 통째로 되돌아갑니다. 운영팀 후보일 안내 메일은 보내지 않습니다(관리자가 직접 정한 일정). 업로드 일정만 따로 바꿀 때는 관리자 업로드 일정 변경 API를 씁니다.

검수의 검수 대기에서 RESUBMIT_REQUESTED / APPROVED / APPROVED_WITH_FEEDBACK로 바꾸면 관리자가 결정을 바로 확정한 것으로 보고 게이트를 통과 처리합니다(adminApprovalStatus = APPROVED, 이번 차수 피드백 관리자 판단 APPROVED).

  • 수정본 제출을 BEFORE_SUBMISSION으로 되돌리면 결과는 재제출 요청 상태입니다. 응답의 toState로 실제 결과를 확인하세요.
  • 이미 크리에이터에게 나간 메일·알림은 회수되지 않습니다.
  • 막히는 조건은 제출 상태 조회와 같습니다. 같은 상태로의 변경도 거부합니다.

응답

성공 응답 (200)

{
  "status": 200,
  "code": null,
  "message": "처리 완료",
  "data": {
    "reviewId": 1084,
    "reviewRound": 2,
    "fromState": "RESUBMIT_REQUESTED",
    "toState": "APPROVED_WITH_FEEDBACK",
    "reviewStatus": "APPROVED",
    "adminApprovalStatus": "APPROVED",
    "approvedWithFeedback": true,
    "awaitingRevision": false,
    "currentRevisionNo": 1,
    "creatorNotified": false
  }
}
필드타입설명
fromStatestring변경 전 상태
toStatestring변경 후 실제 상태
reviewStatusstring처리 후 라운드 상태
adminApprovalStatusstring처리 후 검수의 검수 상태
approvedWithFeedbackboolean피드백 포함 승인 여부
awaitingRevisionboolean수정본 대기 여부
currentRevisionNoint현재 수정 차수
creatorNotifiedboolean크리에이터 메일 발송 여부

에러 응답

거부는 HTTP 200에 body status: 404, code: INVALID_DATA, message에 사유가 담겨 옵니다. 관리자가 아니면 HTTP 403입니다.

body statuscode상황
404INVALID_DATA검수 라운드 없음, target 누락
404INVALID_DATA영상 승인인데 uploadDate도 저장된 일정도 없음 — "영상 승인에는 업로드 일정(uploadDate)이 필요합니다."
404INVALID_DATA업로드 일정 값 오류 — "CANDIDATE 타입인 경우 후보 날짜가 필요합니다."
404INVALID_DATA이미 목표 상태
404INVALID_DATA막힌 목표 (크리에이터 제출 없음 / 2차 제출물·임시저장 있음 / 최종제출물 제출됨 / 보낼 피드백 없음 / 기업 결정 없음)

기록·알림

  • 히스토리에 actor = ADMIN, action = OVERRIDE로 "제출 상태 변경: 이전 → 이후"가 한 줄 남습니다. 같은 관리자가 연달아 바꿔도 이력 조회에는 변경마다 한 줄씩 보입니다(다른 행위처럼 연속 블록으로 접지 않음).
  • 캠페인 알리미 슬랙 채널로 [관리자 제출 상태 변경] 알림(캠페인·크리에이터·라운드·변경 내용·사유·처리자)이 나갑니다. 슬랙 발송 실패는 상태 변경을 되돌리지 않습니다.

On this page