SaaS API캠페인 제공 옵션 (V4)
캠페인 제공 옵션 개요
가이드라인 V4 의 "캠페인 제공 제품 옵션" 기능 — 광고주가 정의하고 크리에이터가 선택하는 RDB 단일 진실 데이터.
캠페인 제공 옵션 (V4)
광고주가 가이드라인 V4 작성 마지막 단계에서 입력하는 "크리에이터가 선택해야 할 제품 옵션" (예: 색상 / 사이즈 / 향) 을 다룬다.
[광고주 — 가이드라인 작성]
옵션 그룹 N개 정의 ("색상" / "사이즈" …)
└ 그룹 당 선택지 N개 ("아이보리" / "그레이" …)
→ PUT /ai/guideline/v4/{collabNo} body 에 providedOptions 동봉
→ 백엔드가 RDB 와 diff sync (PROPOSAL 신청자 있으면 거부)
[크리에이터 — PROPOSAL 상태]
GET /ai/influence/campaigns/applications 응답의
applications[].providedOptions 에 [정의 + 본인 선택 여부] 동봉
→ PUT /ai/application/{applicationId}/provided-options 로 선택 저장
[광고주 / 관리자 — 대시보드]
기존 대시보드 응답 row 의 selectedOptions 필드에 신청자별 선택값 동봉데이터 모델
3 테이블 — Mongo 가이드라인 도큐먼트에는 저장하지 않는다. RDB 단일 진실.
TB_CAMPAIGN_PROVIDED_OPTION
id, collab_no, title, selection_type (SINGLE|MULTI), sort_order, deleted_at, ...
TB_CAMPAIGN_PROVIDED_OPTION_CHOICE
id, option_id (FK), value, sort_order, deleted_at, ...
TB_APPLICATION_PROVIDED_OPTION_SELECTION
id, application_id (FK), choice_id (FK), selected_at
UNIQUE (application_id, choice_id)핵심 규칙
- 저장 트리거: 가이드라인 V4 저장(임시저장 / DRAFT / COMPLETED) 모든 경로에서 body 의
providedOptions를 RDB 와 diff sync. body 에 키가 없으면 sync 스킵. - Sync 동작: 입력에 새로 등장한 옵션/choice → insert. 기존 → title/value/sort 만 갱신. 입력에서 빠진 row → soft delete (FK 잡고 있는 선택 row 가 있을 수 있어 hard delete 안 함).
- Lock: 캠페인에
selectionStatus == PROPOSAL신청자 1건이라도 있으면 sync 전체 거부 (PROVIDED_OPTION_LOCKED). - 크리에이터 선택 시점:
selectionStatus == PROPOSAL에서만 PUT 허용. 그 외 상태에서 호출 →PROVIDED_OPTION_INVALID_STATE. - SINGLE 그룹: 그룹당 1개 선택만 허용 (서비스 레이어 검증). MULTI 는 그룹당 N개 허용.
- 확장성:
selection_type으로 SINGLE/MULTI 양쪽 모두 지원. 향후min_count/max_count같은 컬럼 추가만으로 수량 옵션 등 확장 가능.
옵션 정의는 광고주가 직접 입력하는 데이터다. Python AI 응답에서 파싱하지 않는다. (addon-fee sync 와 다른 점)
엔드포인트 요약
| Method | Path | 역할 |
|---|---|---|
GET | /ai/campaign/{collabNo}/provided-options | 옵션 정의 조회 (광고주/관리자/크리에이터 공통) |
PUT | /ai/application/{applicationId}/provided-options | 크리에이터 옵션 선택 저장 (PROPOSAL only) |
크리에이터 본인 선택값은 별도 엔드포인트 없이 GET /ai/influence/campaigns/applications 응답의 applications[].providedOptions 에 정의 + 본인 선택 여부가 같이 내려온다.
광고주/관리자 대시보드도 별도 엔드포인트 없이 기존 dashboard 응답 row 의 selectedOptions 필드로 내려온다.