Skip to content

Commit 3f514fc

Browse files
authored
Merge pull request #63 from yeonjiyeon/main
Round2- 이커머스 도메인에 대한 설계 과제 구현
2 parents 3490822 + 4d67127 commit 3f514fc

4 files changed

Lines changed: 765 additions & 0 deletions

File tree

docs/week2/01-requirements.md

Lines changed: 213 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,213 @@
1+
## 유스케이스 명세
2+
3+
---
4+
### 상품 목록 조회
5+
6+
**Main Flow**
7+
8+
1. 사용자가 상품 목록을 요청한다.
9+
2. 시스템은 기본 정렬 기준인 최신순(latest)으로 상품 목록을 조회한다.
10+
3. 시스템은 각 상품의 기본 정보(이름, 가격, 브랜드명, 좋아요 수, 유저의 좋아요 여부)를 반환한다.
11+
4. 상품이 20개를 초과하면 다음 페이지 요청 URL을 함께 반환한다.
12+
5. 사용자는 결과를 확인한다.
13+
14+
**Alternate Flow**
15+
16+
1. 사용자가 정렬 옵션을 “좋아요순”으로 선택한다. 
17+
→ 시스템은 좋아요 수 기준으로 상품을 내림차순 정렬(likes_desc)해 반환한다.
18+
2. 사용자가 정렬 옵션을 “가격순”으로 선택한다.
19+
→ 시스템은 가격 기준으로 오름차순 정렬(likes_desc)해 반환한다.
20+
21+
**Exception Flow**
22+
23+
1. 상품 데이터가 없는 경우
24+
25+
→ “상품이 없습니다.” 문구를 반환한다.
26+
27+
---
28+
29+
### 상품 상세 조회
30+
31+
**Main Flow**
32+
33+
1. 사용자가 특정 상품을 선택한다.
34+
2. 시스템은 해당 상품의 상세 정보(이름, 가격, 브랜드명, 설명, 총 좋아요 수, 유저의 좋아요 여부)를 조회한다.
35+
3. 시스템은 결과를 반환한다.
36+
37+
**Exception Flow**
38+
39+
1. 존재하지 않는 상품 ID 요청
40+
41+
→ 404 에러 반환 (상품을 찾을 수 없습니다).
42+
43+
2. 상품 재고가 0인 경우
44+
45+
→ “품절” 상태로 표시한다.(구매 버튼이 막힌다.)
46+
47+
48+
---
49+
50+
### 브랜드 조회
51+
52+
**Main Flow**
53+
54+
1. 사용자가 상품 목록 또는 상품 상세 페이지에서 브랜드를 클릭한다.
55+
2. 시스템은 해당 브랜드의 기본 정보(이름, 설명)를 조회한다.
56+
3. 시스템은 해당 브랜드에 속한 상품 목록을 함께 조회한다.
57+
4. 시스템은 브랜드 정보와 상품 목록을 함께 반환한다.
58+
59+
---
60+
61+
**Exception Flow**
62+
63+
1. 존재하지 않는 브랜드 ID 요청
64+
65+
→ 404 에러 반환 (“브랜드를 찾을 수 없습니다.”)
66+
67+
2. 해당 브랜드에 등록된 상품이 없는 경우
68+
69+
→ “상품이 없습니다.” 문구를 반환한다.
70+
71+
72+
---
73+
74+
### 상품 좋아요
75+
76+
**Main Flow**
77+
78+
1. 로그인 사용자가 특정 상품에 좋아요 요청을 보낸다.
79+
2. 시스템은 해당 유저가 이미 좋아요를 했는지 확인한다.
80+
3. 좋아요 이력이 없을 경우, 좋아요 정보를 저장한다.
81+
4. 변경된 총 좋아요 수를 계산해 반환한다.
82+
83+
**Alternate Flow**
84+
85+
1. 이미 좋아요한 상품에 다시 좋아요 요청을 보낸 경우
86+
87+
→ 시스템은 중복 저장하지 않고 현재의 좋아요 상태와 총 좋아요 수를 반환한다.
88+
89+
**Exception Flow**
90+
91+
1. 존재하지 않는 상품에 좋아요 요청
92+
93+
→ 404 에러 반환 (상품을 찾을 수 없습니다)
94+
95+
1. 로그인하지 않은 사용자가 요청
96+
97+
→401 Unauthorized(로그인이 필요합니다)
98+
99+
---
100+
101+
### 상품 좋아요 취소
102+
103+
**Main Flow**
104+
105+
1. 로그인 사용자가 특정 상품의 좋아요 취소 요청을 보낸다.
106+
2. 시스템은 해당 유저의 좋아요 존재 여부를 확인한다.
107+
3. 좋아요 이력이 있을 경우, 좋아요 정보를 삭제한다.
108+
4. 변경된 총 좋아요 수를 계산해 반환한다.
109+
110+
**Alternate Flow**
111+
112+
1. 좋아요하지 않은 상품에 취소 요청을 보낸 경우
113+
114+
→ 시스템은 아무 동작도 수행하지 않고 현재 상태와 총 좋아요 수를 반환한다.
115+
116+
**Exception Flow**
117+
118+
1. 존재하지 않는 상품 ID 요청
119+
120+
`404 Not Found` (상품을 찾을 수 없습니다).
121+
122+
2. 로그인하지 않은 사용자가 요청
123+
124+
`401 Unauthorized` (로그인이 필요합니다).
125+
126+
---
127+
128+
### 내가 좋아요 한 상품 목록 조회
129+
130+
**Main Flow**
131+
132+
1. 로그인 사용자가 자신이 좋아요한 상품 목록을 요청한다.
133+
2. 시스템은 해당 유저의 좋아요 테이블을 조회한다.
134+
3. 좋아요한 상품들의 기본 정보(상품명, 가격, 브랜드명, 좋아요 수 등)를 함께 반환한다.
135+
4. 결과는 페이지네이션 형태로 제공된다.
136+
137+
**Exception Flow**
138+
139+
1. 로그인하지 않은 사용자가 요청
140+
141+
`401 Unauthorized` (로그인이 필요합니다).
142+
143+
1. 사용자가 좋아요한 상품이 없는 경우
144+
145+
→ 시스템은 빈 리스트를 반환한다.
146+
147+
---
148+
149+
### **주문 생성 및 결제 요청**
150+
151+
**Main Flow**
152+
153+
1. 사용자가 주문 요청을 보낸다.
154+
2. 시스템은 각 상품의 재고를 확인한다.
155+
3. 시스템은 사용자의 포인트 잔액을 조회한다.
156+
4. 조건이 모두 충족되면 다음 처리를 수행한다.
157+
1. 상품의 재고가 차감된다.
158+
2. 사용자의 포인트가 차감된다.
159+
3. 시스템이 주문 정보를 저장한다.
160+
4. 주문 정보를 외부 시스템에 전송한다. (Mock 처리)
161+
5. 결제가 성공하면 주문 완료 응답을 반환한다.
162+
163+
**Alternate Flow**
164+
165+
1. 사용자가 여러 상품을 동시에 주문한 경우
166+
167+
→ 시스템은 각 상품의 재고를 모두 확인하고, 총 주문 금액이 사용자의 포인트 잔액보다 적은 경우에만 주문을 진행한다.
168+
169+
모든 조건이 충족되면 여러 상품을 한 번에 결제 처리한다.
170+
171+
**Exception Flow**
172+
173+
1. 포인트 부족 → “잔액이 부족합니다.” 메시지 반환
174+
175+
2. 재고 부족 → “품절된 상품입니다.” 메시지 반환
176+
177+
3. 외부 시스템 오류 (Mock 실패 등) → 주문 데이터 롤백 후 “결제 실패” 메시지 반환
178+
179+
4. 네트워크 오류 → “네트워크 오류가 발생했습니다. 다시 시도해주세요.” 메시지 반환
180+
181+
---
182+
183+
### 유저의 주문 목록 조회
184+
185+
**Main Flow**
186+
187+
1. 사용자가 주문 내역을 요청한다.
188+
2. 시스템은 해당 사용자의 주문 목록을 조회한다.
189+
3. 각 주문에 대해 요약 정보(주문 ID, 주문일시, 총액, 결제 상태 등)를 반환한다.
190+
4. 사용자는 결과를 확인한다.
191+
192+
**Exception Flow**
193+
194+
1. 주문 내역이 없는 경우 → 빈 리스트와 “주문 내역이 없습니다.” 메시지 반환
195+
2. 로그인하지 않은 사용자가 요청
196+
197+
`401 Unauthorized` (로그인이 필요합니다).
198+
199+
---
200+
201+
### 단일 주문 상세 조회
202+
203+
**Main Flow**
204+
205+
1. 사용자가 주문 ID를 지정하여 상세 조회 요청을 보낸다.
206+
2. 시스템은 해당 주문을 조회한다.
207+
3. 주문 정보(상품명, 수량, 금액, 결제 수단, 배송 상태 등)를 반환한다.
208+
209+
**Exception Flow**
210+
211+
1. 로그인하지 않은 사용자가 요청→ `401 Unauthorized` (로그인이 필요합니다).
212+
2. 존재하지 않는 주문 ID 요청 → 404 에러 반환 (“주문을 찾을 수 없습니다.”)
213+
3. 요청한 유저가 주문자와 불일치할 경우 → 403 Forbidden (“접근 권한이 없습니다.”)

0 commit comments

Comments
 (0)