Admin APIAdmin Pending Participants API
GET / — 미처리 대상자 목록
캠페인의 미처리 대상자를 케이스별 row로 페이지네이션하여 조회합니다.
미처리 대상자 목록 조회
캠페인의 SELECTED 신청자 중 미체결/미제출/미등록 대상자를 케이스별 row로 반환합니다. 한 신청자가 여러 케이스에 해당하면 row가 분리됩니다.
HTTP 요청
GET /ai/admin/campaigns/{campaignNo}/pending-participants
Authorization: Bearer {access_token}Path Parameters
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
campaignNo | int | 예 | 캠페인 번호 |
Query Parameters
| 파라미터 | 타입 | 필수 | 기본값 | 설명 |
|---|---|---|---|---|
cases | PendingCase[] | 아니오 | 전부 | multi 지원 (?cases=A&cases=B) |
overdueStatuses | OverdueStatus[] | 아니오 | 전부 | multi 지원 |
contactFilter | ContactFilter | 아니오 | ALL | 연락 여부 필터 |
search | string | 아니오 | 닉네임/이메일/전화 like 검색 | |
page | int | 아니오 | 0 | Spring Pageable |
size | int | 아니오 | 20 | 최대 권장 100 |
sort | string | 아니오 | deadline,asc | 허용 키: deadline, lastContactedAt, appliedAt |
응답
성공 응답 (200 OK)
{
"status": 200,
"code": null,
"message": "미처리 대상자 목록 조회 성공",
"data": {
"items": [
{
"applicationId": 123,
"campaignNo": 45,
"campaignTitle": "가을 뷰티 캠페인",
"influenceId": 7,
"nickname": "홍길동",
"email": "gildong@example.com",
"tel": "010-1234-5678",
"pendingCase": "CONTRACT_UNSIGNED",
"pendingCaseDescription": "계약 미체결",
"deadline": "2026-04-10T18:00:00",
"overdueStatus": "OVERDUE",
"daysUntilDeadline": -3,
"lastContactedAt": "2026-04-12T15:30:00",
"lastContactSummary": "전화 부재중",
"lastContactMethod": "PHONE",
"lastMemoAt": "2026-04-12T16:00:00",
"lastMemoSummary": "이번 주말 이사 중",
"contactCount": 2,
"currentPhase": "APPLICATION_CONTRACT",
"subStep": "SENT"
}
],
"page": {
"number": 0,
"size": 20,
"totalElements": 42,
"totalPages": 3
},
"summary": {
"CONTRACT_UNSIGNED": 3,
"FIRST_REVIEW_NOT_SUBMITTED": 5,
"FINAL_NOT_SUBMITTED": 2
}
}
}응답 필드
| 필드 | 타입 | 설명 |
|---|---|---|
items[].applicationId | long | 신청 ID |
items[].pendingCase | PendingCase | 케이스 |
items[].deadline | LocalDateTime | 관련 마감일 (nullable) |
items[].overdueStatus | OverdueStatus | 마감 상태 |
items[].daysUntilDeadline | long | 음수=경과일수, 0=오늘, 양수=남은일수, null=마감일 없음 |
items[].lastContactedAt | LocalDateTime | 가장 최근 CONTACT occurred_at |
items[].lastContactMethod | ContactMethod | 최근 연락 수단 |
items[].lastMemoAt | LocalDateTime | 가장 최근 MEMO occurred_at |
items[].contactCount | long | CONTACT 이력 건수 |
summary | Map<PendingCase, Long> | 필터 적용 후, 페이지네이션 이전 기준 집계 |
summary는 필터가 적용된 결과에 대한 케이스별 카운트입니다. 페이지가 넘어가도 총 집계를 볼 수 있습니다.
에러 응답
| 상태 코드 | 설명 |
|---|---|
400 | 캠페인이 존재하지 않음 |
401 | 인증 실패 |
예시
계약 미체결 & 연락 안 한 대상만
GET /ai/admin/campaigns/45/pending-participants?cases=CONTRACT_UNSIGNED&contactFilter=NOT_CONTACTED오늘/경과된 것만 마감일 순 정렬
GET /ai/admin/campaigns/45/pending-participants?overdueStatuses=OVERDUE&overdueStatuses=TODAY&sort=deadline,asc