프론트-백엔드 API 연동 명세
프론트엔드 Mock 데이터 기준으로 작성 백엔드는 이 응답 형식에 맞춰 구현하면 프론트 수정 최소화 가능
1. 타임딜 목록 조회
GET /api/timedeals
Response:
[
{
"id": 1,
"productName": "수의사가 직접 설계한 유기농 강아지 사료 2kg",
"productImage": "https://이미지URL",
"images": [
"https://이미지URL1",
"https://이미지URL2"
],
"features": [
"100% 유기농 인증 원료만 사용",
"수의사 10인 공동 설계"
],
"originalPrice": 50000,
"discountPrice": 25000,
"discountRate": 50,
"stock": 51,
"totalStock": 100,
"startTime": "2026-03-05T10:00:00.000Z",
"endTime": "2026-03-05T11:00:00.000Z",
"status": "ACTIVE"
}
]status 값:
ACTIVE→ 진행 중UPCOMING→ 예정SOLDOUT→ 품절
2. 타임딜 상세 조회
GET /api/timedeals/{id}
Response: 목록 조회의 단일 객체와 동일
3. 주문 생성
POST /api/orders
Request:
{
"timedealId": 1,
"quantity": 1
}Response:
{
"orderId": "order-001",
"timedealId": 1,
"productName": "상품명",
"quantity": 1,
"totalPrice": 25000,
"status": "PENDING",
"createdAt": "2026-03-05T10:00:00.000Z"
}재고 소진 시:
{
"status": 409,
"success": false,
"error": {
"code": "SOLD_OUT",
"message": "재고가 소진되었습니다."
}
}4. 주문 상태 조회
GET /api/orders/{orderId}
Response:
{
"orderId": "order-001",
"timedealId": 1,
"productName": "상품명",
"quantity": 1,
"totalPrice": 25000,
"status": "COMPLETED",
"failReason": null,
"createdAt": "2026-03-05T10:00:00.000Z"
}status 값:
PENDING→ 결제 대기COMPLETED→ 결제 완료FAILED→ 결제 실패
실패 시 failReason 예시: "재고 소진", "잔액 부족", "결제 승인 거절"
5. 타임딜 등록 (관리자)
POST /api/timedeals
Request:
{
"productName": "상품명 | 부제목",
"originalPrice": 50000,
"discountPrice": 25000,
"stock": 100,
"totalStock": 100,
"startTime": "2026-03-05T10:00:00.000Z",
"endTime": "2026-03-05T11:00:00.000Z",
"status": "UPCOMING",
"images": ["https://이미지URL1", "https://이미지URL2"],
"description": "상품 설명",
"tags": ["강아지", "간식"]
}Response: 생성된 타임딜 단일 객체 (목록 조회의 단일 객체와 동일 + id 포함)
6. 타임딜 수정 (관리자)
PUT /api/timedeals/{id}
Request: POST와 동일한 구조 (변경할 필드만 포함해도 OK)
Response: 수정된 타임딜 단일 객체
7. 타임딜 삭제 (관리자)
DELETE /api/timedeals/{id}
Response: 204 No Content (body 없음)
주의사항
- 모든 응답은 배열/객체 직접 반환 (공통 래퍼 불필요)
- 타임딜 목록은
startTime기준 정렬 권장 stock은 실시간 Redis 재고 반영discountRate는 백엔드에서 계산해서 내려줄 것- 계산식:
round((1 - discountPrice / originalPrice) * 100)
- 계산식:
- 관리자 API (POST/PUT/DELETE /api/timedeals)는 인증 토큰 필수
- Header:
Authorization: Bearer {accessToken} - 권한 없을 시 403 Forbidden 반환
- Header: