4.6 KiB
4.6 KiB
일반용 이벤트 상세 API 클라이언트 구현 프롬프트
아래 프롬프트는 이번에 구현한 서버 계약이다. 운영 배포 완료를 의미하지 않는다.
기존 앱의 네트워크 계층과 화면 패턴을 사용해 일반 사용자용 이벤트 상세 조회를 연결해 주세요.
관리자 상세 API를 만들거나 기존 이벤트 목록/팝업 API를 변경하지 마세요.
[요청]
GET {기존 API_BASE_URL}/api/v2/events/{id}
- id: 기존 이벤트 목록/배너의 이벤트 id. 양수 64비트 정수이며 필수입니다.
- 요청 본문과 query parameter는 없습니다.
- 비로그인 호출이 가능합니다. 비로그인에는 Authorization 헤더를 보내지 마세요.
- 로그인 시 기존 Authorization: Bearer {accessToken}을 사용하세요.
- 오류 메시지 언어는 기존 Accept-Language 정책을 따릅니다.
- 이벤트 언어는 Accept-Language가 아니라 서버의 국가 판정에 따릅니다.
CloudFront-Viewer-Country 및 기존 서버 보정 정책을 사용하므로 국가를 임의로 바꾸지 마세요.
[성공: HTTP 200, application/json]
{
"success": true,
"message": null,
"data": {
"id": 123,
"thumbnailImageUrl": "https://cdn.example.com/event/thumbnail.png",
"detailImageUrl": "https://cdn.example.com/event/detail.png",
"popupImageUrl": null,
"link": "https://example.com/promotion"
},
"errorProperty": null
}
- data는 배열이 아닌 이벤트 단일 객체입니다.
- id: 정수, thumbnailImageUrl: 문자열.
- detailImageUrl, popupImageUrl, link: 문자열 또는 null.
- title, content, startDate, endDate, lang, isAdult, isPopup, totalCount는 반환하지 않습니다.
- 이미지 URL은 서버가 구성한 값을 사용하고 CDN 주소를 다시 붙이지 마세요.
- link는 이미지 URL과 별개인 이동 목적지이며 저장값 그대로 반환합니다.
- 상세 이미지가 null이어도 link가 있는 정상 이벤트일 수 있습니다.
- 이미지와 link가 모두 있을 때의 우선순위나 자동 이동은 API가 결정하지 않습니다.
기존 앱의 표시/이동 정책을 유지하고, 임의로 자동 리다이렉트를 추가하지 마세요.
- 서버는 link의 URL 형식이나 허용 스킴을 검증하지 않습니다.
링크 열기 시 기존 앱의 안전한 외부 URL 처리 정책을 적용하세요.
[조회 불가: HTTP 200]
{
"success": false,
"message": "잘못된 요청입니다.",
"data": null,
"errorProperty": null
}
- 미존재 ID, 0/음수 ID, 비활성, 시작 전/종료 후, 언어 불일치, 성인 조건 불일치가 동일한 응답입니다.
- 숫자가 아니거나 Long 범위를 넘는 id는 HTTP 200 실패 응답과 기존 공통 오류 메시지를 반환합니다.
- HTTP 200만으로 성공 판정하지 말고 success=true와 유효한 data를 확인하세요.
- message는 지역화되므로 문구로 오류 유형을 분기하지 마세요.
- 서버 내부 messageKey는 응답에 없으며 미존재와 비노출 사유를 구별할 수 없습니다.
- 이 API의 조회 불가가 HTTP 404라고 가정하지 마세요.
- 네트워크 오류와 비정상 HTTP 상태/인증 오류는 기존 앱의 공통 처리 정책을 유지하세요.
모든 오류 응답이 위 JSON 형태라고 가정하지 마세요.
[서버 노출 정책: 기존 GET /event와 동일]
- 활성이고 시작 시각 <= 현재 시각 <= 종료 시각인 이벤트만 조회됩니다.
- 서버 판정 국가가 JP이면 JA 이벤트, 그 외에는 KO 이벤트만 조회됩니다.
- 비로그인/성인 미인증 회원: isAdult=null 또는 false 이벤트.
- 성인 인증 회원: isAdult=null 또는 true 이벤트. 기존 정책상 false 이벤트는 제외됩니다.
- 관리자 계정: 성인 조건만 생략하며 활성/기간/언어 조건은 유지됩니다.
- 위 정책은 서버가 적용합니다. 클라이언트가 목록과 다른 우회 조회를 구현하지 마세요.
- 로그인 상태/국가가 바뀌면 이전 조회 결과를 무조건 재사용하지 마세요.
[클라이언트 수용 기준]
- 이벤트 id로 상세 API를 호출해 loading/success/unavailable/network-error를 구분합니다.
- nullable 이미지/link 및 링크만 있는 이벤트를 정상 처리합니다.
- HTTP 200 success=false에서도 기존 데이터를 성공 화면으로 표시하지 않습니다.
- 로그인 여부에 따른 헤더와 실제 서버 결과를 사용하고, 응답에 없는 제목/본문/날짜를 만들어 내지 않습니다.
- 기존 목록 GET /event, 팝업 GET /event/popup, 관리자 API는 그대로 유지합니다.