From 7d63caba49a1fc765f3dd85e31c5029d11acc84f Mon Sep 17 00:00:00 2001 From: kgy1008 Date: Tue, 1 Oct 2024 23:32:16 +0900 Subject: [PATCH 1/4] =?UTF-8?q?[feat]=20=EB=A9=94=EB=89=B4=20=ED=8E=B8?= =?UTF-8?q?=EC=A7=91=20=EA=B8=B0=EB=8A=A5=20(#198)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [docs] add gitignore list * [feat] delete Menu * [feat] modify Menu * [refac] rename command class * [feat] add new menu * [refac] add constraints * [fix] update lowest price * [refac] delete unused class * [refac] bunding frequently used functions * [refac] divide method * [refac] modify verification method * [refac] function separation * [refac] delete unused method --- .gitignore | 1 + build.gradle | 2 +- .../api/menu/controller/MenuController.java | 39 +++++++++++ .../api/menu/service/MenuCommandService.java | 68 +++++++++++++++++++ .../api/menu/service/MenuDeleter.java | 17 +++++ .../api/menu/service/MenuFinder.java | 10 +++ .../api/menu/service/MenuUpdater.java | 4 ++ .../service/command/MenuDeleteCommand.java | 10 +++ .../service/command/MenuPatchCommand.java | 12 ++++ .../menu/service/command/MenuPostCommand.java | 11 +++ .../service/response/MenuPostResponse.java | 14 ++++ .../common/code/MenuErrorCode.java | 16 +++++ .../hankkiserver/domain/menu/model/Menu.java | 5 ++ .../menu/repository/MenuRepository.java | 3 + .../domain/store/model/Store.java | 4 ++ 15 files changed, 215 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/hankki/hankkiserver/api/menu/controller/MenuController.java create mode 100644 src/main/java/org/hankki/hankkiserver/api/menu/service/MenuCommandService.java create mode 100644 src/main/java/org/hankki/hankkiserver/api/menu/service/MenuDeleter.java create mode 100644 src/main/java/org/hankki/hankkiserver/api/menu/service/command/MenuDeleteCommand.java create mode 100644 src/main/java/org/hankki/hankkiserver/api/menu/service/command/MenuPatchCommand.java create mode 100644 src/main/java/org/hankki/hankkiserver/api/menu/service/command/MenuPostCommand.java create mode 100644 src/main/java/org/hankki/hankkiserver/api/menu/service/response/MenuPostResponse.java create mode 100644 src/main/java/org/hankki/hankkiserver/common/code/MenuErrorCode.java diff --git a/.gitignore b/.gitignore index 44abcc58..47746ac7 100644 --- a/.gitignore +++ b/.gitignore @@ -153,6 +153,7 @@ Temporary Items application-local.yml application-dev.yml +application-prod.yml # Qclass /src/main/generated diff --git a/build.gradle b/build.gradle index 977947ea..4d4bc95b 100644 --- a/build.gradle +++ b/build.gradle @@ -89,4 +89,4 @@ tasks.register('copyYml', Copy) { include "*.yml" into 'src/main/resources' } -} +} \ No newline at end of file diff --git a/src/main/java/org/hankki/hankkiserver/api/menu/controller/MenuController.java b/src/main/java/org/hankki/hankkiserver/api/menu/controller/MenuController.java new file mode 100644 index 00000000..84e06604 --- /dev/null +++ b/src/main/java/org/hankki/hankkiserver/api/menu/controller/MenuController.java @@ -0,0 +1,39 @@ +package org.hankki.hankkiserver.api.menu.controller; + +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.hankki.hankkiserver.api.dto.HankkiResponse; +import org.hankki.hankkiserver.api.menu.service.MenuCommandService; +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.response.MenuPostResponse; +import org.hankki.hankkiserver.api.store.controller.request.MenuPostRequest; +import org.hankki.hankkiserver.common.code.CommonSuccessCode; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/v1") +public class MenuController { + + private final MenuCommandService menuCommandService; + + @DeleteMapping("/{storeId}/menus/{id}") + public HankkiResponse deleteMenu(@PathVariable("storeId") final Long storeId, @PathVariable("id") final Long id) { + menuCommandService.deleteMenu(MenuDeleteCommand.of(storeId, id)); + return HankkiResponse.success(CommonSuccessCode.NO_CONTENT); + } + + @PatchMapping("/{storeId}/menus/{id}") + public HankkiResponse updateMenu(@PathVariable("storeId") final Long storeId, @PathVariable("id") final Long id, + @Valid @RequestBody final MenuPostRequest request) { + menuCommandService.modifyMenu(MenuPatchCommand.of(storeId, id, request.name(), request.price())); + return HankkiResponse.success(CommonSuccessCode.OK); + } + + @PostMapping("/{storeId}/menus") + public HankkiResponse createMenu(@PathVariable final Long storeId, @Valid @RequestBody final MenuPostRequest request) { + return HankkiResponse.success(CommonSuccessCode.CREATED, menuCommandService.createMenu(MenuPostCommand.of(storeId, request.name(), request.price()))); + } +} 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 new file mode 100644 index 00000000..a6cf0897 --- /dev/null +++ b/src/main/java/org/hankki/hankkiserver/api/menu/service/MenuCommandService.java @@ -0,0 +1,68 @@ +package org.hankki.hankkiserver.api.menu.service; + +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.response.MenuPostResponse; +import org.hankki.hankkiserver.api.store.service.StoreFinder; +import org.hankki.hankkiserver.common.code.MenuErrorCode; +import org.hankki.hankkiserver.common.exception.ConflictException; +import org.hankki.hankkiserver.domain.menu.model.Menu; +import org.hankki.hankkiserver.domain.store.model.Store; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +public class MenuCommandService { + + private final MenuDeleter menuDeleter; + private final MenuFinder menuFinder; + private final MenuUpdater menuUpdater; + private final StoreFinder storeFinder; + + @Transactional + public void deleteMenu(final MenuDeleteCommand command) { + Menu menu = menuFinder.findByStoreIdAndId(command.storeId(), command.id()); + menuDeleter.deleteMenu(menu); + updateLowestPriceInStore(storeFinder.findByIdWhereDeletedIsFalse(command.storeId())); + } + + @Transactional + public void modifyMenu(final MenuPatchCommand command) { + Menu menu = menuFinder.findByStoreIdAndId(command.storeId(), command.id()); + menu.update(command.name(), command.price()); + updateLowestPriceInStore(storeFinder.findByIdWhereDeletedIsFalse(command.storeId())); + } + + @Transactional + public MenuPostResponse createMenu(final MenuPostCommand command) { + Store findStore = storeFinder.findByIdWhereDeletedIsFalse(command.storeId()); + validateMenuNotConflict(findStore, command.name()); + Menu menu = Menu.create(findStore, command.name(), command.price()); + menuUpdater.save(menu); + updateLowestPriceInStore(findStore, menu); + return MenuPostResponse.of(menu); + } + + private void updateLowestPriceInStore(final Store findStore) { + int lowestPrice = menuFinder.findAllByStore(findStore).stream() + .mapToInt(Menu::getPrice) + .min() + .orElse(0); + findStore.updateLowestPrice(lowestPrice); + } + + private void updateLowestPriceInStore(final Store store, final Menu menu) { + if (store.getLowestPrice() > menu.getPrice()) { + store.updateLowestPrice(menu.getPrice()); + } + } + + private void validateMenuNotConflict(Store store, String menuName) { + if (menuFinder.existsByStoreAndName(store, menuName)) { + throw new ConflictException(MenuErrorCode.ALREADY_EXISTED_MENU); + } + } +} diff --git a/src/main/java/org/hankki/hankkiserver/api/menu/service/MenuDeleter.java b/src/main/java/org/hankki/hankkiserver/api/menu/service/MenuDeleter.java new file mode 100644 index 00000000..17368789 --- /dev/null +++ b/src/main/java/org/hankki/hankkiserver/api/menu/service/MenuDeleter.java @@ -0,0 +1,17 @@ +package org.hankki.hankkiserver.api.menu.service; + +import lombok.RequiredArgsConstructor; +import org.hankki.hankkiserver.domain.menu.model.Menu; +import org.hankki.hankkiserver.domain.menu.repository.MenuRepository; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class MenuDeleter { + + private final MenuRepository menuRepository; + + protected void deleteMenu(final Menu menu) { + menuRepository.delete(menu); + } +} diff --git a/src/main/java/org/hankki/hankkiserver/api/menu/service/MenuFinder.java b/src/main/java/org/hankki/hankkiserver/api/menu/service/MenuFinder.java index fdc66473..062fc858 100644 --- a/src/main/java/org/hankki/hankkiserver/api/menu/service/MenuFinder.java +++ b/src/main/java/org/hankki/hankkiserver/api/menu/service/MenuFinder.java @@ -1,6 +1,8 @@ package org.hankki.hankkiserver.api.menu.service; import lombok.RequiredArgsConstructor; +import org.hankki.hankkiserver.common.code.MenuErrorCode; +import org.hankki.hankkiserver.common.exception.NotFoundException; import org.hankki.hankkiserver.domain.menu.model.Menu; import org.hankki.hankkiserver.domain.menu.repository.MenuRepository; import org.hankki.hankkiserver.domain.store.model.Store; @@ -17,4 +19,12 @@ public class MenuFinder { public List findAllByStore(final Store store) { return menuRepository.findAllByStore(store); } + + protected Menu findByStoreIdAndId(final Long storeId, final Long id) { + return menuRepository.findByStoreIdAndId(storeId,id).orElseThrow(() -> new NotFoundException(MenuErrorCode.MENU_NOT_FOUND)); + } + + protected boolean existsByStoreAndName(final Store store, final String name) { + return menuRepository.existsByStoreAndName(store, name); + } } diff --git a/src/main/java/org/hankki/hankkiserver/api/menu/service/MenuUpdater.java b/src/main/java/org/hankki/hankkiserver/api/menu/service/MenuUpdater.java index 4f509e34..744779a6 100644 --- a/src/main/java/org/hankki/hankkiserver/api/menu/service/MenuUpdater.java +++ b/src/main/java/org/hankki/hankkiserver/api/menu/service/MenuUpdater.java @@ -16,4 +16,8 @@ public class MenuUpdater { public void saveAll(final List menus) { menuRepository.saveAll(menus); } + + protected void save(final Menu menu) { + menuRepository.save(menu); + } } diff --git a/src/main/java/org/hankki/hankkiserver/api/menu/service/command/MenuDeleteCommand.java b/src/main/java/org/hankki/hankkiserver/api/menu/service/command/MenuDeleteCommand.java new file mode 100644 index 00000000..bfc3f2ff --- /dev/null +++ b/src/main/java/org/hankki/hankkiserver/api/menu/service/command/MenuDeleteCommand.java @@ -0,0 +1,10 @@ +package org.hankki.hankkiserver.api.menu.service.command; + +public record MenuDeleteCommand( + long storeId, + long id +) { + public static MenuDeleteCommand of(long storeId, long id) { + return new MenuDeleteCommand(storeId, id); + } +} diff --git a/src/main/java/org/hankki/hankkiserver/api/menu/service/command/MenuPatchCommand.java b/src/main/java/org/hankki/hankkiserver/api/menu/service/command/MenuPatchCommand.java new file mode 100644 index 00000000..85fe6b00 --- /dev/null +++ b/src/main/java/org/hankki/hankkiserver/api/menu/service/command/MenuPatchCommand.java @@ -0,0 +1,12 @@ +package org.hankki.hankkiserver.api.menu.service.command; + +public record MenuPatchCommand( + long storeId, + long id, + String name, + int price +) { + public static MenuPatchCommand of(final long storeId, final long id, final String name, final int price) { + return new MenuPatchCommand(storeId, id, name, price); + } +} diff --git a/src/main/java/org/hankki/hankkiserver/api/menu/service/command/MenuPostCommand.java b/src/main/java/org/hankki/hankkiserver/api/menu/service/command/MenuPostCommand.java new file mode 100644 index 00000000..95127212 --- /dev/null +++ b/src/main/java/org/hankki/hankkiserver/api/menu/service/command/MenuPostCommand.java @@ -0,0 +1,11 @@ +package org.hankki.hankkiserver.api.menu.service.command; + +public record MenuPostCommand( + long storeId, + String name, + int price +) { + public static MenuPostCommand of(final long storeId, final String name, final int price) { + return new MenuPostCommand(storeId, name, price); + } +} diff --git a/src/main/java/org/hankki/hankkiserver/api/menu/service/response/MenuPostResponse.java b/src/main/java/org/hankki/hankkiserver/api/menu/service/response/MenuPostResponse.java new file mode 100644 index 00000000..90cb7ecf --- /dev/null +++ b/src/main/java/org/hankki/hankkiserver/api/menu/service/response/MenuPostResponse.java @@ -0,0 +1,14 @@ +package org.hankki.hankkiserver.api.menu.service.response; + +import org.hankki.hankkiserver.domain.menu.model.Menu; + +public record MenuPostResponse ( + long id, + String name, + int price +) { + + public static MenuPostResponse of(final Menu menu) { + return new MenuPostResponse(menu.getId(), menu.getName(), menu.getPrice()); + } +} diff --git a/src/main/java/org/hankki/hankkiserver/common/code/MenuErrorCode.java b/src/main/java/org/hankki/hankkiserver/common/code/MenuErrorCode.java new file mode 100644 index 00000000..136554d4 --- /dev/null +++ b/src/main/java/org/hankki/hankkiserver/common/code/MenuErrorCode.java @@ -0,0 +1,16 @@ +package org.hankki.hankkiserver.common.code; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; + +@Getter +@RequiredArgsConstructor +public enum MenuErrorCode implements ErrorCode { + + MENU_NOT_FOUND(HttpStatus.NOT_FOUND, "존재하지 않는 메뉴입니다."), + ALREADY_EXISTED_MENU(HttpStatus.CONFLICT, "이미 존재하는 메뉴입니다."); + + private final HttpStatus httpStatus; + private final String message; +} diff --git a/src/main/java/org/hankki/hankkiserver/domain/menu/model/Menu.java b/src/main/java/org/hankki/hankkiserver/domain/menu/model/Menu.java index 40ea367a..e5dd3c65 100644 --- a/src/main/java/org/hankki/hankkiserver/domain/menu/model/Menu.java +++ b/src/main/java/org/hankki/hankkiserver/domain/menu/model/Menu.java @@ -42,4 +42,9 @@ public static Menu create(final Store store, final String name, final int price) .price(price) .build(); } + + public void update(final String name, final int price) { + this.name = name; + this.price = price; + } } diff --git a/src/main/java/org/hankki/hankkiserver/domain/menu/repository/MenuRepository.java b/src/main/java/org/hankki/hankkiserver/domain/menu/repository/MenuRepository.java index 84466b6a..a2557978 100644 --- a/src/main/java/org/hankki/hankkiserver/domain/menu/repository/MenuRepository.java +++ b/src/main/java/org/hankki/hankkiserver/domain/menu/repository/MenuRepository.java @@ -5,7 +5,10 @@ import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; +import java.util.Optional; public interface MenuRepository extends JpaRepository { List findAllByStore(Store store); + Optional findByStoreIdAndId(Long storeId, Long id); + boolean existsByStoreAndName(Store store, String name); } diff --git a/src/main/java/org/hankki/hankkiserver/domain/store/model/Store.java b/src/main/java/org/hankki/hankkiserver/domain/store/model/Store.java index 1dae6986..78345239 100644 --- a/src/main/java/org/hankki/hankkiserver/domain/store/model/Store.java +++ b/src/main/java/org/hankki/hankkiserver/domain/store/model/Store.java @@ -83,4 +83,8 @@ public void softDelete() { public String getImageUrlOrElseNull() { return images.isEmpty() ? null : images.get(0).getImageUrl(); } + + public void updateLowestPrice(int lowestPrice) { + this.lowestPrice = lowestPrice; + } } From 9a1c0724eee697e144f4e74151d9b76765ac6744 Mon Sep 17 00:00:00 2001 From: Parkjyun Date: Tue, 8 Oct 2024 00:38:01 +0900 Subject: [PATCH 2/4] [fix] change MenuResponse to include id --- .../hankkiserver/api/store/service/response/MenuResponse.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/hankki/hankkiserver/api/store/service/response/MenuResponse.java b/src/main/java/org/hankki/hankkiserver/api/store/service/response/MenuResponse.java index 8c181c2f..271ee54f 100644 --- a/src/main/java/org/hankki/hankkiserver/api/store/service/response/MenuResponse.java +++ b/src/main/java/org/hankki/hankkiserver/api/store/service/response/MenuResponse.java @@ -3,10 +3,11 @@ import org.hankki.hankkiserver.domain.menu.model.Menu; public record MenuResponse( + Long id, String name, int price ) { public static MenuResponse of(Menu menu) { - return new MenuResponse(menu.getName(), menu.getPrice()); + return new MenuResponse(menu.getId(), menu.getName(), menu.getPrice()); } } From 1b7de3b74c736e0204492e067826895a600de2e3 Mon Sep 17 00:00:00 2001 From: kgy1008 Date: Wed, 9 Oct 2024 21:37:34 +0900 Subject: [PATCH 3/4] =?UTF-8?q?[fix]=20=EB=A9=94=EB=89=B4=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20API=20(#202)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [fix] add multiple menus * [fix] change logic for add menus and update lowest price * [refac] change to storage logic bulk operation --- server-yml | 2 +- .../api/menu/controller/MenuController.java | 14 +++++-- .../api/menu/service/MenuCommandService.java | 42 +++++++------------ .../api/menu/service/MenuFinder.java | 4 ++ .../menu/service/command/MenuPostCommand.java | 5 +-- .../service/command/MenusPostCommand.java | 12 ++++++ .../service/response/MenusPostResponse.java | 16 +++++++ .../menu/repository/MenuRepository.java | 4 ++ 8 files changed, 65 insertions(+), 34 deletions(-) create mode 100644 src/main/java/org/hankki/hankkiserver/api/menu/service/command/MenusPostCommand.java create mode 100644 src/main/java/org/hankki/hankkiserver/api/menu/service/response/MenusPostResponse.java diff --git a/server-yml b/server-yml index 2002c804..763eb8b6 160000 --- a/server-yml +++ b/server-yml @@ -1 +1 @@ -Subproject commit 2002c8044a8a76593334de3b776fa7fcd97f85e1 +Subproject commit 763eb8b6b018aa098c2415d7ae69bd98e375e687 diff --git a/src/main/java/org/hankki/hankkiserver/api/menu/controller/MenuController.java b/src/main/java/org/hankki/hankkiserver/api/menu/controller/MenuController.java index 84e06604..604b9784 100644 --- a/src/main/java/org/hankki/hankkiserver/api/menu/controller/MenuController.java +++ b/src/main/java/org/hankki/hankkiserver/api/menu/controller/MenuController.java @@ -7,11 +7,14 @@ 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.response.MenuPostResponse; +import org.hankki.hankkiserver.api.menu.service.command.MenusPostCommand; +import org.hankki.hankkiserver.api.menu.service.response.MenusPostResponse; import org.hankki.hankkiserver.api.store.controller.request.MenuPostRequest; import org.hankki.hankkiserver.common.code.CommonSuccessCode; import org.springframework.web.bind.annotation.*; +import java.util.List; + @RestController @RequiredArgsConstructor @RequestMapping("/api/v1") @@ -32,8 +35,11 @@ public HankkiResponse updateMenu(@PathVariable("storeId") final Long store return HankkiResponse.success(CommonSuccessCode.OK); } - @PostMapping("/{storeId}/menus") - public HankkiResponse createMenu(@PathVariable final Long storeId, @Valid @RequestBody final MenuPostRequest request) { - return HankkiResponse.success(CommonSuccessCode.CREATED, menuCommandService.createMenu(MenuPostCommand.of(storeId, request.name(), request.price()))); + @PostMapping("{storeId}/menus/bulk") + public HankkiResponse createMenu(@PathVariable final Long storeId, @Valid @RequestBody final List request) { + List command = request.stream() + .map(r -> MenuPostCommand.of(r.name(), r.price())) + .toList(); + return HankkiResponse.success(CommonSuccessCode.CREATED, menuCommandService.createMenus(MenusPostCommand.of(storeId, command))); } } 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 a6cf0897..2ae835bf 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 @@ -3,16 +3,16 @@ 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.response.MenuPostResponse; +import org.hankki.hankkiserver.api.menu.service.command.MenusPostCommand; +import org.hankki.hankkiserver.api.menu.service.response.MenusPostResponse; import org.hankki.hankkiserver.api.store.service.StoreFinder; -import org.hankki.hankkiserver.common.code.MenuErrorCode; -import org.hankki.hankkiserver.common.exception.ConflictException; import org.hankki.hankkiserver.domain.menu.model.Menu; import org.hankki.hankkiserver.domain.store.model.Store; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.List; + @Service @RequiredArgsConstructor public class MenuCommandService { @@ -37,32 +37,22 @@ public void modifyMenu(final MenuPatchCommand command) { } @Transactional - public MenuPostResponse createMenu(final MenuPostCommand command) { + public MenusPostResponse createMenus(final MenusPostCommand command) { Store findStore = storeFinder.findByIdWhereDeletedIsFalse(command.storeId()); - validateMenuNotConflict(findStore, command.name()); - Menu menu = Menu.create(findStore, command.name(), command.price()); - menuUpdater.save(menu); - updateLowestPriceInStore(findStore, menu); - return MenuPostResponse.of(menu); + List menus = command.menu().stream() + .filter(c -> !validateMenuConflict(findStore, c.name())) + .map(c -> Menu.create(findStore, c.name(), c.price())) + .toList(); + menuUpdater.saveAll(menus); + updateLowestPriceInStore(findStore); + return MenusPostResponse.of(menus); } private void updateLowestPriceInStore(final Store findStore) { - int lowestPrice = menuFinder.findAllByStore(findStore).stream() - .mapToInt(Menu::getPrice) - .min() - .orElse(0); - findStore.updateLowestPrice(lowestPrice); - } - - private void updateLowestPriceInStore(final Store store, final Menu menu) { - if (store.getLowestPrice() > menu.getPrice()) { - store.updateLowestPrice(menu.getPrice()); - } + findStore.updateLowestPrice(menuFinder.findLowestPriceByStore(findStore)); } - private void validateMenuNotConflict(Store store, String menuName) { - if (menuFinder.existsByStoreAndName(store, menuName)) { - throw new ConflictException(MenuErrorCode.ALREADY_EXISTED_MENU); - } + private boolean validateMenuConflict(Store store, String menuName) { + return menuFinder.existsByStoreAndName(store, menuName); } -} +} \ No newline at end of file diff --git a/src/main/java/org/hankki/hankkiserver/api/menu/service/MenuFinder.java b/src/main/java/org/hankki/hankkiserver/api/menu/service/MenuFinder.java index 062fc858..c377896a 100644 --- a/src/main/java/org/hankki/hankkiserver/api/menu/service/MenuFinder.java +++ b/src/main/java/org/hankki/hankkiserver/api/menu/service/MenuFinder.java @@ -27,4 +27,8 @@ protected Menu findByStoreIdAndId(final Long storeId, final Long id) { protected boolean existsByStoreAndName(final Store store, final String name) { return menuRepository.existsByStoreAndName(store, name); } + + protected int findLowestPriceByStore(Store store) { + return menuRepository.findLowestPriceByStore(store); + } } diff --git a/src/main/java/org/hankki/hankkiserver/api/menu/service/command/MenuPostCommand.java b/src/main/java/org/hankki/hankkiserver/api/menu/service/command/MenuPostCommand.java index 95127212..dc4ed36f 100644 --- a/src/main/java/org/hankki/hankkiserver/api/menu/service/command/MenuPostCommand.java +++ b/src/main/java/org/hankki/hankkiserver/api/menu/service/command/MenuPostCommand.java @@ -1,11 +1,10 @@ package org.hankki.hankkiserver.api.menu.service.command; public record MenuPostCommand( - long storeId, String name, int price ) { - public static MenuPostCommand of(final long storeId, final String name, final int price) { - return new MenuPostCommand(storeId, name, price); + public static MenuPostCommand of(final String name, final int price) { + return new MenuPostCommand(name, price); } } diff --git a/src/main/java/org/hankki/hankkiserver/api/menu/service/command/MenusPostCommand.java b/src/main/java/org/hankki/hankkiserver/api/menu/service/command/MenusPostCommand.java new file mode 100644 index 00000000..c4e2d907 --- /dev/null +++ b/src/main/java/org/hankki/hankkiserver/api/menu/service/command/MenusPostCommand.java @@ -0,0 +1,12 @@ +package org.hankki.hankkiserver.api.menu.service.command; + +import java.util.List; + +public record MenusPostCommand ( + long storeId, + List menu +){ + public static MenusPostCommand of (final long storeId, final List menu) { + return new MenusPostCommand(storeId, menu); + } +} diff --git a/src/main/java/org/hankki/hankkiserver/api/menu/service/response/MenusPostResponse.java b/src/main/java/org/hankki/hankkiserver/api/menu/service/response/MenusPostResponse.java new file mode 100644 index 00000000..41126d8d --- /dev/null +++ b/src/main/java/org/hankki/hankkiserver/api/menu/service/response/MenusPostResponse.java @@ -0,0 +1,16 @@ +package org.hankki.hankkiserver.api.menu.service.response; + +import org.hankki.hankkiserver.domain.menu.model.Menu; + +import java.util.List; + +public record MenusPostResponse( + List menuList +) { + public static MenusPostResponse of(List menus) { + List menuResponses = menus.stream() + .map(MenuPostResponse::of) + .toList(); + return new MenusPostResponse(menuResponses); + } +} \ No newline at end of file diff --git a/src/main/java/org/hankki/hankkiserver/domain/menu/repository/MenuRepository.java b/src/main/java/org/hankki/hankkiserver/domain/menu/repository/MenuRepository.java index a2557978..26f4e210 100644 --- a/src/main/java/org/hankki/hankkiserver/domain/menu/repository/MenuRepository.java +++ b/src/main/java/org/hankki/hankkiserver/domain/menu/repository/MenuRepository.java @@ -3,6 +3,7 @@ import org.hankki.hankkiserver.domain.menu.model.Menu; import org.hankki.hankkiserver.domain.store.model.Store; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import java.util.List; import java.util.Optional; @@ -11,4 +12,7 @@ public interface MenuRepository extends JpaRepository { List findAllByStore(Store store); Optional findByStoreIdAndId(Long storeId, Long id); boolean existsByStoreAndName(Store store, String name); + + @Query("SELECT MIN(m.price) FROM Menu m WHERE m.store = :store") + int findLowestPriceByStore(Store store); } From 258966ade78ac67bc194bd7a4b0ae2bc75d50e9a Mon Sep 17 00:00:00 2001 From: Parkjyun <98092394+Parkjyun@users.noreply.github.com> Date: Sat, 12 Oct 2024 12:31:34 +0900 Subject: [PATCH 4/4] =?UTF-8?q?[feat]=20=EB=91=98=EB=9F=AC=EB=B3=B4?= =?UTF-8?q?=EA=B8=B0=20=EC=B6=94=EA=B0=80=EB=A5=BC=20=EC=9C=84=ED=95=9C=20?= =?UTF-8?q?whiteList=20=EC=B6=94=EA=B0=80=20(#204)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hankki/hankkiserver/auth/config/SecurityConfig.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/hankki/hankkiserver/auth/config/SecurityConfig.java b/src/main/java/org/hankki/hankkiserver/auth/config/SecurityConfig.java index 1b0d5b6a..a71b996e 100644 --- a/src/main/java/org/hankki/hankkiserver/auth/config/SecurityConfig.java +++ b/src/main/java/org/hankki/hankkiserver/auth/config/SecurityConfig.java @@ -25,7 +25,9 @@ public class SecurityConfig { private final JwtValidator jwtValidator; private final JwtProvider jwtProvider; - private static final String[] whiteList = {"/api/v1/auth/login", "/api/v1/auth/reissue", "/actuator/health"}; + private static final String[] authWhiteList = {"/api/v1/auth/login", "/api/v1/auth/reissue", "/actuator/health"}; + private static final String[] businessLogicWhileList = {"/api/v1/stores/categories", "/api/v1/stores/sort-options", "/api/v1/stores/price-categories", + "/api/v1/stores", "/api/v1/stores/pins", "/api/v1/stores/{articleId:\\d+}/thumbnail", "/api/v1/universities"}; @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { @@ -50,6 +52,8 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { @Bean public WebSecurityCustomizer webSecurityCustomizer() { - return web -> web.ignoring().requestMatchers(whiteList); + return web -> web.ignoring() + .requestMatchers(authWhiteList) + .requestMatchers(businessLogicWhileList); } }