Glowb Dev Docs
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

파라미터타입필수설명
campaignNoInteger예캠페인 번호

Query Parameters

파라미터타입기본값설명
includeFinancialBooleanfalsetrue 이면 결제·크레딧 원장·예산·정산 행까지 삭제하고 기업 원장을 재계산

처리 흐름

  1. 가드 — 캠페인 존재 확인 → 세금계산서 연결 확인 → 금전 이력 건수 확인. 가드는 어떤 삭제보다 먼저 실행됩니다.
  2. 스냅샷 — 캠페인 요약과 금전 행 전체를 JSON 으로 감사로그에 보관
  3. RDB 삭제 (자식 → 부모) — 금전(옵션) → 신청 하위 → 신청 → 캠페인 직속 → TB_COLLAB
  4. 원장 재계산 — 원장 행을 지웠으면 삭제 전 이월분(opening)을 고정한 채 기업 원장을 재계산하고 remain_credit 을 갱신
  5. 감사로그 기록 — TB_CAMPAIGN_DELETION_LOG 에 RDB 건수로 먼저 insert. Mongo 는 롤백이 안 되므로 로그 insert 가 실패하면 Mongo 문서는 아직 그대로 남습니다.
  6. MongoDB 삭제 — 가이드라인·AI 검수 결과 4종. RDB 작업이 전부 끝난 뒤 마지막에 실행하고, 감사로그의 deleted_counts_json 에 mongo.* 건수를 보정합니다.
  7. 커밋 — 커밋 뒤 캠페인 알리미 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_FOUND404캠페인 없음
CAMPAIGN_HAS_FINANCIAL_HISTORY409금전 이력 존재, includeFinancial=true 필요 (data 에 테이블별 건수)
CAMPAIGN_HAS_TAX_INVOICE409세금계산서가 이 캠페인의 거래를 참조. 옵션과 무관하게 삭제 불가 (data.taxInvoiceIds)

API 테스트

On this page