PATCH /ai/admin/dashboard/{campaignNo}/list
리스트 관리 벌크 업데이트
리스트 관리 벌크 업데이트
리스트 관리 탭에서 여러 항목을 일괄 업데이트합니다.
applicationId가 있으면 기존 신청을 업데이트합니다.applicationId가 없고influenceNo가 있으면 유저 풀에서 새로 추가합니다 (sourceType:ADMIN_ADDED).
데모(목업) 후보도 이 API 로 수정합니다. applicationId 에 dummyItems[].applicationId
(1억 오프셋, 예: 100000012)를 그대로 넣으면 서버가 데모 테이블로 보냅니다. 데모에는 수기 등록으로 넣는 값 전부
(username·accountLink·profileImage·followerCount·reelsAvgViews·matchScore·fitScore·
estimatedPrice·currentPrice·categoryTags·recommendReason·flags·recentPosts·adminVisible) 가 반영되고, 계약서·지불방식·
유저풀 추가는 해당이 없어 무시됩니다. 데모 비고는 배열 전체 교체 방식이며 빈 배열이면 전부 삭제됩니다.
자세한 내용은 데모(목업) 후보 연동 가이드를 참고하세요.
flags[] 는 이 캠페인 소속 비고만 다룹니다. 제출 목록에서 빠진 비고를 지울 때
collab_no = {campaignNo} 인 행만 비활성화하고, 전 캠페인 공통 비고와 다른 캠페인의 비고는 그대로 둡니다.
남은 건수는 응답 message 뒤에 안내로 덧붙습니다.
전역 비고를 추가·삭제하려면 전 캠페인 공통 비고 API를 쓰세요.
범위 구분과 scope·source·editable 필드는 비고 개요에 정리돼 있습니다.
노출 후보 → 대기 자동 전환
adminVisible 을 false 에서 true 로 바꾸는 순간, 매칭 상태가 노출 후보(exposureCandidate)였다면
대기(waiting)로 자동 전환됩니다. 노출 후보는 노출 전에만 쓰는 관리자 표시이기 때문입니다.
- 미노출에서 노출로 넘어가는 전환 순간에만 동작합니다. 이미 노출 중인 항목에
adminVisible: true를 다시 보내도 예비·제외 같은 다른 상태를 덮어쓰지 않습니다. - 이 전환은 직전 상태를 갱신하지 않습니다. 그래서 "직전 상태 복귀"를 눌러도 노출 후보로 되돌아가지 않습니다(노출 중인데 노출 후보인 모순 상태 방지).
- 노출을 해제해도 노출 후보로 되돌아가지 않습니다. 필요하면 다시 지정하세요.
이 API 를 매칭 상태 변경보다 먼저 호출하세요.
어드민 저장은 이 API(노출)가 먼저, 매칭 상태 변경 API 가 나중에 나갑니다. 이 순서라면 노출 변경과 노출 후보 지정을 한 번에 저장해도 결과가 의도대로 나옵니다.
- 노출 켜기 + 후보 지정: 여기서 노출이 켜지고 뒤이은 후보 지정은 건너뛰어 노출됨 + 대기가 됩니다. 후보 지정이 먼저였더라도 위 자동 전환으로 대기가 되므로 결과는 같습니다.
- 노출 끄기 + 후보 지정: 여기서 노출이 먼저 꺼지므로 후보 지정이 정상 반영되어 미노출 + 노출 후보가 됩니다.
순서를 뒤집으면 후자가 깨집니다 — 노출이 꺼지기 전에 후보 지정이 들어와 건너뛰어집니다.
accountLink 로 계정 링크를 정정하면 AI 평가가 다시 돕니다. 계정 링크는 크롤 프로필·티어·최근
게시물을 붙이는 조인 키라서 고치는 즉시 조회에 반영되지만, AI 평가와 벡터 매칭점수는 신청이 생길 때
한 번만 산출돼 옛 계정 기준으로 남습니다. 그래서 링크 값이 실제로 바뀐 경우에만 신청 생성과 동일하게
평가·매칭점수를 커밋 이후 다시 산출합니다.
같은 값을 다시 보내면 아무 일도 일어나지 않습니다. 벌크 저장은 바뀌지 않은 항목까지 함께 보내는 경우가 많아, 값 비교 없이 처리하면 저장할 때마다 재평가가 돌기 때문입니다.
HTTP 요청
PATCH /ai/admin/dashboard/{campaignNo}/list
Authorization: Bearer {access_token}
Content-Type: application/jsonPath Parameters
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
campaignNo | long | 예 | 캠페인 번호 |
Request Body
| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
applicationId | Long | 조건부 | 기존 신청 업데이트 시 필수 |
influenceNo | Integer | 조건부 | 유저 풀에서 새로 추가 시 필수 |
adminVisible | Boolean | 아니오 | 기업 대시보드 노출 여부 |
currentPrice | Long | 아니오 | 노출가 |
adminMemo | String | 아니오 | 비고 |
contractWritten | String | 아니오 | 계약서 작성 여부 ("O" 포함 시 작성완료, "X" 포함 시 미작성). 전자계약 발송 이상 단계(SENT~SIGNED)인 경우 변경 불가 |
payment | String | 아니오 | 지불 여부 ("O", "현금", "카드" 등) |
recommendReason | String | 아니오 | 추천 사유 (AI 추천 또는 수동 입력), null이면 기존 값 유지 |
accountLink | String | 아니오 | SNS 계정 링크. 크리에이터가 신청 시 잘못 입력한 링크를 정정합니다. 빈 문자열이면 링크를 지웁니다 |
요청 예시
{
"items": [
{
"applicationId": 35,
"adminVisible": true,
"currentPrice": 550000,
"adminMemo": "우수 크리에이터, 팔로워 10만+",
"contractWritten": "O 계약완료",
"payment": "O",
"recommendReason": "카테고리 적합도 높음, 팔로워 10만+",
"accountLink": "https://www.instagram.com/creator_correct_id"
},
{
"applicationId": 36,
"adminVisible": false,
"currentPrice": 300000,
"adminMemo": "보류"
},
{
"influenceNo": 2466,
"adminVisible": true,
"currentPrice": 400000,
"adminMemo": "유저 풀에서 추가"
}
]
}응답
성공 응답 (200 OK)
{
"status": 200,
"code": null,
"message": "3건의 항목이 업데이트되었습니다.",
"data": {
"success": true,
"updatedIds": [35, 36, 101],
"failedIds": [],
"message": "3건의 항목이 업데이트되었습니다."
}
}전자계약 진행 중 변경 시도 (실패 처리)
contractWritten 필드를 변경하려는 신청자에게 이미 전자계약이 발송(SENT) 이상 단계인 경우, 해당 항목은 실패 처리됩니다.
{
"status": 200,
"code": null,
"message": "2건 성공, 1건 실패",
"data": {
"success": false,
"updatedIds": [35, 36],
"failedIds": [37],
"message": "2건 성공, 1건 실패"
}
}전자계약 상태: DRAFT → SENT → OPENED → FILLED → OTP_VERIFIED → SIGNED SENT 이상 단계에서는
contractWritten수동 변경이 차단됩니다.
일부 실패 응답 (200 OK)
{
"status": 200,
"code": null,
"message": "2건 성공, 1건 실패",
"data": {
"success": false,
"updatedIds": [35, 36],
"failedIds": [37],
"message": "2건 성공, 1건 실패"
}
}노출 전환이 차단된 경우 (200 OK)
adminVisible: true 전환은 두 가지 이유로 차단될 수 있습니다.
차단된 항목은 실패가 아니라 별도 목록으로 내려가며, 같은 항목의 다른 필드(가격·태그 등)는 정상 반영됩니다.
{
"status": 200,
"code": null,
"message": "2건 성공, 0건 실패, 1건 블랙리스트 차단, 0건 다건 진행중 차단",
"data": {
"success": true,
"updatedIds": [35, 36],
"failedIds": [],
"blockedBlacklistIds": [37],
"blockedMultiCampaignIds": [],
"message": "2건 성공, 0건 실패, 1건 블랙리스트 차단, 0건 다건 진행중 차단"
}
}| 필드 | 타입 | 설명 |
|---|---|---|
blockedBlacklistIds | Long[] | 블랙리스트 등록자라 노출 전환이 차단된 신청 ID |
blockedMultiCampaignIds | Long[] | 진행 중 캠페인 3건 초과라 노출 전환이 차단된 신청 ID |