Admin APIAdmin Campaign API
DELETE /ai/admin/campaigns/{campaignNo}
캠페인 하드 삭제 (관리자 전용)
캠페인 하드 삭제
캠페인과 연관 테이블을 물리 삭제합니다. 복구할 수 없습니다.
본 API는 관리자 전용이며 되돌릴 수 없습니다. 금전 이력이 있는 캠페인은 기본적으로 거부되고, includeFinancial=true 로만 지울 수 있습니다. 세금계산서·충전 거래·크리에이터 정산·GCS 파일은 어떤 경우에도 지우지 않습니다.
HTTP 요청
DELETE /ai/admin/campaigns/{campaignNo}?includeFinancial=false
Authorization: Bearer {access_token}요청 본문은 없습니다. 처리자(adminId)는 JWT 인증 컨텍스트에서 추출됩니다.
Path Parameters
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
campaignNo | Integer | 예 | 캠페인 번호 |
Query Parameters
| 파라미터 | 타입 | 기본값 | 설명 |
|---|---|---|---|
includeFinancial | Boolean | false | true 이면 결제·크레딧 원장·예산·정산 행까지 삭제하고 기업 원장을 재계산 |
처리 흐름
- 가드 — 캠페인 존재 확인 → 세금계산서 연결 확인 → 금전 이력 건수 확인. 가드는 어떤 삭제보다 먼저 실행됩니다.
- 스냅샷 — 캠페인 요약과 금전 행 전체를 JSON 으로 감사로그에 보관
- RDB 삭제 (자식 → 부모) — 금전(옵션) → 신청 하위 → 신청 → 캠페인 직속 →
TB_COLLAB - 원장 재계산 — 원장 행을 지웠으면 삭제 전 이월분(opening)을 고정한 채 기업 원장을 재계산하고
remain_credit을 갱신 - 감사로그 기록 —
TB_CAMPAIGN_DELETION_LOG에 RDB 건수로 먼저 insert. Mongo 는 롤백이 안 되므로 로그 insert 가 실패하면 Mongo 문서는 아직 그대로 남습니다. - MongoDB 삭제 — 가이드라인·AI 검수 결과 4종. RDB 작업이 전부 끝난 뒤 마지막에 실행하고, 감사로그의
deleted_counts_json에mongo.*건수를 보정합니다. - 커밋 — 커밋 뒤 캠페인 알리미 Slack 채널에 노티
삭제되는 데이터
| 구분 | 테이블 |
|---|---|
| 항상 | TB_CAMPAIGN_APPLICATION 과 하위(검수·제출물·계약·협상·일정·배송·매칭 등), TB_CAMPAIGN_SCHEDULE, TB_CAMPAIGN_NOTIFICATION, campaign_documents, progress_table_items, TB_COLLAB_MANAGER, 칸반(TB_KANBAN*), TB_REVIEW, TB_COUPON, TB_COLLAB_META_CAMPAIGN, 부가비·환율·제공옵션·데모신청자·모집제안이력·플래그·트리거로그·이메일로그, Mongo 4종 |
includeFinancial=true 일 때만 | TB_CAMPAIGN_PAYMENT, TB_CAMPAIGN_PAYMENT_VERIFICATION, TB_CAMPAIGN_BUDGET, TB_CAMPAIGN_CREDIT_SETTLEMENT, TB_CREDIT_TRANSACTION(해당 캠페인 행만) |
| 절대 삭제 안 함 | TB_TAX_INVOICE, 충전 거래(collab_no 없는 원장 행), TB_INFLUENCE_SETTLEMENT(신청 FK 만 NULL), TB_CANDY_PAYMENT, GCS/S3 파일 |
응답
성공 응답 (200 OK)
{
"status": 200,
"code": null,
"message": "캠페인이 삭제되었습니다.",
"data": {
"campaignNo": 1605,
"title": "마녀스프 캠페인",
"includeFinancial": true,
"deletedCounts": {
"TB_CREDIT_TRANSACTION": 3,
"TB_FINAL_SUBMISSION": 2,
"TB_CAMPAIGN_APPLICATION": 12,
"TB_CAMPAIGN_SCHEDULE": 4,
"TB_COLLAB": 1,
"mongo.ai_review_result": 6
},
"ledgerRecalc": [
{
"businessAccountId": 77,
"openingBalance": 1000000,
"mismatchedCount": 2,
"remainCreditBefore": 900000,
"remainCreditAfter": 1500000
}
],
"deletionLogId": 9
}
}deletedCounts 에는 명시 DELETE 한 테이블만 담깁니다. DB ON DELETE CASCADE 로 지워진 분은 집계되지 않습니다.
금전 이력 거부 (409)
{
"status": 409,
"code": "CAMPAIGN_HAS_FINANCIAL_HISTORY",
"message": "금전 이력이 있는 캠페인입니다. includeFinancial=true 로 다시 요청하세요.",
"data": {
"campaignPayment": 1,
"campaignPaymentVerification": 0,
"campaignBudget": 5,
"creditTransaction": 3,
"campaignCreditSettlement": 1
}
}에러 응답
| 코드 | 상태 | 설명 |
|---|---|---|
CAMPAIGN_NOT_FOUND | 404 | 캠페인 없음 |
CAMPAIGN_HAS_FINANCIAL_HISTORY | 409 | 금전 이력 존재, includeFinancial=true 필요 (data 에 테이블별 건수) |
CAMPAIGN_HAS_TAX_INVOICE | 409 | 세금계산서가 이 캠페인의 거래를 참조. 옵션과 무관하게 삭제 불가 (data.taxInvoiceIds) |