등록 후보 검색
이름·이메일·전화번호·인스타 링크로 블랙리스트에 올릴 인플루언서를 찾습니다.
등록 후보 검색
블랙리스트에 올릴 인플루언서를 찾습니다. 검색창 하나에 아무거나 넣으면 서버가 판별합니다.
이미 블랙리스트로 등록된 인플루언서는 결과에서 제외됩니다. 등록용 검색이기 때문입니다. 해제하려면 목록 조회를 쓰세요.
HTTP 요청
GET /ai/admin/blacklist/search?keyword={검색어}&page=0&size=20
Authorization: Bearer {access_token}Query Parameters
| 파라미터 | 타입 | 필수 | 기본값 | 설명 |
|---|---|---|---|---|
keyword | String | 예 | — | 이름 / 이메일 / 전화번호 / 인스타 링크·핸들 |
page | Integer | 아니오 | 0 | 페이지 번호 (0부터) |
size | Integer | 아니오 | 20 | 페이지 크기 |
검색어 판별 규칙
서버가 입력 형태를 보고 무엇으로 찾을지 정합니다. FE는 타입을 보낼 필요가 없습니다.
| 입력 패턴 | 판별 | 예시 |
|---|---|---|
instagram.com 또는 / 포함 | SNS_LINK | https://instagram.com/hong_daily/ |
@ 로 시작 | SNS_LINK | @hong_daily |
@ 포함 | EMAIL | hong@test.com |
숫자·-·+·공백만 | TEL | 010-1234-5678 |
| 나머지 | NAME | 홍길동 |
@hong_daily(핸들)와 hong@test.com(이메일)이 헷갈리므로 @ 로 시작하면 핸들로 봅니다.
판별 결과는 응답의 matchedBy 로 돌려주니, 의도와 다르면 입력 형태를 확인하세요.
검색 대상과 정규화
| 타입 | 어디를 찾나 | 정규화 |
|---|---|---|
NAME | TB_INFLUENCE.name | 앞뒤 공백 제거, 부분일치 |
EMAIL | TB_INFLUENCE.email | 소문자 변환, 부분일치 |
TEL | TB_INFLUENCE.tel | 구분자 제거 후 부분일치 |
SNS_LINK | TB_CAMPAIGN_APPLICATION.sns_account_link | 핸들만 추출 후 부분일치 |
전화번호는 DB에 010-1234-5678 과 01012345678 이 섞여 저장돼 있어, 서버가 -와 공백을 지우고 비교합니다.
어느 형태로 넣어도 같은 결과가 나옵니다.
인스타는 주소창에서 복사한 그대로(https://www.instagram.com/hong_daily/?igsh=...) 넣어도
hong_daily 만 뽑아서 찾습니다.
인스타 링크는 인플루언서가 아니라 지원 건에 붙어 있습니다. 블랙리스트 대상(계약 후 드롭·취소자)은 반드시 지원 이력이 있으므로 항상 찾힙니다. 다만 한 번도 지원한 적 없는 인플루언서는 링크로 검색되지 않습니다.
응답
성공 응답 (200 OK)
{
"status": 200,
"code": null,
"message": "인플루언서 검색 성공",
"data": {
"matchedBy": "TEL",
"excludedBlacklistedCount": 1,
"candidates": {
"content": [
{
"influenceNo": 1523,
"name": "홍길동",
"email": "hong@test.com",
"tel": "010-1234-5678",
"memberId": "creator_hong",
"snsAccountLinks": ["https://instagram.com/hong_daily"],
"applicationCount": 3,
"lastAppliedAt": "2026-07-01T10:00:00"
}
],
"totalElements": 1,
"totalPages": 1,
"number": 0,
"size": 20
}
}
}| 필드 | 타입 | 설명 |
|---|---|---|
matchedBy | String | 서버가 판별한 검색 타입 (NAME·EMAIL·TEL·SNS_LINK) |
excludedBlacklistedCount | Long | 검색 조건에는 맞지만 이미 블랙리스트라 빠진 인원 수 |
candidates.content[].influenceNo | Integer | 등록 API에 그대로 넘기는 값 |
candidates.content[].snsAccountLinks | String[] | 지원 시 입력한 SNS 링크 (최대 3개, 최신순) |
candidates.content[].applicationCount | Long | 총 지원 건수 |
candidates.content[].lastAppliedAt | LocalDateTime | 마지막 지원 일시 |
excludedBlacklistedCount 를 화면에 꼭 노출하세요.
결과가 0건인데 이 값이 1 이상이면 "없는 사람"이 아니라 "이미 등록된 사람"입니다.
이걸 안 보여주면 관리자가 왜 검색이 안 되는지 몰라 헤맵니다.
applicationCount 와 lastAppliedAt 은 동명이인을 구분하기 위한 것입니다.
"드롭한 그 사람이 맞는지" 확인하지 못하면 엉뚱한 사람을 퇴출시킬 수 있습니다.
빈 검색어
keyword 가 비어 있거나 공백뿐이면 전체 인플루언서를 훑지 않고 빈 결과를 돌려줍니다.
{
"status": 200,
"message": "인플루언서 검색 성공",
"data": {
"matchedBy": "NAME",
"excludedBlacklistedCount": 0,
"candidates": { "content": [], "totalElements": 0 }
}
}에러 응답
| 상태 코드 | 설명 |
|---|---|
400 | keyword 파라미터 누락 |
401 | 인증 실패 |
403 | ADMIN 권한 필요 |