Skip to content

Commit babe502

Browse files
seungjoopetseungjoo.jeong
and
seungjoo.jeong
authored
1단계 - 리팩터링(상품) (#201)
* feat(step1) Product 구현 - legacy 코드와 분리하기 위해 기존 파일을 모두 legacy/ 에 배치함 - Product 도메인 생성 - 0원 이상이라는 규칙을 갖는 ProductPrice 생성 - notEmpty 규칙을 갖는 Name을 통해 비속어가 없는 규칙까지 포함한 ProductName을 생성하는 ProductNameFactory추가 - 상품 가격이 변경될 때 메뉴의 노출 여부를 조정하기 위해 event를 발행하고, menu는 rearranger를 통해 메뉴의 노출여부를 재조정함 * feat(findAll) 누락된 상품의 findAll 추가 * fix(gitignore) gitignore 수정 & 누락된 commit push * fix(revice) 리뷰반영 - 클래스 내 선언순서 조정 - 파라미터 이름 변경 * refactor(srp) SRP를 지킬 수 있도록 UseCase 분리 - ProductUseCase에 있는 책임을 분리함 * refactor(test) 도메인에 대한 테스트코드 작성 - 도메인 테스트코드 작성 - 파라미터 유효성 검사를 위한 Utils 생성 * feat(test) 테스트코드 추가 - 누락된 테스트코드 추가 - ContainsProfanityException 추가 * feat(test) usecase에 대한 테스트코드 작성 - usecase 테스트코드 작성 - 테스트 도우미 fixtures, accessor 추가 * refator(create) 엔티티 생성 메서드명 변경 - of -> create로 변경 * refactor(name) Name을 global 레벨로 분리 * refactor(naming) 변수명 변경 - eventPublisher.publish -> productPriceChangeEvent.publish 변경 --------- Co-authored-by: seungjoo.jeong <[email protected]>
1 parent cf87b9d commit babe502

File tree

88 files changed

+2061
-164
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

88 files changed

+2061
-164
lines changed

.gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ build/
2222
*.iws
2323
*.iml
2424
*.ipr
25-
out/
25+
#out/
2626

2727
### NetBeans ###
2828
/nbproject/private/

README.md

+61-55
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,20 @@ docker compose -p kitchenpos up -d
1313

1414
- 상품을 등록할 수 있다.
1515
- 상품의 가격이 올바르지 않으면 등록할 수 없다.
16-
- 상품의 가격은 0원 이상이어야 한다.
16+
- 상품의 가격은 0원 이상이어야 한다.
1717
- 상품의 이름이 올바르지 않으면 등록할 수 없다.
18-
- 상품의 이름에는 비속어가 포함될 수 없다.
18+
- 상품의 이름에는 비속어가 포함될 수 없다.
1919
- 상품의 가격을 변경할 수 있다.
2020
- 상품의 가격이 올바르지 않으면 변경할 수 없다.
21-
- 상품의 가격은 0원 이상이어야 한다.
21+
- 상품의 가격은 0원 이상이어야 한다.
2222
- 상품의 가격이 변경될 때 메뉴의 가격이 메뉴에 속한 상품 금액의 합보다 크면 메뉴가 숨겨진다.
2323
- 상품의 목록을 조회할 수 있다.
2424

2525
### 메뉴 그룹
2626

2727
- 메뉴 그룹을 등록할 수 있다.
2828
- 메뉴 그룹의 이름이 올바르지 않으면 등록할 수 없다.
29-
- 메뉴 그룹의 이름은 비워 둘 수 없다.
29+
- 메뉴 그룹의 이름은 비워 둘 수 없다.
3030
- 메뉴 그룹의 목록을 조회할 수 있다.
3131

3232
### 메뉴
@@ -35,14 +35,14 @@ docker compose -p kitchenpos up -d
3535
- 상품이 없으면 등록할 수 없다.
3636
- 메뉴에 속한 상품의 수량은 0 이상이어야 한다.
3737
- 메뉴의 가격이 올바르지 않으면 등록할 수 없다.
38-
- 메뉴의 가격은 0원 이상이어야 한다.
38+
- 메뉴의 가격은 0원 이상이어야 한다.
3939
- 메뉴에 속한 상품 금액의 합은 메뉴의 가격보다 크거나 같아야 한다.
4040
- 메뉴는 특정 메뉴 그룹에 속해야 한다.
4141
- 메뉴의 이름이 올바르지 않으면 등록할 수 없다.
42-
- 메뉴의 이름에는 비속어가 포함될 수 없다.
42+
- 메뉴의 이름에는 비속어가 포함될 수 없다.
4343
- 메뉴의 가격을 변경할 수 있다.
4444
- 메뉴의 가격이 올바르지 않으면 변경할 수 없다.
45-
- 메뉴의 가격은 0원 이상이어야 한다.
45+
- 메뉴의 가격은 0원 이상이어야 한다.
4646
- 메뉴에 속한 상품 금액의 합은 메뉴의 가격보다 크거나 같아야 한다.
4747
- 메뉴를 노출할 수 있다.
4848
- 메뉴의 가격이 메뉴에 속한 상품 금액의 합보다 높을 경우 메뉴를 노출할 수 없다.
@@ -53,13 +53,13 @@ docker compose -p kitchenpos up -d
5353

5454
- 주문 테이블을 등록할 수 있다.
5555
- 주문 테이블의 이름이 올바르지 않으면 등록할 수 없다.
56-
- 주문 테이블의 이름은 비워 둘 수 없다.
56+
- 주문 테이블의 이름은 비워 둘 수 없다.
5757
- 빈 테이블을 해지할 수 있다.
5858
- 빈 테이블로 설정할 수 있다.
5959
- 완료되지 않은 주문이 있는 주문 테이블은 빈 테이블로 설정할 수 없다.
6060
- 방문한 손님 수를 변경할 수 있다.
6161
- 방문한 손님 수가 올바르지 않으면 변경할 수 없다.
62-
- 방문한 손님 수는 0 이상이어야 한다.
62+
- 방문한 손님 수는 0 이상이어야 한다.
6363
- 빈 테이블은 방문한 손님 수를 변경할 수 없다.
6464
- 주문 테이블의 목록을 조회할 수 있다.
6565

@@ -73,7 +73,7 @@ docker compose -p kitchenpos up -d
7373
- 매장 주문은 주문 항목의 수량이 0 미만일 수 있다.
7474
- 매장 주문을 제외한 주문의 경우 주문 항목의 수량은 0 이상이어야 한다.
7575
- 배달 주소가 올바르지 않으면 배달 주문을 등록할 수 없다.
76-
- 배달 주소는 비워 둘 수 없다.
76+
- 배달 주소는 비워 둘 수 없다.
7777
- 빈 테이블에는 매장 주문을 등록할 수 없다.
7878
- 숨겨진 메뉴는 주문할 수 없다.
7979
- 주문한 메뉴의 가격은 실제 메뉴 가격과 일치해야 한다.
@@ -96,65 +96,71 @@ docker compose -p kitchenpos up -d
9696

9797
## 용어 사전
9898

99+
### 이름
100+
101+
| 한글명 | 영문명 | 설명 |
102+
|-----|------|----------------------|
103+
| 이름 | name | 비어있지 않은 이름. 음식이름, 메뉴이름의 후보가 된다. |
104+
99105
### 상품
100106

101-
| 한글명 | 영문명 | 설명 |
102-
| --- | --- | --- |
103-
| 상품 | product | 메뉴를 관리하는 기준이 되는 데이터 |
104-
| 이름 | displayed name | 음식을 상상하게 만드는 중요한 요소 |
107+
| 한글명 | 영문명 | 설명 |
108+
|-----|----------------|---------------------|
109+
| 상품 | product | 메뉴를 관리하는 기준이 되는 데이터 |
110+
| 이름 | displayed name | 음식을 상상하게 만드는 중요한 요소 |
105111

106112
### 메뉴
107113

108-
| 한글명 | 영문명 | 설명 |
109-
| --- | --- | --- |
110-
| 금액 | amount | 가격 * 수량 |
111-
| 메뉴 | menu | 메뉴 그룹에 속하는 실제 주문 가능 단위 |
112-
| 메뉴 그룹 | menu group | 각각의 메뉴를 성격에 따라 분류하여 묶어둔 그룹 |
113-
| 메뉴 상품 | menu product | 메뉴에 속하는 수량이 있는 상품 |
114-
| 숨겨진 메뉴 | not displayed menu | 주문할 수 없는 숨겨진 메뉴 |
115-
| 이름 | displayed name | 음식을 상상하게 만드는 중요한 요소 |
114+
| 한글명 | 영문명 | 설명 |
115+
|--------|--------------------|----------------------------|
116+
| 금액 | amount | 가격 * 수량 |
117+
| 메뉴 | menu | 메뉴 그룹에 속하는 실제 주문 가능 단위 |
118+
| 메뉴 그룹 | menu group | 각각의 메뉴를 성격에 따라 분류하여 묶어둔 그룹 |
119+
| 메뉴 상품 | menu product | 메뉴에 속하는 수량이 있는 상품 |
120+
| 숨겨진 메뉴 | not displayed menu | 주문할 수 없는 숨겨진 메뉴 |
121+
| 이름 | displayed name | 음식을 상상하게 만드는 중요한 요소 |
116122

117123
### 매장 주문
118124

119-
| 한글명 | 영문명 | 설명 |
120-
| --- | --- | --- |
121-
| 방문한 손님 수 | number of guests | 식기가 필요한 사람 수. 필수 사항은 아니며 주문은 0명으로 등록할 수 있다. |
122-
| 빈 테이블 | empty table | 주문을 등록할 수 없는 주문 테이블 |
123-
| 서빙 | served | 조리가 완료되어 음식이 나갈 수 있는 단계 |
124-
| 완료 | completed | 고객이 모든 식사를 마치고 결제를 완료한 단계 |
125-
| 접수 | accepted | 주문을 받고 음식을 조리하는 단계 |
126-
| 접수 대기 | waiting | 주문이 생성되어 매장으로 전달된 단계 |
127-
| 주문 | order | 매장에서 식사하는 고객 대상. 손님들이 매장에서 먹을 수 있도록 조리된 음식을 가져다준다. |
128-
| 주문 상태 | order status | 주문이 생성되면 매장에서 주문을 접수하고 고객이 음식을 받기까지의 단계를 표시한다. |
129-
| 주문 테이블 | order table | 매장에서 주문이 발생하는 영역 |
130-
| 주문 항목 | order line item | 주문에 속하는 수량이 있는 메뉴 |
125+
| 한글명 | 영문명 | 설명 |
126+
|----------|------------------|----------------------------------------------------|
127+
| 방문한 손님 수 | number of guests | 식기가 필요한 사람 수. 필수 사항은 아니며 주문은 0명으로 등록할 수 있다. |
128+
| 빈 테이블 | empty table | 주문을 등록할 수 없는 주문 테이블 |
129+
| 서빙 | served | 조리가 완료되어 음식이 나갈 수 있는 단계 |
130+
| 완료 | completed | 고객이 모든 식사를 마치고 결제를 완료한 단계 |
131+
| 접수 | accepted | 주문을 받고 음식을 조리하는 단계 |
132+
| 접수 대기 | waiting | 주문이 생성되어 매장으로 전달된 단계 |
133+
| 주문 | order | 매장에서 식사하는 고객 대상. 손님들이 매장에서 먹을 수 있도록 조리된 음식을 가져다준다. |
134+
| 주문 상태 | order status | 주문이 생성되면 매장에서 주문을 접수하고 고객이 음식을 받기까지의 단계를 표시한다. |
135+
| 주문 테이블 | order table | 매장에서 주문이 발생하는 영역 |
136+
| 주문 항목 | order line item | 주문에 속하는 수량이 있는 메뉴 |
131137

132138
### 배달 주문
133139

134-
| 한글명 | 영문명 | 설명 |
135-
| --- | --- | --- |
136-
| 배달 | delivering | 배달원이 매장을 방문하여 배달 음식의 픽업을 완료하고 배달을 시작하는 단계 |
137-
| 배달 대행사 | delivery agency | 준비한 음식을 고객에게 직접 배달하는 서비스 |
138-
| 배달 완료 | delivered | 배달원이 주문한 음식을 고객에게 배달 완료한 단계 |
139-
| 서빙 | served | 조리가 완료되어 음식이 나갈 수 있는 단계 |
140-
| 완료 | completed | 배달 및 결제 완료 단계 |
141-
| 접수 | accepted | 주문을 받고 음식을 조리하는 단계 |
142-
| 접수 대기 | waiting | 주문이 생성되어 매장으로 전달된 단계 |
143-
| 주문 | order | 집이나 직장 등 고객이 선택한 주소로 음식을 배달한다. |
144-
| 주문 상태 | order status | 주문이 생성되면 매장에서 주문을 접수하고 고객이 음식을 받기까지의 단계를 표시한다. |
145-
| 주문 항목 | order line item | 주문에 속하는 수량이 있는 메뉴 |
140+
| 한글명 | 영문명 | 설명 |
141+
|--------|-----------------|------------------------------------------------|
142+
| 배달 | delivering | 배달원이 매장을 방문하여 배달 음식의 픽업을 완료하고 배달을 시작하는 단계 |
143+
| 배달 대행사 | delivery agency | 준비한 음식을 고객에게 직접 배달하는 서비스 |
144+
| 배달 완료 | delivered | 배달원이 주문한 음식을 고객에게 배달 완료한 단계 |
145+
| 서빙 | served | 조리가 완료되어 음식이 나갈 수 있는 단계 |
146+
| 완료 | completed | 배달 및 결제 완료 단계 |
147+
| 접수 | accepted | 주문을 받고 음식을 조리하는 단계 |
148+
| 접수 대기 | waiting | 주문이 생성되어 매장으로 전달된 단계 |
149+
| 주문 | order | 집이나 직장 등 고객이 선택한 주소로 음식을 배달한다. |
150+
| 주문 상태 | order status | 주문이 생성되면 매장에서 주문을 접수하고 고객이 음식을 받기까지의 단계를 표시한다. |
151+
| 주문 항목 | order line item | 주문에 속하는 수량이 있는 메뉴 |
146152

147153
### 포장 주문
148154

149-
| 한글명 | 영문명 | 설명 |
150-
| --- | --- | --- |
151-
| 서빙 | served | 조리가 완료되어 음식이 나갈 수 있는 단계 |
152-
| 완료 | completed | 고객이 음식을 수령하고 결제를 완료한 단계 |
153-
| 접수 | accepted | 주문을 받고 음식을 조리하는 단계 |
154-
| 접수 대기 | waiting | 주문이 생성되어 매장으로 전달된 단계 |
155-
| 주문 | order | 포장하는 고객 대상. 고객이 매장에서 직접 음식을 수령한다. |
156-
| 주문 상태 | order status | 주문이 생성되면 매장에서 주문을 접수하고 고객이 음식을 받기까지의 단계를 표시한다. |
157-
| 주문 항목 | order line item | 주문에 속하는 수량이 있는 메뉴 |
155+
| 한글명 | 영문명 | 설명 |
156+
|-------|-----------------|------------------------------------------------|
157+
| 서빙 | served | 조리가 완료되어 음식이 나갈 수 있는 단계 |
158+
| 완료 | completed | 고객이 음식을 수령하고 결제를 완료한 단계 |
159+
| 접수 | accepted | 주문을 받고 음식을 조리하는 단계 |
160+
| 접수 대기 | waiting | 주문이 생성되어 매장으로 전달된 단계 |
161+
| 주문 | order | 포장하는 고객 대상. 고객이 매장에서 직접 음식을 수령한다. |
162+
| 주문 상태 | order status | 주문이 생성되면 매장에서 주문을 접수하고 고객이 음식을 받기까지의 단계를 표시한다. |
163+
| 주문 항목 | order line item | 주문에 속하는 수량이 있는 메뉴 |
158164

159165
## 모델링
160166

build.gradle

+4
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ dependencies {
2222
implementation 'org.springframework.boot:spring-boot-starter-validation'
2323
implementation 'org.springframework.boot:spring-boot-starter-web'
2424
implementation 'org.flywaydb:flyway-mysql'
25+
implementation 'com.google.guava:guava:32.0.1-jre'
26+
implementation 'org.apache.commons:commons-lang3:3.13.0'
27+
implementation 'org.apache.commons:commons-collections4:4.4'
28+
2529
runtimeOnly 'mysql:mysql-connector-java'
2630
testImplementation 'org.springframework.boot:spring-boot-starter-test'
2731
testRuntimeOnly 'com.h2database:h2'

0 commit comments

Comments
 (0)