From f7f125fb1c8fd2d93f8bb1597b8d7b0c4dad157c Mon Sep 17 00:00:00 2001 From: kgy1008 Date: Sat, 11 Jan 2025 10:00:40 +0900 Subject: [PATCH] =?UTF-8?q?[refac]=20=EB=A9=94=EB=89=B4=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EC=8B=9C=20=EB=B0=9C=EC=83=9D=20=EC=BF=BC=EB=A6=AC?= =?UTF-8?q?=EB=AC=B8=20=EA=B0=9C=EC=84=A0=20(#244)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [refac] optimize query execution by reducing select queries * [refac] improve nested loop * [refac] delete unnecessary query * [refac] minimize interdependence between methods --- .../api/menu/service/MenuCommandService.java | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) 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) {