Admin APIAdmin Campaign API
POST /ai/admin/campaigns/{campaignNo}/terminate
캠페인 강제 종료 (관리자 전용)
캠페인 강제 종료
진행 중인 캠페인을 관리자 권한으로 강제 종료합니다. 계약 조항에 따라 최초 입금액의 20%를 착수금으로 귀속시키고, 잔여 금액을 기업 글로벌 크레딧으로 환급합니다.
본 API는 관리자 전용입니다. 진행 중인 신청/계약/콘텐츠 데이터는 그대로 유지되며, 캠페인 단계만 CAMPAIGN_COMPLETED로 전환됩니다. 별도의 종료 사유 필드는 기록되지 않습니다.
HTTP 요청
POST /ai/admin/campaigns/{campaignNo}/terminate
Authorization: Bearer {access_token}요청 본문은 없습니다. 처리자(adminId)는 JWT의 인증 컨텍스트에서 자동으로 추출됩니다.
Path Parameters
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
campaignNo | Integer | 예 | 캠페인 번호 (SaaS 이후 캠페인만 지원) |
처리 흐름
- 유효성 검증
- 캠페인 존재 확인
- 레거시 캠페인(SaaS 이전) 거부
- 이미
CAMPAIGN_COMPLETED상태인 캠페인 거부
- 착수금 귀속 계산 —
최초 CAMPAIGN_DEPOSIT 입금액 × 20% - LOCKED 예산 전부 해제 —
TB_CAMPAIGN_BUDGET의 LOCKED 행을 UNLOCKED로 변경 - 환급금 계산 —
max(0, 총 입금액 − 착수금) - 회계 기록
CAMPAIGN_FORFEIT트랜잭션 (회계 마커, 잔액 변동 없음)- 환급금이 양수일 때만
CAMPAIGN_REFUND트랜잭션 + 기업 크레딧 증가
- 상태 전환 —
campaign_sub_step = CAMPAIGN_COMPLETED,campaign_completed_at = 현재 시각(최초 전환 시에만) - 슬랙 알림 발송 — 실패해도 트랜잭션에는 영향 없음
응답
성공 응답 (200 OK)
{
"status": 200,
"code": null,
"message": "캠페인이 강제 종료되었습니다.",
"data": {
"collabNo": 1234,
"initialDeposit": 5000000,
"totalBudget": 5500000,
"forfeitAmount": 1000000,
"refundAmount": 4500000,
"unlockedBudgetCount": 3,
"remainCreditAfter": 4800000
}
}응답 필드
| 필드 | 타입 | 설명 |
|---|---|---|
collabNo | Integer | 캠페인 번호 |
initialDeposit | Integer | 최초 입금액 (CAMPAIGN_DEPOSIT 첫 건의 금액) |
totalBudget | Integer | 총 입금액 (CAMPAIGN_DEPOSIT 합계, 추가입금 포함) |
forfeitAmount | Integer | 착수금 귀속 금액 (initialDeposit × 20%) |
refundAmount | Integer | 기업 크레딧으로 환급된 금액 |
unlockedBudgetCount | Integer | 해제된 LOCKED 예산 행 수 |
remainCreditAfter | Integer | 환급 후 기업 잔여 크레딧 |
에러 응답
| 상태 코드 | code | 사례 |
|---|---|---|
400 | LEGACY_CAMPAIGN_NOT_SUPPORTED | SaaS 이전 캠페인 |
400 | ALREADY_TERMINATED | 이미 CAMPAIGN_COMPLETED 상태 |
400 | INVALID_DATA | 기업 정보 누락 등 |
404 | INVALID_COLLAB | 캠페인 없음 |
401 | — | 인증 실패 |
정책 배경
기업과의 계약서 본문에는 다음 조항이 포함됩니다 (BusinessContractPdfService 참고):
영상 제작 캠페인 신청 시, 총예산의 20%를 착수금으로 선차감합니다. 캠페인이 정상 진행될 경우 해당 금액은 크레딧 사용분으로 자동 전환되나, "갑"의 사정으로 캠페인이 미진행 또는 최초 캠페인 설정 예산의 80% 이하가 사용될 경우 해당 착수금은 "을"의 행정 및 준비 비용으로 귀속되어 환불되지 않습니다.
본 API는 위 조항을 시스템화한 것으로, 모집 시작 이전의 단순 결제 취소(POST /campaign/{collabNo}/cancel, 100% 환불)와는 구분됩니다.
진행 중인 인플루언서 대금 정산은 본 흐름의 범위 밖이며 별도 운영 절차로 처리합니다.