Skip to content

Commit bfd730c

Browse files
authored
Merge pull request #58 from hyejin0810/main
[volume-2] 요구사항 문서, 시퀀스 다이어그램, 클래스 다이어그램, ERD 작성
2 parents 986e0fd + 06befff commit bfd730c

6 files changed

Lines changed: 563 additions & 0 deletions

File tree

build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ subprojects {
4242
dependencyManagement {
4343
imports {
4444
mavenBom("org.springframework.cloud:spring-cloud-dependencies:${project.properties["springCloudDependenciesVersion"]}")
45+
mavenBom("org.testcontainers:testcontainers-bom:${project.properties["testcontainersVersion"]}")
4546
}
4647
}
4748

docs/design/01-requirements.md

Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
📋 감성 이커머스 플랫폼 요구사항 정의서
2+
3+
4+
유저 시나리오 기반 기능 정의 및 요구사항 명세
5+
6+
> ### 📌 1. 유저 시나리오 기반 기능 정의
7+
8+
[시나리오 1] 회원 가입 후 상품 탐색
9+
10+
설명:
11+
신규 사용자가 회원가입을 하고 로그인 후 상품을 탐색한다.
12+
13+
흐름:
14+
1. 사용자는 회원가입을 한다.
15+
2. 로그인 후 자신의 정보를 조회한다.
16+
3. 상품 목록을 조회한다.
17+
4. 특정 브랜드 상품만 필터링하여 조회한다.
18+
5. 상품 상세 정보를 확인한다.
19+
20+
관련 기능:
21+
- 회원가입
22+
- 내 정보 조회
23+
- 상품 목록 조회 (페이징)
24+
- 브랜드 필터링
25+
- 상품 상세 조회
26+
27+
28+
[시나리오 2] 관심 상품 저장 (좋아요)
29+
30+
설명:
31+
사용자는 마음에 드는 상품을 좋아요로 저장하고, 나중에 다시 확인한다.
32+
33+
흐름:
34+
1. 상품 상세 페이지 조회
35+
2. 좋아요 등록
36+
3. 좋아요 목록 조회
37+
4. 좋아요 취소
38+
39+
관련 기능:
40+
- 상품 좋아요 등록
41+
- 상품 좋아요 취소
42+
- 내가 좋아요한 상품 목록 조회
43+
44+
핵심 제약:
45+
- 동일 상품에 중복 좋아요 불가
46+
- 좋아요 취소 시 likes_count 감소
47+
48+
49+
[시나리오 3] 장바구니 담기 및 관리
50+
51+
설명:
52+
사용자는 관심 상품을 장바구니에 담고, 수량을 조절하거나 삭제한다.
53+
54+
흐름:
55+
1. 상품 상세 페이지에서 장바구니 담기
56+
2. 장바구니 목록 조회
57+
3. 수량 변경
58+
4. 장바구니에서 삭제
59+
60+
관련 기능:
61+
- 장바구니 담기
62+
- 장바구니 목록 조회
63+
- 장바구니 수량 변경
64+
- 장바구니 삭제
65+
66+
핵심 제약:
67+
- 동일 상품 중복 담기 시 수량 합산
68+
- 장바구니 최대 상품 개수: 100개
69+
70+
71+
[시나리오 4] 상품 주문
72+
73+
설명:
74+
사용자가 원하는 상품을 주문한다.
75+
76+
흐름:
77+
1. 상품 상세 조회
78+
2. 주문 요청
79+
3. 재고 확인
80+
4. 주문 생성
81+
5. 주문 목록 조회
82+
6. 단일 주문 상세 조회
83+
84+
관련 기능:
85+
- 주문 생성
86+
- 주문 목록 조회 (기간 필터)
87+
- 단일 주문 상세 조회
88+
89+
핵심 제약:
90+
- 재고 부족 시 주문 실패
91+
- 주문 생성과 재고 차감은 하나의 트랜잭션으로 처리
92+
- 주문 시점의 상품 정보는 스냅샷으로 저장
93+
- 사용자는 PENDING 상태의 주문을 취소할 수 있다.
94+
- 주문 취소 시 재고가 복구된다.
95+
96+
97+
[시나리오 5] 관리자 상품 및 주문 관리
98+
99+
설명:
100+
관리자는 브랜드와 상품을 등록 및 관리하고, 주문을 조회한다.
101+
102+
흐름:
103+
1. 브랜드 등록
104+
2. 브랜드 목록 조회
105+
3. 상품 등록
106+
4. 상품 상세 조회
107+
5. 상품 정보 수정
108+
6. 브랜드 삭제 시 해당 브랜드 상품 함께 삭제
109+
7. 주문 목록 조회
110+
8. 단일 주문 상세 조회
111+
9. 주문 승인
112+
113+
관련 기능:
114+
- 브랜드 CRUD
115+
- 상품 CRUD (상세 조회 포함)
116+
- 주문 목록 조회
117+
- 단일 주문 상세 조회
118+
- 주문 승인 (PENDING → CONFIRMED)
119+
120+
제약 조건:
121+
- 상품 등록 시 존재하는 브랜드만 선택 가능
122+
- 상품 수정 시 브랜드 변경 불가
123+
- 삭제는 soft delete 정책 적용
124+
125+
126+
127+
> ### 📌요구사항 명세
128+
129+
[기능 요구사항]
130+
131+
회원:
132+
- 사용자는 회원가입을 할 수 있다.
133+
- 사용자는 자신의 정보를 조회할 수 있다.
134+
- 사용자는 비밀번호를 변경할 수 있다.
135+
136+
상품 조회:
137+
- 사용자는 전체 상품 목록을 조회할 수 있다.
138+
- 사용자는 브랜드로 필터링할 수 있다.
139+
- 상품 목록은 페이징 처리된다.
140+
- 정렬 기준은 최소 latest를 지원한다.
141+
142+
좋아요:
143+
- 사용자는 상품에 좋아요를 등록할 수 있다.
144+
- 동일 상품에 중복 좋아요는 허용되지 않는다.
145+
- 사용자는 좋아요를 취소할 수 있다.
146+
- 사용자는 자신이 좋아요한 상품 목록을 조회할 수 있다.
147+
148+
장바구니:
149+
- 사용자는 상품을 장바구니에 담을 수 있다.
150+
- 사용자는 장바구니 목록을 조회할 수 있다.
151+
- 사용자는 장바구니 상품의 수량을 변경할 수 있다.
152+
- 사용자는 장바구니에서 상품을 삭제할 수 있다.
153+
- 동일 상품 중복 담기 시 수량이 합산된다.
154+
155+
주문:
156+
- 사용자는 상품을 주문할 수 있다.
157+
- 주문 시 재고를 확인해야 한다.
158+
- 주문 성공 시 재고가 차감된다.
159+
- 주문 성공 시 장바구니 데이터가 삭제된다.
160+
- 사용자는 자신의 주문 목록을 조회할 수 있다.
161+
- 사용자는 단일 주문 상세 정보를 조회할 수 있다.
162+
- 사용자는 PENDING 상태의 주문을 취소할 수 있다.
163+
- 주문 취소 시 재고가 복구된다.
164+
165+
관리자:
166+
- 관리자는 브랜드를 등록/수정/삭제할 수 있다.
167+
- 관리자는 상품을 등록/수정/삭제할 수 있다.
168+
- 관리자는 상품 상세 정보를 조회할 수 있다.
169+
- 관리자는 주문 목록을 조회할 수 있다.
170+
- 관리자는 단일 주문 상세 정보를 조회할 수 있다.
171+
- 관리자는 PENDING 상태의 주문을 승인할 수 있다.
172+
- 브랜드 삭제 시 해당 브랜드의 상품은 함께 삭제된다.
173+
174+
175+
[비기능 요구사항]
176+
177+
- 비밀번호는 암호화하여 저장한다.
178+
- 주문과 재고 차감은 트랜잭션으로 처리한다.
179+
- 좋아요는 중복 등록을 방지한다.
180+
- 삭제는 soft delete 정책을 따른다.
181+
- 모든 조회 API는 페이징을 지원한다.
182+
- 장바구니 최대 상품 개수: 100개
183+
- 비밀번호 암호화 알고리즘: BCrypt
184+
- 인증 방식: 헤더 기반 인증 (X-Loopers-LoginId, X-Loopers-LoginPw)
185+
186+
187+
188+
189+
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
# Sequence Diagrams
2+
3+
4+
# 좋아요 등록/취소
5+
6+
7+
```mermaid
8+
sequenceDiagram
9+
title 좋아요 처리 (회원 전용)
10+
actor User as 사용자
11+
participant Auth as Auth Filter
12+
participant API as Like API
13+
participant Service as Like Service
14+
participant Repo as Like Repository
15+
participant ProdRepo as Product Repository
16+
17+
User->>Auth: 좋아요/취소 요청 (X-Loopers-LoginId, LoginPw)
18+
Auth->>Auth: 회원 인증 및 UserId 추출
19+
Auth->>API: 요청 전달 (UserId, ProductId)
20+
21+
activate API
22+
API->>Service: 좋아요/취소 로직 실행
23+
activate Service
24+
25+
alt 등록 요청
26+
Service->>Repo: 기존 존재 여부 확인
27+
Repo-->>Service: 결과 반환
28+
alt 미존재
29+
Service->>Repo: INSERT (Like)
30+
Service->>ProdRepo: UPDATE (likes_count + 1)
31+
Service-->>API: 성공
32+
else 이미 존재
33+
Service-->>API: 400 Bad Request
34+
end
35+
else 취소 요청
36+
Service->>Repo: DELETE (Like)
37+
Note right of Service: 삭제 성공 시에만 count 감소
38+
Service->>ProdRepo: UPDATE (likes_count - 1)
39+
Service-->>API: 성공
40+
end
41+
42+
deactivate Service
43+
API-->>User: 200 OK
44+
deactivate API
45+
46+
```
47+
48+
49+
50+
51+
# 주문 생성(재고확인 및 차감)
52+
53+
```mermaid
54+
55+
sequenceDiagram
56+
title 주문 생성 (재고 차감 및 장바구니 삭제)
57+
58+
actor User as 사용자
59+
participant API as Order API
60+
participant Service as Order Service
61+
participant ProdRepo as Product Repository
62+
participant OrderRepo as Order Repository
63+
participant CartRepo as Cart Repository
64+
65+
User->>API: 주문 생성 요청
66+
activate API
67+
68+
API->>Service: 주문 생성 트랜잭션 시작
69+
activate Service
70+
71+
Service->>ProdRepo: 재고 차감 요청
72+
73+
ProdRepo-->>Service: 성공 여부 반환
74+
75+
alt 재고 부족
76+
Service-->>API: 재고 부족 예외 던짐
77+
API-->>User: 400 Bad Request (품절)
78+
else 재고 충분 및 차감 완료
79+
Service->>OrderRepo: 주문(Order) & 상세(OrderItems) 저장
80+
OrderRepo-->>Service: 저장 완료
81+
82+
Service->>CartRepo: 장바구니 데이터 삭제
83+
CartRepo-->>Service: 삭제 완료
84+
85+
Service-->>API: 주문 성공 응답
86+
deactivate Service
87+
API-->>User: 201 Created (주문 완료)
88+
end
89+
deactivate API
90+
```
91+
92+
93+
94+
# 주문상태 변경
95+
96+
97+
```mermaid
98+
99+
sequenceDiagram
100+
title: 주문 상태 변경 (관리자 승인 / 사용자 취소)
101+
102+
%% 참여자 정의 (별칭 사용)
103+
participant U as 사용자/관리자
104+
participant API as Order API
105+
participant S as Order Service
106+
participant OR as Order Repository
107+
participant PR as Product Repository
108+
109+
U->>API: 상태 변경 요청 (Approve/Cancel)
110+
activate API
111+
112+
API->>S: 주문 상태 변경 처리
113+
activate S
114+
115+
S->>OR: 현재 주문 정보 조회
116+
OR-->>S: Order Entity 반환
117+
118+
alt 상태가 PENDING이 아닌 경우
119+
S-->>API: 변경 불가 예외 (400)
120+
API-->>U: 실패 (이미 처리된 주문입니다)
121+
else 상태가 PENDING인 경우
122+
alt 관리자 승인 (Approve)
123+
S->>OR: 상태를 'CONFIRMED'로 업데이트
124+
else 사용자 취소 (Cancel)
125+
S->>PR: 재고 복구 (stock + n)
126+
S->>OR: 상태를 'CANCELLED'로 업데이트
127+
end
128+
S-->>API: 성공 응답
129+
deactivate S
130+
API-->>U: 200 OK (처리 완료)
131+
end
132+
deactivate API
133+
134+
```

0 commit comments

Comments
 (0)