diff --git a/src/main/java/org/hankki/hankkiserver/api/menu/service/MenuCommandService.java b/src/main/java/org/hankki/hankkiserver/api/menu/service/MenuCommandService.java index 134d027a..752f218a 100644 --- a/src/main/java/org/hankki/hankkiserver/api/menu/service/MenuCommandService.java +++ b/src/main/java/org/hankki/hankkiserver/api/menu/service/MenuCommandService.java @@ -1,9 +1,12 @@ package org.hankki.hankkiserver.api.menu.service; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.hankki.hankkiserver.api.menu.service.command.MenuDeleteCommand; import org.hankki.hankkiserver.api.menu.service.command.MenuPatchCommand; +import org.hankki.hankkiserver.api.menu.service.command.MenuPostCommand; import org.hankki.hankkiserver.api.menu.service.command.MenusPostCommand; import org.hankki.hankkiserver.api.menu.service.response.MenusGetResponse; import org.hankki.hankkiserver.api.menu.service.response.MenusPostResponse; @@ -35,7 +38,7 @@ public void deleteMenu(final MenuDeleteCommand command) { Menu menu = menuFinder.findByStoreIdAndId(findStore.getId(), command.id()); menuDeleter.deleteMenu(menu); saveToDeletedMenu(menu, findStore.getId()); - updateLowestPriceInStore(storeFinder.findByIdWhereDeletedIsFalse(command.storeId())); + updateLowestPriceInStore(findStore); checkNoMenuInStore(findStore, command.userId()); } @@ -49,10 +52,7 @@ public void modifyMenu(final MenuPatchCommand command) { @Transactional public MenusPostResponse createMenus(final MenusPostCommand command) { Store findStore = storeFinder.findByIdWhereDeletedIsFalse(command.storeId()); - List menus = command.menu().stream() - .filter(c -> !validateMenuConflict(findStore, c.name())) - .map(c -> Menu.create(findStore, c.name(), c.price())) - .toList(); + List menus = filterNotExistedMenu(command.menu(), findStore); menuUpdater.saveAll(menus); updateLowestPriceInStore(findStore); return MenusPostResponse.of(menus); @@ -69,8 +69,22 @@ private void updateLowestPriceInStore(final Store findStore) { findStore.updateLowestPrice(menuFinder.findLowestPriceByStore(findStore)); } - private boolean validateMenuConflict(final Store store, final String menuName) { - return menuFinder.existsByStoreAndName(store, menuName); + private List filterNotExistedMenu(final List menus, final Store store) { + Set allMenuNames = parseAllMenuNames(store); + return menus.stream() + .filter(menu -> !validateMenuConflict(allMenuNames, menu.name())) + .map(menu -> Menu.create(store, menu.name(), menu.price())) + .toList(); + } + + private Set parseAllMenuNames(final Store store) { + return menuFinder.findAllByStore(store).stream() + .map(Menu::getName) + .collect(Collectors.toSet()); + } + + private boolean validateMenuConflict(final Set menus, final String menuName) { + return menus.contains(menuName); } private void checkNoMenuInStore(final Store store, final long userId) {