| 필드 | 값 | 프론트엔드 활용 로직 |
|---|---|---|
id |
16 |
CardType.id |
title |
'포토카드 16번' |
CardType.title |
author |
'user16' |
CardType.authorId |
total |
10 |
CardType.totalIssuedCount |
myOwnedCount |
10 |
(유저가 소유한 총 수량) |
myListedTotal |
7 |
(나의 판매 등록 총합) 5 + 2 |
myUnlistedCount |
3 |
(마이 갤러리 잔여 수량) 10 - 7 |
saleOptions |
(아래 표 참고) | SaleListing 리스트 |
JavaScript
`// Data for Card ID 16 { id: 16, title: '포토카드 16번', genre: '사물', grade: 'LEGENDARY', author: 'user16', price: 14, total: 10, // CardType.totalIssuedCount image: 'img_card', created_at: '2025-12-04T10:00:00',
// (추가 데이터) 유저의 소유 및 리스팅 현황 myOwnedCount: 10, // 유저가 소유한 총 수량 myListedTotal: 7, // 판매 등록 수량 합계 myUnlistedCount: 3, // 마이 갤러리 잔여 수량 (10 - 7)
saleOptions: [ // SaleListing 정보 { type: 'SALE', remain: 5, status: 'AVAILABLE', }, // 5장 판매 등록 (판매 중) { type: 'EXCHANGE', remain: 2, status: 'AVAILABLE', }, // 2장 교환 등록 (교환 제안 대기 중 - 제안이 없는 상태) ], },`
조회 대상: 모든 CardType 데이터 (위 통합 데이터)
| 포토카드 | 전체 잔여 수량 | SOLD OUT 판단 | 마켓 표시 내용 |
|---|---|---|---|
| 15번 | 2 (SALE) + 1 (EXCHANGE) = 3장 |
SOLD OUT 아님 | 가격 6, 판매 중 (3장 남음) |
| 16번 | 5 (SALE) + 2 (EXCHANGE) = 7장 |
SOLD OUT 아님 | 가격 14, 판매 중 (7장 남음) |
조회 대상: 유저가 등록한 SaleListing 데이터 (saleOptions 배열을 항목별로 분리)
| 포토카드 | saleOption 항목 | type | remain | status | 페이지 표시 상태 | SOLD OUT 아이콘 |
|---|---|---|---|---|---|---|
| 15번 | 항목 1 | SALE |
2 | AVAILABLE |
판매 중 | X |
| 15번 | 항목 2 | EXCHANGE |
1 | EXCHANGE_OFFER |
교환 제시 대기 중 | X |
| 16번 | 항목 3 | SALE |
5 | AVAILABLE |
판매 중 | X |
| 16번 | 항목 4 | EXCHANGE |
2 | AVAILABLE |
판매 중 (교환 대기) | X |
만약 포토카드 15번의 remain이 0이었다면?
saleOptions: [{ type: 'SALE', remain: 0, status: 'SOLD_OUT' }]이 경우, 나의 판매 포토카드에는 해당 항목이
type: SALE,remain: 0, 상태: 품절로 표시됩니다.
조회 대상: 유저가 소유한 미등록 재고 (myUnlistedCount > 0인 데이터)
| 포토카드 | 잔여 수량 (myUnlistedCount) | 표시 내용 |
|---|---|---|
| 15번 | 4장 | 포토카드 15번 (4장 소유) |
| 16번 | 3장 | 포토카드 16번 (3장 소유) |
핵심: 마이 갤러리에는 유저가 소유하고 있는 총 7장(4+3)의 포토카드가 미등록 재고로 표시됩니다.
판매중