6.7 KiB
6.7 KiB
선물하기 클라이언트 API 요약
문서 목적
- 이 문서는 클라이언트 구현 프롬프트 작성용 빠른 참조다.
- 상세 request/response 계약은
prd.md의8. API 계약을 기준으로 한다. - 여기서는 사용자 역할별 URI, 역할, 핵심 request/response 필드만 요약한다.
문서 분리 결정
PRD에는 상세 API 계약, request/response 예시, 요구사항을 유지한다. 클라이언트 프롬프트용 역할별 인벤토리는 별도 문서로 둔다.
- 이유: PRD에 같은 URI 정보를 역할별로 다시 넣으면 상세 계약과 요약표를 동시에 갱신해야 한다.
- 기준: PRD는 제품 요구사항과 API 계약의 원본, 이 문서는 클라이언트 구현을 위한 탐색용 색인이다.
공통/조회 API
| 사용자 | Method | URI | 역할 | Request | Response |
|---|---|---|---|---|---|
| 비회원/회원 | GET | /api/v2/gifts/form-options |
선물 신청 폼에 필요한 활성 카테고리와 사이즈별 가격 옵션을 조회한다. | 없음 | sizes[], categories[] |
| 팬/크리에이터 | GET | /api/v2/gifts?type=ALL&page=0&size=20 |
내 선물함 목록을 조회하고 `type=ALL | SENT | RECEIVED`로 전체/보낸/받은 선물을 필터링한다. |
| 팬/크리에이터 | GET | /api/v2/gifts/{applicationNo} |
선물 상세를 조회하며 로그인 회원이 팬인지 크리에이터인지에 따라 노출 정보와 CTA flag가 달라진다. | path: applicationNo |
applicationNo, direction, status, statusName, giftInfo, senderInfo, recipientAddress, mailbox, trackingRequired, recipientAddressRequired, delivery, statusTimeline, review |
팬 API
| 사용자 | Method | URI | 역할 | Request | Response |
|---|---|---|---|---|---|
| 팬 | POST | /api/v2/gifts |
크리에이터에게 선물을 신청하고 최종 결제 금액만큼 캔을 차감한다. | body: recipientMemberId, senderName, senderPhoneNumber, senderZipCode, senderAddress, senderAddressDetail, sizeCode, categoryId, senderTermsAgreed, senderPrivacyAgreed, damageWaiverAgreed |
applicationNo, status, statusName, priceCan, trackingDeadlineAt |
| 팬 | POST | /api/v2/gifts/{applicationNo}/cancel |
운송장 등록 전 선물 신청을 취소하고 전액 환불한다. | path: applicationNo |
applicationNo, status, refundedCan |
| 팬 | POST | /api/v2/gifts/{applicationNo}/tracking |
발송 후 택배사와 운송장 번호를 등록한다. | path: applicationNo, body: courierCompanyName, trackingNumber |
applicationNo, status, recipientAddressDeadlineAt |
| 팬 | POST | /api/v2/gifts/{applicationNo}/review |
전달 완료된 선물에 리뷰를 작성한다. | path: applicationNo, body: rating, keywords, comment |
reviewId, applicationNo, rating, keywords, comment, createdAt |
크리에이터 API
| 사용자 | Method | URI | 역할 | Request | Response |
|---|---|---|---|---|---|
| 크리에이터 | POST | /api/v2/gifts/{applicationNo}/recipient-address |
운송장 등록 이후 배송지와 수령 약관 동의를 등록한다. | path: applicationNo, body: recipientName, recipientPhoneNumber, recipientZipCode, recipientAddress, recipientAddressDetail, recipientTermsAgreed, recipientPrivacyAgreed |
applicationNo, recipientAddressRegisteredAt |
| 크리에이터 | POST | /api/v2/gifts/{applicationNo}/delivery-complete |
검수 완료된 선물을 직접 수령 완료 처리한다. | path: applicationNo |
applicationNo, status, deliveredAt |
관리자 API
| 사용자 | Method | URI | 역할 | Request | Response |
|---|---|---|---|---|---|
| 관리자 | GET | /api/v2/admin/gift-categories |
선물 카테고리 목록을 조회한다. | 없음 | AdminGiftCategoryResponse[] |
| 관리자 | POST | /api/v2/admin/gift-categories |
선물 카테고리를 등록한다. | body: categoryCode, name, requiresDamageWaiver, isActive |
categoryId, categoryCode, name, requiresDamageWaiver, isActive |
| 관리자 | PUT | /api/v2/admin/gift-categories/{categoryId} |
선물 카테고리를 수정한다. | path: categoryId, body: categoryCode, name, requiresDamageWaiver, isActive |
categoryId, categoryCode, name, requiresDamageWaiver, isActive |
| 관리자 | DELETE | /api/v2/admin/gift-categories/{categoryId} |
선물 카테고리를 비활성화한다. | path: categoryId |
categoryId, categoryCode, name, requiresDamageWaiver, isActive=false |
| 관리자 | GET | /api/v2/admin/gift-size-prices |
사이즈별 기본가와 판매가를 조회한다. | 없음 | AdminGiftSizePriceResponse[] |
| 관리자 | PUT | /api/v2/admin/gift-size-prices/{sizeCode} |
사이즈별 기본가와 판매가를 수정한다. | path: sizeCode, body: basePriceCan, salePriceCan, isActive |
sizeCode, name, basePriceCan, salePriceCan, isActive |
| 관리자 | POST | /api/v2/admin/gifts/{applicationNo}/arrive-mailbox |
발송 확인 선물을 사서함 도착 처리한다. | path: applicationNo |
applicationNo, status, statusName, occurredAt |
| 관리자 | POST | /api/v2/admin/gifts/{applicationNo}/complete-inspection |
사서함 도착 선물을 검수 완료 처리한다. | path: applicationNo |
applicationNo, status, statusName, occurredAt |
| 관리자 | POST | /api/v2/admin/gifts/{applicationNo}/mark-undeliverable |
진행 중 선물을 전달 불가 처리하고 사유를 저장한다. | path: applicationNo, body: reason |
applicationNo, status, statusName, occurredAt |
| 관리자 | POST | /api/v2/admin/gifts/{applicationNo}/complete-delivery |
검수 완료 선물을 운영자가 전달 완료 처리한다. | path: applicationNo |
applicationNo, status, statusName, occurredAt |
관리자 응답 DTO 요약:
AdminGiftCategoryResponse:categoryId,categoryCode,name,requiresDamageWaiver,isActiveAdminGiftSizePriceResponse:sizeCode,name,basePriceCan,salePriceCan,isActiveAdminGiftOperationStatusResponse:applicationNo,status,statusName,occurredAt
클라이언트 구현 참고
- 선물 푸시 딥링크는
deepLinkValue=GIFT_DETAIL,deepLinkId=applicationNo를 사용한다. - 딥링크 진입 후에는
GET /api/v2/gifts/{applicationNo}로 상세를 조회해direction,trackingRequired,recipientAddressRequired를 기준으로 화면과 CTA를 결정한다. - 운송장 미등록 자동취소는 서버 스케줄러가 처리하며, 팬 클라이언트는 상세 조회의
status=CANCELED와 푸시를 기준으로 표시한다. - 모든 응답은 기존
ApiResponse.ok(...)envelope 안의data로 내려간다.