From 01d7db019d47979a118e690425c45d70c55834cf Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Fri, 8 Aug 2025 21:11:20 +0900 Subject: [PATCH 1/9] =?UTF-8?q?feat(Menu):=20=EB=A9=94=EB=89=B4=20?= =?UTF-8?q?=EB=85=B8=EC=B6=9C=20=EC=88=9C=EC=84=9C=EB=A5=BC=20=EC=9C=84?= =?UTF-8?q?=ED=95=9C=20sortOrder=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../applicationadmin/menu/dto/MenuCreateRequest.java | 1 + .../applicationadmin/menu/dto/MenuCreateResponse.java | 3 ++- .../com/nowait/applicationadmin/menu/dto/MenuReadDto.java | 3 ++- .../com/nowait/applicationuser/menu/dto/MenuReadDto.java | 2 ++ .../java/com/nowait/domaincorerdb/menu/entity/Menu.java | 7 +++++++ 5 files changed, 14 insertions(+), 2 deletions(-) diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/dto/MenuCreateRequest.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/dto/MenuCreateRequest.java index 4b5fc37c..89813c71 100644 --- a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/dto/MenuCreateRequest.java +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/dto/MenuCreateRequest.java @@ -31,6 +31,7 @@ public Menu toEntity() { .description(description) .price(price) .isSoldOut(false) + .sortOrder(0L) .deleted(false) .build(); } diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/dto/MenuCreateResponse.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/dto/MenuCreateResponse.java index 466f2d50..41d2affe 100644 --- a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/dto/MenuCreateResponse.java +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/dto/MenuCreateResponse.java @@ -4,7 +4,6 @@ import com.nowait.domaincorerdb.menu.entity.Menu; -import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -20,6 +19,7 @@ public class MenuCreateResponse { private String description; private Integer price; private Boolean isSoldOut; + private Long sortOrder; private Boolean deleted; private LocalDateTime createdAt; @@ -34,6 +34,7 @@ public static MenuCreateResponse fromEntity(Menu menu) { .description(menu.getDescription()) .price(menu.getPrice()) .isSoldOut(menu.getIsSoldOut()) + .sortOrder(menu.getSortOrder()) .deleted(menu.getDeleted()) .build(); } diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/dto/MenuReadDto.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/dto/MenuReadDto.java index a5e25126..d4d3dc36 100644 --- a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/dto/MenuReadDto.java +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/dto/MenuReadDto.java @@ -4,7 +4,6 @@ import com.nowait.domaincorerdb.menu.entity.Menu; -import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -19,6 +18,7 @@ public class MenuReadDto { private String name; private String description; private Integer price; + private Long sortOrder; private Boolean isSoldOut; private Boolean deleted; private List images; @@ -31,6 +31,7 @@ public static MenuReadDto fromEntity(Menu menu, List im .name(menu.getName()) .description(menu.getDescription()) .price(menu.getPrice()) + .sortOrder(menu.getSortOrder()) .isSoldOut(menu.getIsSoldOut()) .deleted(menu.getDeleted()) .images(images) diff --git a/nowait-app-user-api/src/main/java/com/nowait/applicationuser/menu/dto/MenuReadDto.java b/nowait-app-user-api/src/main/java/com/nowait/applicationuser/menu/dto/MenuReadDto.java index cf013289..ce8d6325 100644 --- a/nowait-app-user-api/src/main/java/com/nowait/applicationuser/menu/dto/MenuReadDto.java +++ b/nowait-app-user-api/src/main/java/com/nowait/applicationuser/menu/dto/MenuReadDto.java @@ -17,6 +17,7 @@ public class MenuReadDto { private String name; private String description; private Integer price; + private Long sortOrder; private Boolean isSoldOut; private Boolean deleted; private List images; @@ -28,6 +29,7 @@ public static MenuReadDto fromEntity(Menu menu, List im .name(menu.getName()) .description(menu.getDescription()) .price(menu.getPrice()) + .sortOrder(menu.getSortOrder()) .isSoldOut(menu.getIsSoldOut()) .deleted(menu.getDeleted()) .images(images) diff --git a/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/menu/entity/Menu.java b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/menu/entity/Menu.java index fc1f35bc..c1297176 100644 --- a/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/menu/entity/Menu.java +++ b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/menu/entity/Menu.java @@ -46,6 +46,9 @@ public class Menu extends BaseTimeEntity { @Column(nullable = false) private Boolean isSoldOut; + @Column(nullable = false) + private Long sortOrder; + @Column(nullable = false) private Boolean deleted; @@ -72,4 +75,8 @@ public void updateInfo(String adminDisplayName, String name, String description, public void markAsDeleted() { this.deleted = true; } public void toggleSoldOut() { this.isSoldOut = !this.isSoldOut; } + + public void updateSortOrder(Long sortOrder) { + this.sortOrder = sortOrder; + } } From a7fc5890d938082ab24fb90be29b7e0261e19978 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Fri, 8 Aug 2025 21:11:31 +0900 Subject: [PATCH 2/9] =?UTF-8?q?feat(Menu):=20=EB=A9=94=EB=89=B4=20?= =?UTF-8?q?=EC=88=9C=EC=84=9C=20=EB=B3=80=EA=B2=BD=20=EC=97=94=EB=93=9C?= =?UTF-8?q?=ED=8F=AC=EC=9D=B8=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../menu/controller/MenuController.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/controller/MenuController.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/controller/MenuController.java index e4ee6369..3b28ee64 100644 --- a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/controller/MenuController.java +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/controller/MenuController.java @@ -1,5 +1,7 @@ package com.nowait.applicationadmin.menu.controller; +import java.util.List; + import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.core.annotation.AuthenticationPrincipal; @@ -14,6 +16,7 @@ import com.nowait.applicationadmin.menu.dto.MenuCreateRequest; import com.nowait.applicationadmin.menu.dto.MenuCreateResponse; +import com.nowait.applicationadmin.menu.dto.MenuSortUpdateRequest; import com.nowait.applicationadmin.menu.dto.MenuUpdateRequest; import com.nowait.applicationadmin.menu.service.MenuService; import com.nowait.common.api.ApiUtils; @@ -125,4 +128,20 @@ public ResponseEntity toggleSoldOut(@PathVariable Long menuId) { ) ); } + + @PatchMapping("/update-sort") + @Operation(summary = "메뉴 순서 수정", description = "메뉴의 순서를 수정합니다.") + @ApiResponse(responseCode = "200", description = "메뉴 순서 수정") + public ResponseEntity updateMenuSortOrder( + @Valid @RequestBody List request, + @AuthenticationPrincipal MemberDetails memberDetails + ) { + return ResponseEntity + .status(HttpStatus.OK) + .body( + ApiUtils.success( + menuService.updateMenuSortOrder(request, memberDetails) + ) + ); + } } From 1bc506f648081bf11517f2a8c49142711b57e5fd Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Fri, 8 Aug 2025 21:11:47 +0900 Subject: [PATCH 3/9] =?UTF-8?q?feat(Menu):=20=EB=A9=94=EB=89=B4=20?= =?UTF-8?q?=EC=88=9C=EC=84=9C=20=EB=B3=80=EA=B2=BD=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../menu/service/MenuService.java | 23 ++++++++++++++++++- .../menu/service/MenuService.java | 2 +- .../menu/repository/MenuRepository.java | 1 + 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/service/MenuService.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/service/MenuService.java index 54972594..51fdba1c 100644 --- a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/service/MenuService.java +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/service/MenuService.java @@ -10,6 +10,7 @@ import com.nowait.applicationadmin.menu.dto.MenuImageUploadResponse; import com.nowait.applicationadmin.menu.dto.MenuReadDto; import com.nowait.applicationadmin.menu.dto.MenuReadResponse; +import com.nowait.applicationadmin.menu.dto.MenuSortUpdateRequest; import com.nowait.applicationadmin.menu.dto.MenuUpdateRequest; import com.nowait.common.enums.Role; import com.nowait.domaincorerdb.menu.entity.Menu; @@ -60,7 +61,7 @@ public MenuReadResponse getAllMenusByStoreId(Long storeId, MemberDetails memberD // 사용자 역할이 SUPER_ADMIN이거나, storeId가 일치하는지 확인 validateMenuViewAuthorization(user, storeId); - List menus = menuRepository.findAllByStoreIdAndDeletedFalse(storeId); + List menus = menuRepository.findAllByStoreIdAndDeletedFalseOrderBySortOrder(storeId); List menuReadResponse = menus.stream() .map(menu -> { @@ -123,6 +124,26 @@ public MenuReadDto updateMenu(Long menuId, MenuUpdateRequest request, MemberDeta return MenuReadDto.fromEntity(saved, imageDto); } + @Transactional + public String updateMenuSortOrder(List requests, MemberDetails memberDetails) { + User user = userRepository.findById(memberDetails.getId()).orElseThrow(UserNotFoundException::new); + + if (!Role.SUPER_ADMIN.equals(user.getRole())) { + throw new MenuUpdateUnauthorizedException(); + } + + requests.stream() + .map(request -> { + Menu menu = menuRepository.findById(request.getMenuId()) + .orElseThrow(MenuNotFoundException::new); + menu.updateSortOrder(request.getSortOrder()); + return menu; + }) + .forEach(menuRepository::save); + + return "메뉴 순서가 성공적으로 업데이트되었습니다."; + } + @Transactional public String deleteMenu(Long menuId, MemberDetails memberDetails) { User user = userRepository.findById(memberDetails.getId()).orElseThrow(UserNotFoundException::new); diff --git a/nowait-app-user-api/src/main/java/com/nowait/applicationuser/menu/service/MenuService.java b/nowait-app-user-api/src/main/java/com/nowait/applicationuser/menu/service/MenuService.java index 2fc43c90..2ab8cfb7 100644 --- a/nowait-app-user-api/src/main/java/com/nowait/applicationuser/menu/service/MenuService.java +++ b/nowait-app-user-api/src/main/java/com/nowait/applicationuser/menu/service/MenuService.java @@ -30,7 +30,7 @@ public MenuReadResponse getAllMenusByStoreId(Long storeId) { if (storeId == null) { throw new MenuParamEmptyException(); } - List menus = menuRepository.findAllByStoreIdAndDeletedFalse(storeId); + List menus = menuRepository.findAllByStoreIdAndDeletedFalseOrderBySortOrder(storeId); List menuReadResponse = menus.stream() .map(menu -> { diff --git a/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/menu/repository/MenuRepository.java b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/menu/repository/MenuRepository.java index 80f07c95..b785836c 100644 --- a/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/menu/repository/MenuRepository.java +++ b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/menu/repository/MenuRepository.java @@ -11,6 +11,7 @@ @Repository public interface MenuRepository extends JpaRepository { List findAllByStoreIdAndDeletedFalse(Long storeId); + List findAllByStoreIdAndDeletedFalseOrderBySortOrder(Long storeId); Optional findByStoreIdAndIdAndDeletedFalse(Long storeId, Long menuId); Optional findByIdAndDeletedFalse(Long menuId); } From 14b20503185d08a3402297387faa92687d824ab5 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Fri, 8 Aug 2025 21:11:53 +0900 Subject: [PATCH 4/9] =?UTF-8?q?feat(Menu):=20MenuSortUpdateRequest=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../menu/dto/MenuSortUpdateRequest.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/dto/MenuSortUpdateRequest.java diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/dto/MenuSortUpdateRequest.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/dto/MenuSortUpdateRequest.java new file mode 100644 index 00000000..fb4fd341 --- /dev/null +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/dto/MenuSortUpdateRequest.java @@ -0,0 +1,15 @@ +package com.nowait.applicationadmin.menu.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class MenuSortUpdateRequest { + private Long menuId; + private Long sortOrder; +} From d9de302a935f022915fbde721275713a34f6ecd9 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Fri, 8 Aug 2025 21:12:15 +0900 Subject: [PATCH 5/9] =?UTF-8?q?feat(Order):=20null=20=EB=B0=A9=EC=A7=80=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../applicationadmin/order/dto/OrderResponseDto.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/order/dto/OrderResponseDto.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/order/dto/OrderResponseDto.java index d8a3979a..274063a4 100644 --- a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/order/dto/OrderResponseDto.java +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/order/dto/OrderResponseDto.java @@ -1,6 +1,7 @@ package com.nowait.applicationadmin.order.dto; import java.time.LocalDateTime; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; @@ -19,14 +20,17 @@ public class OrderResponseDto { private String depositorName; private Integer totalPrice; private OrderStatus status; - private Map menuDetails; + private HashMap menuDetails; private LocalDateTime createdAt; public static OrderResponseDto fromEntity(UserOrder userOrder) { - Map menuDetails = new LinkedHashMap<>(); + HashMap menuDetails = new LinkedHashMap<>(); for (OrderItem item : userOrder.getOrderItems()) { - String displayName = item.getMenu().getAdminDisplayName(); + String displayName = item.getMenu().getAdminDisplayName() == null + ? item.getMenu().getName() // 관리자 표시명이 없으면 일반 메뉴명 사용 + : item.getMenu().getAdminDisplayName(); + int quantity = item.getQuantity(); int price = item.getMenu().getPrice(); // 메뉴 단가 From 96527417d63dd9b41adf93e9747631af0bf815e2 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Fri, 8 Aug 2025 21:19:33 +0900 Subject: [PATCH 6/9] =?UTF-8?q?refactor(Order):=20=EC=9E=85=EB=A0=A5?= =?UTF-8?q?=EA=B0=92=20=EA=B2=80=EC=A6=9D=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../applicationadmin/menu/dto/MenuSortUpdateRequest.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/dto/MenuSortUpdateRequest.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/dto/MenuSortUpdateRequest.java index fb4fd341..c9509e1f 100644 --- a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/dto/MenuSortUpdateRequest.java +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/dto/MenuSortUpdateRequest.java @@ -1,5 +1,7 @@ package com.nowait.applicationadmin.menu.dto; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.PositiveOrZero; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; @@ -10,6 +12,9 @@ @NoArgsConstructor @Builder public class MenuSortUpdateRequest { + @NotNull private Long menuId; + @NotNull + @PositiveOrZero private Long sortOrder; } From 8e24938bf8b0c3b9673bc225586131d593c31340 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Fri, 8 Aug 2025 21:21:37 +0900 Subject: [PATCH 7/9] =?UTF-8?q?refactor(Order):=20=EA=B4=80=EB=A6=AC?= =?UTF-8?q?=EC=9E=90=20=EB=A9=94=EB=89=B4=EB=AA=85=20=EC=97=86=EB=8A=94=20?= =?UTF-8?q?=EA=B2=BD=EC=9A=B0=20=EC=B2=98=EB=A6=AC=20=EB=A1=9C=EC=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../applicationadmin/order/dto/OrderResponseDto.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/order/dto/OrderResponseDto.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/order/dto/OrderResponseDto.java index 274063a4..8224813e 100644 --- a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/order/dto/OrderResponseDto.java +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/order/dto/OrderResponseDto.java @@ -20,16 +20,17 @@ public class OrderResponseDto { private String depositorName; private Integer totalPrice; private OrderStatus status; - private HashMap menuDetails; + private Map menuDetails; private LocalDateTime createdAt; public static OrderResponseDto fromEntity(UserOrder userOrder) { HashMap menuDetails = new LinkedHashMap<>(); for (OrderItem item : userOrder.getOrderItems()) { - String displayName = item.getMenu().getAdminDisplayName() == null - ? item.getMenu().getName() // 관리자 표시명이 없으면 일반 메뉴명 사용 - : item.getMenu().getAdminDisplayName(); + String adminDisplayName = item.getMenu().getAdminDisplayName(); + String displayName = (adminDisplayName == null || adminDisplayName.isBlank()) + ? item.getMenu().getName() // 관리자 표시명이 없거나 공백이면 일반 메뉴명 사용 + : adminDisplayName; int quantity = item.getQuantity(); int price = item.getMenu().getPrice(); // 메뉴 단가 From 609be6617b27114abbbd36c703bc1afd86a4160b Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Fri, 8 Aug 2025 21:27:12 +0900 Subject: [PATCH 8/9] =?UTF-8?q?refactor(Menu):=20=EA=B2=80=EC=A6=9D=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../menu/service/MenuService.java | 39 +++++++++++++++---- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/service/MenuService.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/service/MenuService.java index 51fdba1c..2bdd5589 100644 --- a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/service/MenuService.java +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/menu/service/MenuService.java @@ -1,6 +1,7 @@ package com.nowait.applicationadmin.menu.service; import java.util.List; +import java.util.Map; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -132,14 +133,36 @@ public String updateMenuSortOrder(List requests, MemberDe throw new MenuUpdateUnauthorizedException(); } - requests.stream() - .map(request -> { - Menu menu = menuRepository.findById(request.getMenuId()) - .orElseThrow(MenuNotFoundException::new); - menu.updateSortOrder(request.getSortOrder()); - return menu; - }) - .forEach(menuRepository::save); + if (requests == null || requests.isEmpty()) { + throw new MenuParamEmptyException(); + } + + if (requests.stream().map(MenuSortUpdateRequest::getMenuId).distinct().count() != requests.size()) { + throw new IllegalArgumentException("중복된 메뉴 ID가 포함되어 있습니다."); + } + + if (requests.stream().anyMatch(r -> r.getSortOrder() == null || r.getSortOrder() < 0)) { + throw new IllegalArgumentException("잘못된 정렬 순서가 포함되어 있습니다. 정렬 순서는 0 이상의 정수여야 합니다."); + } + + List ids = requests.stream().map(MenuSortUpdateRequest::getMenuId).toList(); + List menus = menuRepository.findAllById(ids); + if (menus.size() != ids.size()) { + throw new MenuNotFoundException(); + } + + Long storeId = menus.get(0).getStoreId(); + if (!menus.stream().allMatch(m -> storeId.equals(m.getStoreId()))) { + throw new IllegalArgumentException("다른 매장의 메뉴가 있습니다."); + } + + Map idToSort = requests.stream() + .collect(java.util.stream.Collectors.toMap(MenuSortUpdateRequest::getMenuId, + MenuSortUpdateRequest::getSortOrder)); + + menus.forEach(m -> m.updateSortOrder(idToSort.get(m.getId()))); + + menuRepository.saveAll(menus); return "메뉴 순서가 성공적으로 업데이트되었습니다."; } From 4d189d8b1b3ca70d662fe95f6f1b6911ec4a70ca Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Fri, 8 Aug 2025 21:27:54 +0900 Subject: [PATCH 9/9] =?UTF-8?q?refactor(Menu):=20HashMap=EC=9C=BC=EB=A1=9C?= =?UTF-8?q?=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/nowait/applicationadmin/order/dto/OrderResponseDto.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/order/dto/OrderResponseDto.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/order/dto/OrderResponseDto.java index 8224813e..3bd2e1b9 100644 --- a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/order/dto/OrderResponseDto.java +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/order/dto/OrderResponseDto.java @@ -20,7 +20,7 @@ public class OrderResponseDto { private String depositorName; private Integer totalPrice; private OrderStatus status; - private Map menuDetails; + private HashMap menuDetails; private LocalDateTime createdAt; public static OrderResponseDto fromEntity(UserOrder userOrder) {