Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

3단계 - 기능 우선 패키지 구성하기 #493

Open
wants to merge 43 commits into
base: dongock
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
baf77e5
Doc(pos) : 용어 정리(페어 프로그래밍)
Dongock Feb 4, 2025
1400ef8
Doc(pos) : 용어 정리(페어 프로그래밍 피드백 반영 건)
Dongock Feb 5, 2025
c01d4a5
Doc(pos) : 용어 정리(페어 프로그래밍 피드백 반영 건)
Dongock Feb 5, 2025
4294850
Doc(pos) : 용어 정리(페어 프로그래밍 피드백 반영 건)
Dongock Feb 5, 2025
c8d4692
Doc(pos) : 용어 정리(피드백 반영 건) - 비속어 추가
Dongock Feb 6, 2025
685b015
Doc(pos) : 용어 정리(피드백 반영 건) - 메뉴 상품 예시 추가
Dongock Feb 6, 2025
a11adeb
Doc(pos) : 용어 정리(피드백 반영 건) - 비속어 추가
Dongock Feb 6, 2025
80fce88
Doc(pos) : 용어 정리(피드백 반영 건) - 메뉴 상품 예시 추가
Dongock Feb 6, 2025
2872bd4
Merge branch 'step2-1' into step2-2
Dongock Feb 10, 2025
f639527
Doc(pos) : 용어 정리(피드백 반영 건) - 요구 사항 적용
Dongock Feb 10, 2025
f3f859d
Doc(pos) : 모델링 - 메뉴 작성
Dongock Feb 10, 2025
fef56bf
Doc(pos) : 모델링 - 주문 작성
Dongock Feb 10, 2025
baa401d
Doc(pos) : 리팩토링 - 용어사전에 배달 주소 추가
Dongock Feb 10, 2025
8b6166d
Doc(pos) : 모델링 - 배달 주문 작성
Dongock Feb 10, 2025
d4137f2
Doc(pos) : 모델링 - 포장 주문 작성
Dongock Feb 10, 2025
35162e9
Doc(pos) : 모델링 - 매장 주문 작성
Dongock Feb 10, 2025
86256a6
Doc(pos) : 모델링 - 매장 테이블 주문 작성
Dongock Feb 10, 2025
3de9bbf
Doc(pos) : 모델링 - 외부 시스템 주문 작성
Dongock Feb 10, 2025
b98fa4a
Merge branch 'dongock' into step2-2
Dongock Feb 10, 2025
bf12cff
Doc(pos) : 모델링 - mermaid를 통한 모델링 전개도 생성
Dongock Feb 13, 2025
9214a45
Doc(pos) : 모델링 - mermaid를 통한 모델링 전개도 생성
Dongock Feb 13, 2025
ef46a24
Doc(pos) : 모델링 - mermaid를 통한 모델링 전개도 생성
Dongock Feb 13, 2025
3464a7d
Doc(pos) : 모델링 - mermaid를 통한 모델링 전개도 생성 및 모델링 완성
Dongock Feb 13, 2025
234ae23
Merge branch 'step2-2' of https://github.com/Dongock/ddd-strategic-de…
Dongock Feb 13, 2025
0b08f06
Doc(pos) : 문서 규격정리
Dongock Feb 13, 2025
d0d6985
refactor(pos) : 컨텍스트 기반에 패키지 리팩토링
Dongock Feb 13, 2025
dc5465d
Doc(pos) : 모델링 -용어사전과 용어 통일
Dongock Feb 16, 2025
4b3964b
Doc(pos) : 모델링 - 주문 순서 관련 문장 이해도를 위한 구체적 명시
Dongock Feb 16, 2025
4919f92
Doc(pos) : 모델링 - 주문에 주문검증 추가
Dongock Feb 16, 2025
e620709
Doc(pos) : 모델링 - 모델링 그림 변경 및 주문 검증 각각 추가
Dongock Feb 16, 2025
b6c4c73
Doc(pos) : 모델링 - 모델링 그림 변경
Dongock Feb 16, 2025
ae1b351
Doc(pos) : 모델링 - 상품 추가
Dongock Feb 16, 2025
cc399ce
Doc(pos) : 모델링 - 내용 변경
Dongock Feb 16, 2025
59b8ba3
Merge branch 'step2-2' into step2-3
Dongock Feb 16, 2025
a58fd5c
refactor(pos) : 패키지 - product 추가
Dongock Feb 16, 2025
4f1f640
refactor(pos) : 패키지 - context별로 추가
Dongock Feb 18, 2025
a0bc547
refactor(pos) : 패키지 - 테스트 패키지 변경
Dongock Feb 18, 2025
eb4ea3a
Merge branch 'dongock' into step2-3
Dongock Feb 18, 2025
183e912
refactor(pos) : 패키지 - Menu 패키지 변경
Dongock Feb 19, 2025
0de0156
refactor(pos) : 패키지 - common 추가 및 purgomalum 관련 도메인 이동
Dongock Feb 19, 2025
144f902
refactor(pos) : 패키지 - product 패키지 변경
Dongock Feb 19, 2025
f9c2af2
refactor(pos) : 패키지 - order 패키지 변경
Dongock Feb 19, 2025
14408dc
refactor(pos) : 패키지 - 바운디드 컨텍스트에 따라 order 분리 및 패키지 변경
Dongock Feb 19, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
270 changes: 135 additions & 135 deletions README.md

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package kitchenpos.infra;
package kitchenpos.common.domain.model.kitchenriders;

import org.springframework.stereotype.Component;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package kitchenpos.infra;
package kitchenpos.common.domain.model.kitchenriders;

import java.math.BigDecimal;
import java.util.UUID;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package kitchenpos.infra;
package kitchenpos.common.domain.model.purgomalum;

import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.stereotype.Component;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package kitchenpos.infra;
package kitchenpos.common.domain.model.purgomalum;

public interface PurgomalumClient {
boolean containsProfanity(String text);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package kitchenpos.application;
package kitchenpos.menu.application;

import kitchenpos.domain.MenuGroup;
import kitchenpos.domain.MenuGroupRepository;
import kitchenpos.menu.domain.model.MenuGroup;
import kitchenpos.menu.domain.repository.MenuGroupRepository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package kitchenpos.application;
package kitchenpos.menu.application;

import kitchenpos.domain.Menu;
import kitchenpos.domain.MenuGroup;
import kitchenpos.domain.MenuGroupRepository;
import kitchenpos.domain.MenuProduct;
import kitchenpos.domain.MenuRepository;
import kitchenpos.domain.Product;
import kitchenpos.domain.ProductRepository;
import kitchenpos.infra.PurgomalumClient;
import kitchenpos.menu.domain.model.Menu;
import kitchenpos.menu.domain.model.MenuGroup;
import kitchenpos.menu.domain.repository.MenuGroupRepository;
import kitchenpos.menu.domain.model.MenuProduct;
import kitchenpos.menu.domain.repository.MenuRepository;
import kitchenpos.common.domain.model.purgomalum.PurgomalumClient;
import kitchenpos.product.domain.model.Product;
import kitchenpos.product.domain.repository.ProductRepository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,6 @@
package kitchenpos.domain;

import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.ForeignKey;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import jakarta.persistence.Transient;
package kitchenpos.menu.domain.model;

import jakarta.persistence.*;

import java.math.BigDecimal;
import java.util.List;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package kitchenpos.domain;
package kitchenpos.menu.domain.model;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,7 @@
package kitchenpos.domain;
package kitchenpos.menu.domain.model;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.ForeignKey;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import jakarta.persistence.Transient;
import jakarta.persistence.*;
import kitchenpos.product.domain.model.Product;

import java.util.UUID;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
package kitchenpos.domain;
package kitchenpos.menu.domain.repository;

import kitchenpos.menu.domain.model.MenuGroup;

import java.util.List;
import java.util.Optional;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
package kitchenpos.domain;
package kitchenpos.menu.domain.repository;

import kitchenpos.menu.domain.model.Menu;

import java.util.List;
import java.util.Optional;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package kitchenpos.domain;
package kitchenpos.menu.infra;

import kitchenpos.menu.domain.model.MenuGroup;
import kitchenpos.menu.domain.repository.MenuGroupRepository;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.UUID;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package kitchenpos.domain;
package kitchenpos.menu.infra;

import kitchenpos.menu.domain.model.Menu;
import kitchenpos.menu.domain.repository.MenuRepository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package kitchenpos.ui;
package kitchenpos.menu.ui;

import kitchenpos.application.MenuGroupService;
import kitchenpos.domain.MenuGroup;
import kitchenpos.menu.application.MenuGroupService;
import kitchenpos.menu.domain.model.MenuGroup;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package kitchenpos.ui;
package kitchenpos.menu.ui;

import kitchenpos.application.MenuService;
import kitchenpos.domain.Menu;
import kitchenpos.menu.application.MenuService;
import kitchenpos.menu.domain.model.Menu;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,20 @@
package kitchenpos.application;
package kitchenpos.order.common.application;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OrderService 도 공통에 위치한 의도가 궁금해요 🤔
각각의 컨텍스트로 분리해주셨는데 어떤 역할로 위치해주신 것일까요?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

위랑 같은 생각이었습니다 ㅎㅎ


import kitchenpos.domain.Menu;
import kitchenpos.domain.MenuRepository;
import kitchenpos.domain.Order;
import kitchenpos.domain.OrderLineItem;
import kitchenpos.domain.OrderRepository;
import kitchenpos.domain.OrderStatus;
import kitchenpos.domain.OrderTable;
import kitchenpos.domain.OrderTableRepository;
import kitchenpos.domain.OrderType;
import kitchenpos.infra.KitchenridersClient;
import kitchenpos.menu.domain.model.Menu;
import kitchenpos.menu.domain.repository.MenuRepository;
import kitchenpos.order.common.domain.*;
import kitchenpos.order.common.domain.model.Order;
import kitchenpos.order.common.domain.model.OrderLineItem;
import kitchenpos.order.common.domain.repository.OrderRepository;
import kitchenpos.common.domain.model.kitchenriders.KitchenridersClient;
import kitchenpos.order.eatinorder.domain.model.OrderTable;
import kitchenpos.order.eatinorder.domain.repository.OrderTableRepository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.Objects;
import java.util.UUID;
import java.util.*;

@Service
public class OrderService {
Expand All @@ -29,10 +24,10 @@ public class OrderService {
private final KitchenridersClient kitchenridersClient;

public OrderService(
final OrderRepository orderRepository,
final MenuRepository menuRepository,
final OrderTableRepository orderTableRepository,
final KitchenridersClient kitchenridersClient
final OrderRepository orderRepository,
final MenuRepository menuRepository,
final OrderTableRepository orderTableRepository,
final KitchenridersClient kitchenridersClient
) {
this.orderRepository = orderRepository;
this.menuRepository = menuRepository;
Expand All @@ -51,9 +46,9 @@ public Order create(final Order request) {
throw new IllegalArgumentException();
}
final List<Menu> menus = menuRepository.findAllByIdIn(
orderLineItemRequests.stream()
.map(OrderLineItem::getMenuId)
.toList()
orderLineItemRequests.stream()
.map(OrderLineItem::getMenuId)
.toList()
);
if (menus.size() != orderLineItemRequests.size()) {
throw new IllegalArgumentException();
Expand All @@ -67,7 +62,7 @@ public Order create(final Order request) {
}
}
final Menu menu = menuRepository.findById(orderLineItemRequest.getMenuId())
.orElseThrow(NoSuchElementException::new);
.orElseThrow(NoSuchElementException::new);
if (!menu.isDisplayed()) {
throw new IllegalStateException();
}
Expand All @@ -94,7 +89,7 @@ public Order create(final Order request) {
}
if (type == OrderType.EAT_IN) {
final OrderTable orderTable = orderTableRepository.findById(request.getOrderTableId())
.orElseThrow(NoSuchElementException::new);
.orElseThrow(NoSuchElementException::new);
if (!orderTable.isOccupied()) {
throw new IllegalStateException();
}
Expand All @@ -106,16 +101,16 @@ public Order create(final Order request) {
@Transactional
public Order accept(final UUID orderId) {
final Order order = orderRepository.findById(orderId)
.orElseThrow(NoSuchElementException::new);
.orElseThrow(NoSuchElementException::new);
if (order.getStatus() != OrderStatus.WAITING) {
throw new IllegalStateException();
}
if (order.getType() == OrderType.DELIVERY) {
BigDecimal sum = BigDecimal.ZERO;
for (final OrderLineItem orderLineItem : order.getOrderLineItems()) {
sum = orderLineItem.getMenu()
.getPrice()
.multiply(BigDecimal.valueOf(orderLineItem.getQuantity()));
.getPrice()
.multiply(BigDecimal.valueOf(orderLineItem.getQuantity()));
}
kitchenridersClient.requestDelivery(orderId, sum, order.getDeliveryAddress());
}
Expand All @@ -126,7 +121,7 @@ public Order accept(final UUID orderId) {
@Transactional
public Order serve(final UUID orderId) {
final Order order = orderRepository.findById(orderId)
.orElseThrow(NoSuchElementException::new);
.orElseThrow(NoSuchElementException::new);
if (order.getStatus() != OrderStatus.ACCEPTED) {
throw new IllegalStateException();
}
Expand All @@ -137,7 +132,7 @@ public Order serve(final UUID orderId) {
@Transactional
public Order startDelivery(final UUID orderId) {
final Order order = orderRepository.findById(orderId)
.orElseThrow(NoSuchElementException::new);
.orElseThrow(NoSuchElementException::new);
if (order.getType() != OrderType.DELIVERY) {
throw new IllegalStateException();
}
Expand All @@ -151,7 +146,7 @@ public Order startDelivery(final UUID orderId) {
@Transactional
public Order completeDelivery(final UUID orderId) {
final Order order = orderRepository.findById(orderId)
.orElseThrow(NoSuchElementException::new);
.orElseThrow(NoSuchElementException::new);
if (order.getStatus() != OrderStatus.DELIVERING) {
throw new IllegalStateException();
}
Expand All @@ -162,7 +157,7 @@ public Order completeDelivery(final UUID orderId) {
@Transactional
public Order complete(final UUID orderId) {
final Order order = orderRepository.findById(orderId)
.orElseThrow(NoSuchElementException::new);
.orElseThrow(NoSuchElementException::new);
final OrderType type = order.getType();
final OrderStatus status = order.getStatus();
if (type == OrderType.DELIVERY) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package kitchenpos.domain;
package kitchenpos.order.common.domain;

public enum OrderStatus {
WAITING, ACCEPTED, SERVED, DELIVERING, DELIVERED, COMPLETED
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package kitchenpos.domain;
package kitchenpos.order.common.domain;

public enum OrderType {
DELIVERY, TAKEOUT, EAT_IN
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package kitchenpos.domain;
package kitchenpos.order.common.domain.model;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

공통영역에 주문 엔티티를 구성해주신 의도가 궁금해요
저는 모델링을 이해했을 때 매장, 포장, 배달 컨텍스트에서 주문 도메인도델 공통적으로 메뉴와 주문유형을 가진다는 것으로 생각했는데 주문도메일 모델도 별도로 나와있어서요
이번 미션이 컨텍스트기준으로 리팩터링하는 것이라서 그냥 두신 것일까요?
본격적인 리팩토링은 다음 미션이라서 답변으로 진행해주셔도 돼요!

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

맨처음에 나누면서는 온전히 생각을 못했어서 공통을 두고 전체적으로 커버할 수 있는 영역을 만들자라고 생각했는데, 다시 생각해보니 제가 분리를 진행하면서 온전히 다 처리할 수 있을거 같네요. 없애도 될 거 같아요. 감사합니다 ㅎㅎ


import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
Expand All @@ -12,6 +12,9 @@
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import jakarta.persistence.Transient;
import kitchenpos.order.common.domain.OrderStatus;
import kitchenpos.order.common.domain.OrderType;
import kitchenpos.order.eatinorder.domain.model.OrderTable;

import java.time.LocalDateTime;
import java.util.List;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package kitchenpos.domain;
package kitchenpos.order.common.domain.model;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
Expand All @@ -10,6 +10,7 @@
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import jakarta.persistence.Transient;
import kitchenpos.menu.domain.model.Menu;

import java.math.BigDecimal;
import java.util.UUID;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
package kitchenpos.domain;
package kitchenpos.order.common.domain.repository;

import kitchenpos.order.common.domain.OrderStatus;
import kitchenpos.order.common.domain.model.Order;
import kitchenpos.order.eatinorder.domain.model.OrderTable;

import java.util.List;
import java.util.Optional;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package kitchenpos.domain;
package kitchenpos.order.common.infra;

import kitchenpos.order.common.domain.model.Order;
import kitchenpos.order.common.domain.repository.OrderRepository;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.UUID;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package kitchenpos.ui;
package kitchenpos.order.common.ui;

import kitchenpos.application.OrderService;
import kitchenpos.domain.Order;
import kitchenpos.order.common.application.OrderService;
import kitchenpos.order.common.domain.model.Order;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
Expand Down
Loading