# Influence Backend API 기존 동작하는 코드를 기반으로 구성된 벤더-인플루언서 관계 관리 API ## 프로젝트 구조 ``` backend/ ├── app/ │ ├── Config/ │ │ └── Routes.php # API 라우트 설정 │ ├── Controllers/ │ │ └── VendorInfluencerController.php # 메인 컨트롤러 │ └── Models/ │ ├── VendorInfluencerMappingModel.php # 벤더-인플루언서 매핑 모델 │ ├── VendorModel.php # 벤더사 모델 │ └── UserModel.php # 사용자 모델 └── README.md ``` ## API 엔드포인트 ### 벤더-인플루언서 관계 관리 - `POST /api/vendor-influencer/request` - 승인요청 생성 - `POST /api/vendor-influencer/requests` - 요청목록 조회 (벤더사용) - `POST /api/vendor-influencer/process` - 승인/거부 처리 - `POST /api/vendor-influencer/cancel` - 요청취소 - `POST /api/vendor-influencer/list` - 관계목록 조회 (인플루언서용) - `POST /api/vendor-influencer/detail` - 상세 조회 ### 벤더사 검색 - `POST /api/vendor/search` - 벤더사 검색 (인플루언서용) ## 주요 기능 ### 1. 벤더사 검색 (`searchVendors`) - 키워드, 카테고리, 지역별 검색 - 정렬: latest, partnership, name - 페이징 지원 - 파트너십 상태 확인 ### 2. 승인요청 생성 (`createRequest`) - 중복 요청 방지 - 만료일 자동 설정 (7일) - 요청 메시지, 수수료율, 특별조건 포함 ### 3. 승인요청 목록 조회 (`getList`) - 벤더사/인플루언서별 필터링 - 키워드 검색, 카테고리 필터 - 정렬: latest, oldest, expiring - 통계 정보 제공 (pending, approved, rejected, total) ### 4. 승인/거부 처리 (`approveRequest`) - action 파라미터로 APPROVE/REJECT 구분 - 응답 메시지, 수수료율 설정 - 처리자 및 처리일시 기록 ### 5. 요청 취소 (`cancelRequest`) - 권한 확인 - 취소 사유 기록 ### 6. 상세 조회 (`getDetail`) - 벤더사, 인플루언서 정보 포함 - 매핑 정보 상세 조회 ## 데이터베이스 테이블 ### VENDOR_INFLUENCER_MAPPING - 벤더사-인플루언서 관계 매핑 - 승인요청, 상태, 메시지, 수수료율 등 ### VENDOR_LIST - 벤더사 정보 - 회사명, 카테고리, 지역, 로고 등 ### USER_LIST - 사용자 정보 (인플루언서 포함) - 회원유형, 프로필, 카테고리 등 ## 기존 코드 호환성 이 API는 기존 동작하는 코드와 100% 호환됩니다: - 기존 메서드 시그니처 유지 - 동일한 요청/응답 포맷 - 기존 데이터베이스 구조 활용 - 추가 기능만 확장 ## 사용 예시 ### 벤더사 검색 ```javascript const response = await fetch('/api/vendor/search', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ keyword: '패션', category: 'FASHION_BEAUTY', region: 'SEOUL', sortBy: 'latest', page: 1, size: 12, influencerSeq: 123 }) }); ``` ### 승인요청 목록 조회 (벤더사용) ```javascript const response = await fetch('/api/vendor-influencer/requests', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ vendorSeq: 456, status: 'PENDING', keyword: '인플루언서명', sortBy: 'latest', page: 1, size: 12 }) }); ``` ### 승인 처리 ```javascript const response = await fetch('/api/vendor-influencer/process', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ mappingSeq: 789, action: 'APPROVE', // or 'REJECT' processedBy: 456, responseMessage: '승인합니다.' }) }); ```