Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
Expand Up @@ -2,8 +2,8 @@

import kitchenpos.deliveryorders.infra.KitchenridersClient;
import kitchenpos.eatinorders.domain.*;
import kitchenpos.menus.domain.Menu;
import kitchenpos.menus.domain.MenuRepository;
import kitchenpos.menus.tobe.domain.entity.Menu;
import kitchenpos.menus.tobe.domain.repository.MenuRepository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

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

import kitchenpos.menus.domain.Menu;
import kitchenpos.menus.tobe.domain.entity.Menu;

import javax.persistence.*;
import java.math.BigDecimal;
Expand Down
32 changes: 18 additions & 14 deletions src/main/java/kitchenpos/menus/application/MenuGroupService.java
Original file line number Diff line number Diff line change
@@ -1,36 +1,40 @@
package kitchenpos.menus.application;

import kitchenpos.menus.domain.MenuGroup;
import kitchenpos.menus.domain.MenuGroupRepository;
import kitchenpos.menus.dto.MenuGroupCreateRequest;
import kitchenpos.menus.dto.MenuGroupResponse;
import kitchenpos.menus.mapper.MenuGroupMapper;
import kitchenpos.menus.tobe.domain.entity.MenuGroup;
import kitchenpos.menus.tobe.domain.repository.MenuGroupRepository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Objects;
import java.util.UUID;
import java.util.stream.Collectors;

@Service
public class MenuGroupService {
private final MenuGroupRepository menuGroupRepository;
private final MenuGroupMapper menuGroupMapper;

public MenuGroupService(final MenuGroupRepository menuGroupRepository) {
public MenuGroupService(
final MenuGroupRepository menuGroupRepository,
final MenuGroupMapper menuGroupMapper
) {
this.menuGroupRepository = menuGroupRepository;
this.menuGroupMapper = menuGroupMapper;
}

@Transactional
public MenuGroup create(final MenuGroup request) {
final String name = request.getName();
if (Objects.isNull(name) || name.isEmpty()) {
throw new IllegalArgumentException();
}
final MenuGroup menuGroup = new MenuGroup();
menuGroup.setId(UUID.randomUUID());
menuGroup.setName(name);
return menuGroupRepository.save(menuGroup);
public MenuGroupResponse create(final MenuGroupCreateRequest request) {
MenuGroup menuGroup = menuGroupRepository.save(MenuGroup.createMenuGroup(request.getName()));
return menuGroupMapper.toMenuGroupResponse(menuGroup);
}

@Transactional(readOnly = true)
public List<MenuGroup> findAll() {
return menuGroupRepository.findAll();
public List<MenuGroupResponse> findAll() {
return menuGroupRepository.findAll().stream().map(v -> menuGroupMapper.toMenuGroupResponse(v))
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

규칙 4: 한 줄에 점을 하나만 찍는다. 객체 지향 생활 체조 원칙을 지켜보면 좋을 것 같아요~^^

.collect(Collectors.toList());
}
}
113 changes: 32 additions & 81 deletions src/main/java/kitchenpos/menus/application/MenuService.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,12 @@
package kitchenpos.menus.application;

import kitchenpos.menus.domain.*;
import kitchenpos.menus.dto.*;
import kitchenpos.menus.mapper.MenuMapper;
import kitchenpos.menus.tobe.domain.entity.Menu;
import kitchenpos.menus.tobe.domain.entity.MenuGroup;
import kitchenpos.menus.tobe.domain.entity.MenuProduct;
import kitchenpos.menus.tobe.domain.repository.MenuGroupRepository;
import kitchenpos.menus.tobe.domain.repository.MenuRepository;
import kitchenpos.products.infra.PurgomalumClient;
import kitchenpos.products.tobe.domain.entity.Product;
import kitchenpos.products.tobe.domain.repository.ProductRepository;
Expand All @@ -17,126 +23,71 @@ public class MenuService {
private final MenuGroupRepository menuGroupRepository;
private final ProductRepository productRepository;
private final PurgomalumClient purgomalumClient;
private final MenuMapper menuMapper;

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

@Transactional
public Menu create(final Menu request) {
final BigDecimal price = request.getPrice();
if (Objects.isNull(price) || price.compareTo(BigDecimal.ZERO) < 0) {
throw new IllegalArgumentException();
}
public MenuResponse create(final MenuCreateRequest request) {
final MenuGroup menuGroup = menuGroupRepository.findById(request.getMenuGroupId())
.orElseThrow(NoSuchElementException::new);
final List<MenuProduct> menuProductRequests = request.getMenuProducts();
final List<MenuProductRequest> menuProductRequests = request.getMenuProductRequestList();

if (Objects.isNull(menuProductRequests) || menuProductRequests.isEmpty()) {
throw new IllegalArgumentException();
}

final List<Product> products = productRepository.findAllByIdIn(
menuProductRequests.stream()
.map(MenuProduct::getProductId)
.map(MenuProductRequest::getProductId)
.collect(Collectors.toList())
);
if (products.size() != menuProductRequests.size()) {
throw new IllegalArgumentException();
}
final List<MenuProduct> menuProducts = new ArrayList<>();
BigDecimal sum = BigDecimal.ZERO;
for (final MenuProduct menuProductRequest : menuProductRequests) {
final long quantity = menuProductRequest.getQuantity();
if (quantity < 0) {
throw new IllegalArgumentException();
}
final Product product = productRepository.findById(menuProductRequest.getProductId())
.orElseThrow(NoSuchElementException::new);
sum = sum.add(
product.getPrice()
.multiply(BigDecimal.valueOf(quantity))
);
final MenuProduct menuProduct = new MenuProduct();
menuProduct.setProduct(product);
menuProduct.setQuantity(quantity);
menuProducts.add(menuProduct);
}
if (price.compareTo(sum) > 0) {
throw new IllegalArgumentException();
}
final String name = request.getName();
if (Objects.isNull(name) || purgomalumClient.containsProfanity(name)) {
throw new IllegalArgumentException();
}
final Menu menu = new Menu();
menu.setId(UUID.randomUUID());
menu.setName(name);
menu.setPrice(price);
menu.setMenuGroup(menuGroup);
menu.setDisplayed(request.isDisplayed());
menu.setMenuProducts(menuProducts);
return menuRepository.save(menu);

Menu menu = Menu.createMenu(request, menuGroup, products, purgomalumClient);
menu = menuRepository.save(menu);
return menuMapper.toMenuResponse(menu);
}

@Transactional
public Menu changePrice(final UUID menuId, final Menu request) {
final BigDecimal price = request.getPrice();
if (Objects.isNull(price) || price.compareTo(BigDecimal.ZERO) < 0) {
throw new IllegalArgumentException();
}
public MenuResponse changePrice(final UUID menuId, final MenuPriceChangeRequest request) {
final Menu menu = menuRepository.findById(menuId)
.orElseThrow(NoSuchElementException::new);
BigDecimal sum = BigDecimal.ZERO;
for (final MenuProduct menuProduct : menu.getMenuProducts()) {
sum = sum.add(
menuProduct.getProduct()
.getPrice()
.multiply(BigDecimal.valueOf(menuProduct.getQuantity()))
);
}
if (price.compareTo(sum) > 0) {
throw new IllegalArgumentException();
}
menu.setPrice(price);
return menu;
menu.changePrice(request.getPrice());
return menuMapper.toMenuResponse(menu);
}

@Transactional
public Menu display(final UUID menuId) {
public MenuResponse display(final UUID menuId) {
final Menu menu = menuRepository.findById(menuId)
.orElseThrow(NoSuchElementException::new);
BigDecimal sum = BigDecimal.ZERO;
for (final MenuProduct menuProduct : menu.getMenuProducts()) {
sum = sum.add(
menuProduct.getProduct()
.getPrice()
.multiply(BigDecimal.valueOf(menuProduct.getQuantity()))
);
}
if (menu.getPrice().compareTo(sum) > 0) {
throw new IllegalStateException();
}
menu.setDisplayed(true);
return menu;

menu.display();
return menuMapper.toMenuResponse(menu);
}

@Transactional
public Menu hide(final UUID menuId) {
public MenuResponse hide(final UUID menuId) {
final Menu menu = menuRepository.findById(menuId)
.orElseThrow(NoSuchElementException::new);
menu.setDisplayed(false);
return menu;
return menuMapper.toMenuResponse(menu);
}

@Transactional(readOnly = true)
public List<Menu> findAll() {
return menuRepository.findAll();
public List<MenuResponse> findAll() {
return menuRepository.findAll().stream().map(v -> menuMapper.toMenuResponse(v))
.collect(Collectors.toList());
}
}
102 changes: 0 additions & 102 deletions src/main/java/kitchenpos/menus/domain/Menu.java

This file was deleted.

Loading