Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
14 commits
Select commit Hold shift + click to select a range
1ce635f
chore: DB Connection ์„ค์ • ๋ณ€๊ฒฝ โ€“ HikariCP, Hibernate Auto-Commit ๋น„ํ™œ์„ฑํ™”๋กœ Dbโ€ฆ
nomoreFt Feb 25, 2025
7f3a747
chore: docker compose ์ถ”๊ฐ€
nomoreFt Feb 25, 2025
28bb200
feat(core): ๊ธฐ๋ณธ Entity Type ์ถ”๊ฐ€
nomoreFt Feb 25, 2025
6626e1a
feat(core): ๊ณตํ†ต Money ํƒ€์ž…, Converter ์ถ”๊ฐ€
nomoreFt Feb 25, 2025
54e1cce
refactor(product): Product ๋ฆฌํŒฉํ† ๋ง
nomoreFt Feb 25, 2025
ef2b0b9
refactor(product): Product ๋ฆฌํŒฉํ† ๋ง
nomoreFt Feb 25, 2025
4696cff
chore: ์ค‘๋ณต docker compose ์‚ญ์ œ
nomoreFt Feb 27, 2025
5bd913b
refactor: Product refactoring
nomoreFt Feb 27, 2025
956a3f4
refactor(product): Service ๊ฐœ์„  ์ง„ํ–‰
nomoreFt Feb 28, 2025
4061ecb
refactor(product): ๊ธฐ์กด ๋„๋ฉ”์ธ ๋ฆฌํŒฉํ† ๋ง + ๊ด€๋ จ๋œ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ ์ˆ˜์ • ๋ฐ ํ…Œ์ŠคํŠธ ์ •์ƒ ์ž‘๋™
nomoreFt Mar 1, 2025
893b1e9
refactor(product): ๊ธฐ์กด ๋„๋ฉ”์ธ ๋ฆฌํŒฉํ† ๋ง + ๊ด€๋ จ๋œ ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ ์ˆ˜์ • ๋ฐ ํ…Œ์ŠคํŠธ ์ •์ƒ ์ž‘๋™
nomoreFt Mar 3, 2025
a8f25d6
chore(product): flyway ์„ค์ •
nomoreFt Mar 3, 2025
5d63264
feat(product): ๊ณตํ†ต AggregateRoot ํƒ€์ž… ์„ ์–ธ
nomoreFt Mar 3, 2025
cae28ff
refactor(product): ValueObject ์ž์ž˜ํ•œ ์ˆ˜์ •
nomoreFt Mar 4, 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
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
package kitchenpos.eatinorders.application;
package kitchenpos.core.eatinorders.application;

import kitchenpos.deliveryorders.infra.KitchenridersClient;
import kitchenpos.eatinorders.domain.Order;
import kitchenpos.eatinorders.domain.OrderLineItem;
import kitchenpos.eatinorders.domain.OrderRepository;
import kitchenpos.eatinorders.domain.OrderStatus;
import kitchenpos.eatinorders.domain.OrderTable;
import kitchenpos.eatinorders.domain.OrderTableRepository;
import kitchenpos.eatinorders.domain.OrderType;
import kitchenpos.menus.domain.Menu;
import kitchenpos.menus.domain.MenuRepository;
import kitchenpos.core.shared.value.Money;
import kitchenpos.data.KitchenridersClient;
import kitchenpos.core.eatinorders.domain.Order;
import kitchenpos.core.eatinorders.domain.OrderLineItem;
import kitchenpos.core.eatinorders.domain.OrderRepository;
import kitchenpos.core.eatinorders.domain.OrderStatus;
import kitchenpos.core.eatinorders.domain.OrderTable;
import kitchenpos.core.eatinorders.domain.OrderTableRepository;
import kitchenpos.core.eatinorders.domain.OrderType;
import kitchenpos.core.menus.domain.Menu;
import kitchenpos.core.menus.domain.MenuRepository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

Expand Down Expand Up @@ -71,7 +72,7 @@ public Order create(final Order request) {
if (!menu.isDisplayed()) {
throw new IllegalStateException();
}
if (menu.getPrice().compareTo(orderLineItemRequest.getPrice()) != 0) {
if (!menu.getPrice().isEqual(Money.wons(orderLineItemRequest.getPrice()))) {
throw new IllegalArgumentException();
}
final OrderLineItem orderLineItem = new OrderLineItem();
Expand Down Expand Up @@ -111,13 +112,13 @@ public Order accept(final UUID orderId) {
throw new IllegalStateException();
}
if (order.getType() == OrderType.DELIVERY) {
BigDecimal sum = BigDecimal.ZERO;
Money sum = Money.ZERO;
for (final OrderLineItem orderLineItem : order.getOrderLineItems()) {
sum = orderLineItem.getMenu()
.getPrice()
.multiply(BigDecimal.valueOf(orderLineItem.getQuantity()));
.multiply(orderLineItem.getQuantity());
}
kitchenridersClient.requestDelivery(orderId, sum, order.getDeliveryAddress());
kitchenridersClient.requestDelivery(orderId, sum.getAmount(), order.getDeliveryAddress());
}
order.setStatus(OrderStatus.ACCEPTED);
return order;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package kitchenpos.eatinorders.application;
package kitchenpos.core.eatinorders.application;

import kitchenpos.eatinorders.domain.OrderRepository;
import kitchenpos.eatinorders.domain.OrderStatus;
import kitchenpos.eatinorders.domain.OrderTable;
import kitchenpos.eatinorders.domain.OrderTableRepository;
import kitchenpos.core.eatinorders.domain.OrderRepository;
import kitchenpos.core.eatinorders.domain.OrderStatus;
import kitchenpos.core.eatinorders.domain.OrderTable;
import kitchenpos.core.eatinorders.domain.OrderTableRepository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package kitchenpos.eatinorders.domain;
package kitchenpos.core.eatinorders.domain;

import org.springframework.data.jpa.repository.JpaRepository;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package kitchenpos.eatinorders.domain;
package kitchenpos.core.eatinorders.domain;

import org.springframework.data.jpa.repository.JpaRepository;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package kitchenpos.eatinorders.domain;
package kitchenpos.core.eatinorders.domain;

import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package kitchenpos.eatinorders.domain;
package kitchenpos.core.eatinorders.domain;

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

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.eatinorders.domain;
package kitchenpos.core.eatinorders.domain;

import java.util.List;
import java.util.Optional;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package kitchenpos.eatinorders.domain;
package kitchenpos.core.eatinorders.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.eatinorders.domain;
package kitchenpos.core.eatinorders.domain;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package kitchenpos.eatinorders.domain;
package kitchenpos.core.eatinorders.domain;

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

public enum OrderType {
DELIVERY, TAKEOUT, EAT_IN
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package kitchenpos.core.foundation.exception;

import org.springframework.context.MessageSourceResolvable;

public class SystemException extends RuntimeException implements MessageSourceResolvable {

public SystemException(String format, Object... args) {
super(String.format(format, args));
}

public SystemException(Throwable cause) {
super(cause);
}

public SystemException(String message, Throwable cause) {
super(message, cause);
}

@Override
public String[] getCodes() {
return new String[]{"Exception." + getClass().getSimpleName()};
}

@Override
public Object[] getArguments() {
return new Object[0];
}

@Override
public String getDefaultMessage() {
return getMessage();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package kitchenpos.core.menus.application;

import jakarta.transaction.Transactional;
import kitchenpos.core.menus.domain.Menu;
import kitchenpos.core.menus.domain.MenuRepository;
import kitchenpos.core.shared.event.ProductPriceChangedEvent;
import org.springframework.stereotype.Component;
import org.springframework.transaction.event.TransactionPhase;
import org.springframework.transaction.event.TransactionalEventListener;

@Component
public class MenuEventListener {
private final MenuRepository menuRepository;

public MenuEventListener(MenuRepository menuRepository) {
this.menuRepository = menuRepository;
}

@TransactionalEventListener(phase = TransactionPhase.BEFORE_COMMIT)
public void onProductPriceChanged(final ProductPriceChangedEvent event) {
menuRepository.findAllByProductId(event.id())
.forEach(Menu::recalculateDisplayStatus);
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package kitchenpos.menus.application;
package kitchenpos.core.menus.application;

import kitchenpos.menus.domain.MenuGroup;
import kitchenpos.menus.domain.MenuGroupRepository;
import kitchenpos.core.menus.domain.MenuGroup;
import kitchenpos.core.menus.domain.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,16 @@
package kitchenpos.menus.application;
package kitchenpos.core.menus.application;

import kitchenpos.menus.domain.Menu;
import kitchenpos.menus.domain.MenuGroup;
import kitchenpos.menus.domain.MenuGroupRepository;
import kitchenpos.menus.domain.MenuProduct;
import kitchenpos.menus.domain.MenuRepository;
import kitchenpos.products.domain.Product;
import kitchenpos.products.domain.ProductRepository;
import kitchenpos.products.infra.PurgomalumClient;
import kitchenpos.core.menus.domain.Menu;
import kitchenpos.core.menus.domain.MenuGroup;
import kitchenpos.core.menus.domain.MenuGroupRepository;
import kitchenpos.core.menus.domain.MenuProduct;
import kitchenpos.core.menus.domain.MenuRepository;
import kitchenpos.core.products.domain.ProductRepository;
import kitchenpos.core.products.tobe.domain.Product;
import kitchenpos.core.products.tobe.domain.TobeProductRepository;
import kitchenpos.core.shared.domain.ProfanityChecker;
import kitchenpos.core.shared.value.Money;
import kitchenpos.core.shared.value.Quantity;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

Expand All @@ -22,24 +25,24 @@
public class MenuService {
private final MenuRepository menuRepository;
private final MenuGroupRepository menuGroupRepository;
private final ProductRepository productRepository;
private final PurgomalumClient purgomalumClient;
private final TobeProductRepository productRepository;
private final ProfanityChecker profanityChecker;

public MenuService(
final MenuRepository menuRepository,
final MenuGroupRepository menuGroupRepository,
final ProductRepository productRepository,
final PurgomalumClient purgomalumClient
final MenuRepository menuRepository,
final MenuGroupRepository menuGroupRepository,
final TobeProductRepository productRepository,
final ProfanityChecker profanityChecker
) {
this.menuRepository = menuRepository;
this.menuGroupRepository = menuGroupRepository;
this.productRepository = productRepository;
this.purgomalumClient = purgomalumClient;
this.profanityChecker = profanityChecker;
}

@Transactional
public Menu create(final Menu request) {
final BigDecimal price = request.getPrice();
final BigDecimal price = request.getPrice().getAmount();
if (Objects.isNull(price) || price.compareTo(BigDecimal.ZERO) < 0) {
throw new IllegalArgumentException();
}
Expand All @@ -60,32 +63,32 @@ public Menu create(final Menu request) {
final List<MenuProduct> menuProducts = new ArrayList<>();
BigDecimal sum = BigDecimal.ZERO;
for (final MenuProduct menuProductRequest : menuProductRequests) {
final long quantity = menuProductRequest.getQuantity();
final long quantity = menuProductRequest.getQuantity().getValue();
if (quantity < 0) {
throw new IllegalArgumentException();
}
final Product product = productRepository.findById(menuProductRequest.getProductId())
.orElseThrow(NoSuchElementException::new);
sum = sum.add(
product.getPrice()
product.getPrice().getPrice().getAmount()
.multiply(BigDecimal.valueOf(quantity))
);
final MenuProduct menuProduct = new MenuProduct();
menuProduct.setProduct(product);
menuProduct.setQuantity(quantity);
menuProduct.setQuantity(Quantity.of(quantity));
menuProducts.add(menuProduct);
}
if (price.compareTo(sum) > 0) {
throw new IllegalArgumentException();
}
final String name = request.getName();
if (Objects.isNull(name) || purgomalumClient.containsProfanity(name)) {
if (Objects.isNull(name) || profanityChecker.containsProfanity(name)) {
throw new IllegalArgumentException();
}
final Menu menu = new Menu();
menu.setId(UUID.randomUUID());
menu.setName(name);
menu.setPrice(price);
menu.setPrice(Money.wons(price));
menu.setMenuGroup(menuGroup);
menu.setDisplayed(request.isDisplayed());
menu.setMenuProducts(menuProducts);
Expand All @@ -94,7 +97,7 @@ public Menu create(final Menu request) {

@Transactional
public Menu changePrice(final UUID menuId, final Menu request) {
final BigDecimal price = request.getPrice();
final BigDecimal price = request.getPrice().getAmount();
if (Objects.isNull(price) || price.compareTo(BigDecimal.ZERO) < 0) {
throw new IllegalArgumentException();
}
Expand All @@ -104,14 +107,14 @@ public Menu changePrice(final UUID menuId, final Menu request) {
for (final MenuProduct menuProduct : menu.getMenuProducts()) {
sum = sum.add(
menuProduct.getProduct()
.getPrice()
.multiply(BigDecimal.valueOf(menuProduct.getQuantity()))
.getPrice().getPrice().getAmount()
.multiply(BigDecimal.valueOf(menuProduct.getQuantity().getValue()))
);
}
if (price.compareTo(sum) > 0) {
throw new IllegalArgumentException();
}
menu.setPrice(price);
menu.setPrice(Money.wons(price));
return menu;
}

Expand All @@ -123,11 +126,11 @@ public Menu display(final UUID menuId) {
for (final MenuProduct menuProduct : menu.getMenuProducts()) {
sum = sum.add(
menuProduct.getProduct()
.getPrice()
.multiply(BigDecimal.valueOf(menuProduct.getQuantity()))
.getPrice().getPrice().getAmount()
.multiply(BigDecimal.valueOf(menuProduct.getQuantity().getValue()))
);
}
if (menu.getPrice().compareTo(sum) > 0) {
if (menu.getPrice().getAmount().compareTo(sum) > 0) {
throw new IllegalStateException();
}
menu.setDisplayed(true);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package kitchenpos.menus.domain;
package kitchenpos.core.menus.domain;

import org.springframework.data.jpa.repository.JpaRepository;

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

import kitchenpos.core.shared.identifier.ProductId;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
Expand All @@ -10,5 +11,5 @@
public interface JpaMenuRepository extends MenuRepository, JpaRepository<Menu, UUID> {
@Query("select m from Menu m join m.menuProducts mp where mp.product.id = :productId")
@Override
List<Menu> findAllByProductId(@Param("productId") UUID productId);
List<Menu> findAllByProductId(@Param("productId") ProductId productId);
}
Loading