모집 영업일 조회
GET /ai/campaign-schedules/{campaignNo}/recruitment-days — 캠페인 모집 영업일 + 모집일/리스트 오픈일
모집 영업일 조회
캠페인의 모집 영업일과, 그에 따른 모집 시작·종료일 / 리스트 오픈일을 조회합니다.
가이드 완성 전에도 답할 수 있는 게 이 API 의 존재 이유입니다.
가이드라인 미리보기의 "예상 일정" 모달은 가이드 완성 전에 뜨는 화면이라
캠페인 일정 조회의 listOpenAt / recruitmentEndAt 이 아직 null 입니다.
그래서 모집일수와 예상 일정을 따로 내려주는 엔드포인트가 필요합니다.
입력은 캠페인 번호뿐입니다. 모집일수도 기준일(가이드 완성일)도 캠페인에 저장된 값을 씁니다 — 조회 API 가 조회 대상이나 그 계산 입력을 밖에서 받으면 "무엇을 조회하는 API 인가"가 흐려지기 때문입니다.
HTTP 요청
GET /ai/campaign-schedules/{campaignNo}/recruitment-days
Authorization: Bearer {access_token}Query Parameter 는 없습니다.
Path Parameters
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
campaignNo | int | 예 | 캠페인 번호 |
산정식
모집 시작일 = 가이드라인 완성일 (캠페인에 저장된 값)
모집 종료일 = 모집 시작일 + recruitmentDays 영업일
리스트 오픈일 = 모집 시작일 + (recruitmentDays + 1) 영업일 ← 모집 종료 다음 영업일영업일 = 주말 + 한국 공휴일 제외 (BusinessDayCalculator). 규칙 출처는 Bill 2026-05-22 명세
(원문) — "화수목금 모집 후 월요일 오전에 오픈"처럼
예시로 규정돼 있습니다. 자세한 배경은 트리거 문서의 T0 섹션 참고.
프론트에서 영업일을 다시 계산하지 마세요.
프론트가 자체 공휴일 표로 계산하면 저장 후 서버 재산정 결과와 어긋납니다. 실제로 어드민 프론트의 공휴일 표에는 백엔드에 있는 2026~2027년 평일 공휴일 8건(2026-06-03 대선, 07-17 제헌절, 09-28 추석 대체, 2027-05-03, 07-19, 09-14·15·16 추석)이 누락돼 있어 최대 3영업일까지 어긋났습니다. 이 응답 값을 그대로 표시하는 것이 유일한 해법입니다.
응답
성공 응답 (200 OK)
{
"status": 200,
"code": null,
"message": "모집 영업일 조회가 성공하였습니다.",
"data": {
"campaignNo": 2485,
"recruitmentDays": 10,
"recruitmentStartDate": "2026-07-24",
"recruitmentEndDate": "2026-08-07",
"listOpenDate": "2026-08-10"
}
}Response 스키마
| 필드명 | 타입 | 설명 |
|---|---|---|
campaignNo | int | 캠페인 번호 |
recruitmentDays | int | 캠페인에 설정된 모집 영업일 (관리자 설정값, 미설정 시 기본 4) |
recruitmentStartDate | date | null | 모집 시작일 (= 가이드라인 완성일, 계산 기준일) |
recruitmentEndDate | date | null | 모집 종료일 (= 시작일 + recruitmentDays 영업일) |
listOpenDate | date | null | 리스트 오픈일 = 크리에이터 리스트 전달일 (= 시작일 + recruitmentDays + 1 영업일) |
날짜 3종은 가이드라인이 완성된 캠페인에서만 채워집니다. 미완성이면 셋 다 null 이고
recruitmentDays 만 내려갑니다 — 기준일이 없는데 오늘로 지어내면 화면이 확정 일정처럼 표시할
위험이 있어서입니다. 그 시점 화면은 가이드라인 완성 후 {recruitmentDays} 영업일 이내 처럼
상대 문구로 표시하세요.
null 이어도 키는 항상 내려갑니다(@JsonInclude 미적용). 키가 사라지면 "미배포"인지
"값이 없는 것"인지 구분할 수 없기 때문입니다.
recruitmentEndDate 와 listOpenDate 는 정확히 1영업일 차이입니다. 화면에서 "크리에이터 모집 후
리스트 전달"에 표시할 값은 listOpenDate 이며, 모집 종료일을 쓰면 하루 앞당겨 표시됩니다
(Jay 2026-07-24 제보로 드러난 기존 버그).
에러 응답
| 상태 코드 | 코드 | 설명 |
|---|---|---|
401 | — | 인증 실패 |
404 | CAMPAIGN_NOT_FOUND | 존재하지 않는 캠페인 |
언제 이걸 쓰고, 언제 다른 걸 쓰나
| 상황 | 쓸 API |
|---|---|
| 가이드 완성 전 모집일수 표시 (가이드 미리보기 모달) | 이 API |
| 가이드 완성 후 확정된 실제 일정 | 캠페인 일정 조회 의 listOpenAt / recruitmentEndAt |
| 캠페인 전체 진행 정보와 함께 필요 | GET /ai/progress-table/item/{id} 의 campaignDetails.recruitmentDays |