From fcb8290165cb8f5296ac0091c5bcbdcfdacef54d Mon Sep 17 00:00:00 2001 From: jhssong Date: Sun, 8 Mar 2026 10:43:28 +0900 Subject: [PATCH 01/11] chore: Add .DS_Store to .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index b14e901..55950e4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +.DS_Store + .*env .env* HELP.md From ec8ca3072bf38924ec56499e6c34e5000192933c Mon Sep 17 00:00:00 2001 From: jhssong Date: Sun, 8 Mar 2026 11:15:18 +0900 Subject: [PATCH 02/11] =?UTF-8?q?refactor:=20=EC=A3=BC=EB=A7=89=20?= =?UTF-8?q?=EC=A3=BC=EB=AC=B8=20=EC=97=94=ED=8B=B0=ED=8B=B0=20=ED=8C=A8?= =?UTF-8?q?=ED=82=A4=EC=A7=80=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{pubTableSession => pubOrder}/entity/PubOrder.java | 2 +- .../domain/pubOrder/repository/PubOrderRepository.java | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) rename src/main/java/kr/co/knuserver/domain/{pubTableSession => pubOrder}/entity/PubOrder.java (95%) create mode 100644 src/main/java/kr/co/knuserver/domain/pubOrder/repository/PubOrderRepository.java diff --git a/src/main/java/kr/co/knuserver/domain/pubTableSession/entity/PubOrder.java b/src/main/java/kr/co/knuserver/domain/pubOrder/entity/PubOrder.java similarity index 95% rename from src/main/java/kr/co/knuserver/domain/pubTableSession/entity/PubOrder.java rename to src/main/java/kr/co/knuserver/domain/pubOrder/entity/PubOrder.java index 0d27d0d..9f451f1 100644 --- a/src/main/java/kr/co/knuserver/domain/pubTableSession/entity/PubOrder.java +++ b/src/main/java/kr/co/knuserver/domain/pubOrder/entity/PubOrder.java @@ -1,4 +1,4 @@ -package kr.co.knuserver.domain.pubTableSession.entity; +package kr.co.knuserver.domain.pubOrder.entity; import jakarta.persistence.Column; import jakarta.persistence.Entity; diff --git a/src/main/java/kr/co/knuserver/domain/pubOrder/repository/PubOrderRepository.java b/src/main/java/kr/co/knuserver/domain/pubOrder/repository/PubOrderRepository.java new file mode 100644 index 0000000..e177b0b --- /dev/null +++ b/src/main/java/kr/co/knuserver/domain/pubOrder/repository/PubOrderRepository.java @@ -0,0 +1,7 @@ +package kr.co.knuserver.domain.pubOrder.repository; + +import kr.co.knuserver.domain.pubOrder.entity.PubOrder; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface PubOrderRepository extends JpaRepository { +} From ebb5f0b466787d49940cb4d21cdc4c9496dbea8d Mon Sep 17 00:00:00 2001 From: jhssong Date: Fri, 13 Mar 2026 16:31:19 +0900 Subject: [PATCH 03/11] feat: Add quantity field in PubOrder --- .../kr/co/knuserver/domain/pubOrder/entity/PubOrder.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/kr/co/knuserver/domain/pubOrder/entity/PubOrder.java b/src/main/java/kr/co/knuserver/domain/pubOrder/entity/PubOrder.java index 9f451f1..e92a3af 100644 --- a/src/main/java/kr/co/knuserver/domain/pubOrder/entity/PubOrder.java +++ b/src/main/java/kr/co/knuserver/domain/pubOrder/entity/PubOrder.java @@ -21,7 +21,7 @@ public class PubOrder { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "pub_table_id") + @Column(name = "pub_order_id") private Long id; @Column(name = "pub_table_session_id", nullable = false) @@ -30,10 +30,14 @@ public class PubOrder { @Column(name = "pub_menu_id", nullable = false) private Long pubMenuId; - public static PubOrder createPubOrder(Long pubSessionId, Long pubMenuId) { + @Column(name = "quantity", nullable = false) + private Integer quantity; + + public static PubOrder createPubOrder(Long pubSessionId, Long pubMenuId, Integer quantity) { return PubOrder.builder() .pubTableSessionId(pubSessionId) .pubMenuId(pubMenuId) + .quantity(quantity) .build(); } } From deccd4cda2d4fab88cc8b0bdd52837ed11390349 Mon Sep 17 00:00:00 2001 From: jhssong Date: Fri, 13 Mar 2026 16:33:06 +0900 Subject: [PATCH 04/11] =?UTF-8?q?feat:=20=EC=A3=BC=EB=AC=B8=20=EC=9A=94?= =?UTF-8?q?=EC=B2=AD/=EC=9D=91=EB=8B=B5=20DTO=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/pubOrder/dto/OrderMenus.java | 9 +++++++ .../pubOrder/dto/OrderedMenus.java | 24 +++++++++++++++++++ .../pubOrder/dto/PubOrderRequestDto.java | 10 ++++++++ .../pubOrder/dto/PubOrderResponseDto.java | 19 +++++++++++++++ 4 files changed, 62 insertions(+) create mode 100644 src/main/java/kr/co/knuserver/presentation/pubOrder/dto/OrderMenus.java create mode 100644 src/main/java/kr/co/knuserver/presentation/pubOrder/dto/OrderedMenus.java create mode 100644 src/main/java/kr/co/knuserver/presentation/pubOrder/dto/PubOrderRequestDto.java create mode 100644 src/main/java/kr/co/knuserver/presentation/pubOrder/dto/PubOrderResponseDto.java diff --git a/src/main/java/kr/co/knuserver/presentation/pubOrder/dto/OrderMenus.java b/src/main/java/kr/co/knuserver/presentation/pubOrder/dto/OrderMenus.java new file mode 100644 index 0000000..1f3796f --- /dev/null +++ b/src/main/java/kr/co/knuserver/presentation/pubOrder/dto/OrderMenus.java @@ -0,0 +1,9 @@ +package kr.co.knuserver.presentation.pubOrder.dto; + +import jakarta.validation.constraints.NotNull; + +public record OrderMenus( + @NotNull Long menuId, + @NotNull Integer quantity +) { +} diff --git a/src/main/java/kr/co/knuserver/presentation/pubOrder/dto/OrderedMenus.java b/src/main/java/kr/co/knuserver/presentation/pubOrder/dto/OrderedMenus.java new file mode 100644 index 0000000..dfc0642 --- /dev/null +++ b/src/main/java/kr/co/knuserver/presentation/pubOrder/dto/OrderedMenus.java @@ -0,0 +1,24 @@ +package kr.co.knuserver.presentation.pubOrder.dto; + +import kr.co.knuserver.domain.pubMenu.entity.PubMenu; +import kr.co.knuserver.domain.pubOrder.entity.PubOrder; +import lombok.Builder; + +@Builder +public record OrderedMenus( + Long orderId, + Long menuId, + String name, + int price, + Integer quantity +) { + public static OrderedMenus fromEntity(PubOrder pubOrder, PubMenu pubMenu) { + return OrderedMenus.builder() + .orderId(pubOrder.getId()) + .menuId(pubMenu.getId()) + .name(pubMenu.getName()) + .price(pubMenu.getPrice()) + .quantity(pubOrder.getQuantity()) + .build(); + } +} \ No newline at end of file diff --git a/src/main/java/kr/co/knuserver/presentation/pubOrder/dto/PubOrderRequestDto.java b/src/main/java/kr/co/knuserver/presentation/pubOrder/dto/PubOrderRequestDto.java new file mode 100644 index 0000000..bb014da --- /dev/null +++ b/src/main/java/kr/co/knuserver/presentation/pubOrder/dto/PubOrderRequestDto.java @@ -0,0 +1,10 @@ +package kr.co.knuserver.presentation.pubOrder.dto; + +import jakarta.validation.constraints.NotNull; +import java.util.List; + +public record PubOrderRequestDto( + @NotNull Long pubTableSessionId, + @NotNull List orderMenus +) { +} diff --git a/src/main/java/kr/co/knuserver/presentation/pubOrder/dto/PubOrderResponseDto.java b/src/main/java/kr/co/knuserver/presentation/pubOrder/dto/PubOrderResponseDto.java new file mode 100644 index 0000000..6084b7a --- /dev/null +++ b/src/main/java/kr/co/knuserver/presentation/pubOrder/dto/PubOrderResponseDto.java @@ -0,0 +1,19 @@ +package kr.co.knuserver.presentation.pubOrder.dto; + +import jakarta.validation.constraints.NotNull; +import java.util.List; +import kr.co.knuserver.domain.pubOrder.entity.PubOrder; +import lombok.Builder; + +@Builder +public record PubOrderResponseDto( + @NotNull Long pubTableSessionId, + @NotNull List orderedMenus +) { + public static PubOrderResponseDto fromEntity(Long pubTableSessionId, List orderedMenus) { + return PubOrderResponseDto.builder() + .pubTableSessionId(pubTableSessionId) + .orderedMenus(orderedMenus) + .build(); + } +} From 917c32e9b9bae67a588afcb52ff57b91e9e66e08 Mon Sep 17 00:00:00 2001 From: jhssong Date: Fri, 13 Mar 2026 16:44:00 +0900 Subject: [PATCH 05/11] =?UTF-8?q?feat:=20=EC=A3=BC=EB=A7=89=20=EC=A3=BC?= =?UTF-8?q?=EB=AC=B8=20API=20CRD=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pubOrder/PubOrderCommandService.java | 48 +++++++++++++++++++ .../pubOrder/PubOrderQueryService.java | 37 ++++++++++++++ .../repository/PubOrderRepository.java | 3 ++ .../global/exception/BusinessErrorCode.java | 1 + .../controller/PubOrderCommandController.java | 33 +++++++++++++ .../controller/PubOrderQueryController.java | 23 +++++++++ 6 files changed, 145 insertions(+) create mode 100644 src/main/java/kr/co/knuserver/application/pubOrder/PubOrderCommandService.java create mode 100644 src/main/java/kr/co/knuserver/application/pubOrder/PubOrderQueryService.java create mode 100644 src/main/java/kr/co/knuserver/presentation/pubOrder/controller/PubOrderCommandController.java create mode 100644 src/main/java/kr/co/knuserver/presentation/pubOrder/controller/PubOrderQueryController.java diff --git a/src/main/java/kr/co/knuserver/application/pubOrder/PubOrderCommandService.java b/src/main/java/kr/co/knuserver/application/pubOrder/PubOrderCommandService.java new file mode 100644 index 0000000..bc4cbe7 --- /dev/null +++ b/src/main/java/kr/co/knuserver/application/pubOrder/PubOrderCommandService.java @@ -0,0 +1,48 @@ +package kr.co.knuserver.application.pubOrder; + +import java.util.ArrayList; +import java.util.List; +import kr.co.knuserver.application.pubMenu.PubMenuQueryService; +import kr.co.knuserver.application.pubTableSession.PubTableSessionQueryService; +import kr.co.knuserver.domain.pubMenu.entity.PubMenu; +import kr.co.knuserver.domain.pubOrder.entity.PubOrder; +import kr.co.knuserver.domain.pubOrder.repository.PubOrderRepository; +import kr.co.knuserver.domain.pubTableSession.entity.PubTableSession; +import kr.co.knuserver.presentation.pubOrder.dto.OrderMenus; +import kr.co.knuserver.presentation.pubOrder.dto.OrderedMenus; +import kr.co.knuserver.presentation.pubOrder.dto.PubOrderRequestDto; +import kr.co.knuserver.presentation.pubOrder.dto.PubOrderResponseDto; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional +public class PubOrderCommandService { + + private final PubOrderRepository pubOrderRepository; + private final PubOrderQueryService pubOrderQueryService; + private final PubTableSessionQueryService pubTableSessionQueryService; + private final PubMenuQueryService pubMenuQueryService; + + public PubOrderResponseDto createOrder(PubOrderRequestDto request) { + PubTableSession pubTableSession = pubTableSessionQueryService.getPubTableSessionById(request.pubTableSessionId()); + + List pubOrders = new ArrayList<>(); + for (OrderMenus orderMenus : request.orderMenus()) { + pubOrders.add(PubOrder.createPubOrder(pubTableSession.getId(), orderMenus.menuId(), orderMenus.quantity())); + } + List savedPubOrders = pubOrderRepository.saveAll(pubOrders); + List orderedMenus = savedPubOrders.stream().map((pubOrder -> { + PubMenu pubMenu = pubMenuQueryService.findPubMenuById(pubOrder.getPubMenuId()); + return OrderedMenus.fromEntity(pubOrder, pubMenu); + })).toList(); + return PubOrderResponseDto.fromEntity(request.pubTableSessionId(), orderedMenus); + } + + public void deleteOrder(Long pubOrderId) { + PubOrder pubOrder = pubOrderQueryService.findByOrderId(pubOrderId); + pubOrderRepository.delete(pubOrder); + } +} diff --git a/src/main/java/kr/co/knuserver/application/pubOrder/PubOrderQueryService.java b/src/main/java/kr/co/knuserver/application/pubOrder/PubOrderQueryService.java new file mode 100644 index 0000000..858888c --- /dev/null +++ b/src/main/java/kr/co/knuserver/application/pubOrder/PubOrderQueryService.java @@ -0,0 +1,37 @@ +package kr.co.knuserver.application.pubOrder; + +import java.util.List; +import kr.co.knuserver.application.pubMenu.PubMenuQueryService; +import kr.co.knuserver.domain.pubMenu.entity.PubMenu; +import kr.co.knuserver.domain.pubOrder.entity.PubOrder; +import kr.co.knuserver.domain.pubOrder.repository.PubOrderRepository; +import kr.co.knuserver.global.exception.BusinessErrorCode; +import kr.co.knuserver.global.exception.BusinessException; +import kr.co.knuserver.presentation.pubOrder.dto.OrderedMenus; +import kr.co.knuserver.presentation.pubOrder.dto.PubOrderResponseDto; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +@Service +@RequiredArgsConstructor +@Transactional(readOnly = true, propagation = Propagation.SUPPORTS) +public class PubOrderQueryService { + + private final PubOrderRepository pubOrderRepository; + private final PubMenuQueryService pubMenuQueryService; + + public PubOrder findByOrderId(Long orderId) { + return pubOrderRepository.findById(orderId).orElseThrow(() -> new BusinessException(BusinessErrorCode.PUB_ORDER_NOT_FOUND)); + } + + public PubOrderResponseDto getAllByPubTableSessionId(Long pubTableSessionId) { + List pubOrderList = pubOrderRepository.findAllByPubTableSessionId(pubTableSessionId); + List orderedMenus = pubOrderList.stream().map((pubOrder -> { + PubMenu pubMenu = pubMenuQueryService.findPubMenuById(pubOrder.getPubMenuId()); + return OrderedMenus.fromEntity(pubOrder, pubMenu); + })).toList(); + return PubOrderResponseDto.fromEntity(pubTableSessionId, orderedMenus); + } +} diff --git a/src/main/java/kr/co/knuserver/domain/pubOrder/repository/PubOrderRepository.java b/src/main/java/kr/co/knuserver/domain/pubOrder/repository/PubOrderRepository.java index e177b0b..3678921 100644 --- a/src/main/java/kr/co/knuserver/domain/pubOrder/repository/PubOrderRepository.java +++ b/src/main/java/kr/co/knuserver/domain/pubOrder/repository/PubOrderRepository.java @@ -1,7 +1,10 @@ package kr.co.knuserver.domain.pubOrder.repository; +import java.util.List; import kr.co.knuserver.domain.pubOrder.entity.PubOrder; +import kr.co.knuserver.domain.pubTableSession.entity.PubTableSession; import org.springframework.data.jpa.repository.JpaRepository; public interface PubOrderRepository extends JpaRepository { + List findAllByPubTableSessionId(Long pubTableSessionId); } diff --git a/src/main/java/kr/co/knuserver/global/exception/BusinessErrorCode.java b/src/main/java/kr/co/knuserver/global/exception/BusinessErrorCode.java index 288bc54..e7f52b1 100644 --- a/src/main/java/kr/co/knuserver/global/exception/BusinessErrorCode.java +++ b/src/main/java/kr/co/knuserver/global/exception/BusinessErrorCode.java @@ -54,6 +54,7 @@ public enum BusinessErrorCode implements ErrorCode { */ PUB_BOOTH_NOT_FOUND(HttpStatus.NOT_FOUND, "C301", "해당 주점을 찾을 수 없습니다."), PUB_MENU_NOT_FOUND(HttpStatus.NOT_FOUND, "C302", "해당 주점 메뉴를 찾을 수 없습니다."), + PUB_ORDER_NOT_FOUND(HttpStatus.NOT_FOUND, "C206", "해당 주문을 찾을 수 없습니다."), /* * 405 METHOD_NOT_ALLOWED: 허용되지 않은 Request Method 호출 diff --git a/src/main/java/kr/co/knuserver/presentation/pubOrder/controller/PubOrderCommandController.java b/src/main/java/kr/co/knuserver/presentation/pubOrder/controller/PubOrderCommandController.java new file mode 100644 index 0000000..b04f97b --- /dev/null +++ b/src/main/java/kr/co/knuserver/presentation/pubOrder/controller/PubOrderCommandController.java @@ -0,0 +1,33 @@ +package kr.co.knuserver.presentation.pubOrder.controller; + +import jakarta.validation.Valid; +import kr.co.knuserver.application.pubOrder.PubOrderCommandService; +import kr.co.knuserver.presentation.pubOrder.dto.PubOrderRequestDto; +import kr.co.knuserver.presentation.pubOrder.dto.PubOrderResponseDto; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/admin/v1/pubOrder") +@RequiredArgsConstructor +public class PubOrderCommandController { + + private PubOrderCommandService pubOrderCommandService; + + @PostMapping + public ResponseEntity createOrder(@Valid @RequestBody PubOrderRequestDto request) { + return ResponseEntity.ok().body(pubOrderCommandService.createOrder(request)); + } + + @DeleteMapping("/{pubOrderId}") + public ResponseEntity deleteOrder(@PathVariable("pubOrderId") Long pubOrderId) { + pubOrderCommandService.deleteOrder(pubOrderId); + return ResponseEntity.ok().build(); + } +} diff --git a/src/main/java/kr/co/knuserver/presentation/pubOrder/controller/PubOrderQueryController.java b/src/main/java/kr/co/knuserver/presentation/pubOrder/controller/PubOrderQueryController.java new file mode 100644 index 0000000..d272889 --- /dev/null +++ b/src/main/java/kr/co/knuserver/presentation/pubOrder/controller/PubOrderQueryController.java @@ -0,0 +1,23 @@ +package kr.co.knuserver.presentation.pubOrder.controller; + +import kr.co.knuserver.application.pubOrder.PubOrderQueryService; +import kr.co.knuserver.presentation.pubOrder.dto.PubOrderResponseDto; +import lombok.RequiredArgsConstructor; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/admin/v1/pubOrder") +@RequiredArgsConstructor +public class PubOrderQueryController { + + private final PubOrderQueryService pubOrderQueryService; + + @GetMapping("/{pubTableSessionId}") + public ResponseEntity getAllByPubTableSessionId(@PathVariable("pubTableSessionId") Long pubTableSessionId) { + return ResponseEntity.ok(pubOrderQueryService.getAllByPubTableSessionId(pubTableSessionId)); + } +} From 4b59bff4638e691d1c8bc22c6df3767cf3984f1e Mon Sep 17 00:00:00 2001 From: jhssong Date: Fri, 13 Mar 2026 16:46:14 +0900 Subject: [PATCH 06/11] =?UTF-8?q?fix:=20PubOrderCommandController=EC=97=90?= =?UTF-8?q?=20final=20=ED=82=A4=EC=9B=8C=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pubOrder/controller/PubOrderCommandController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/kr/co/knuserver/presentation/pubOrder/controller/PubOrderCommandController.java b/src/main/java/kr/co/knuserver/presentation/pubOrder/controller/PubOrderCommandController.java index b04f97b..b51a518 100644 --- a/src/main/java/kr/co/knuserver/presentation/pubOrder/controller/PubOrderCommandController.java +++ b/src/main/java/kr/co/knuserver/presentation/pubOrder/controller/PubOrderCommandController.java @@ -18,7 +18,7 @@ @RequiredArgsConstructor public class PubOrderCommandController { - private PubOrderCommandService pubOrderCommandService; + private final PubOrderCommandService pubOrderCommandService; @PostMapping public ResponseEntity createOrder(@Valid @RequestBody PubOrderRequestDto request) { From 1512eb9b054df7970fd6b964c0568c03c49b7fb1 Mon Sep 17 00:00:00 2001 From: jhssong Date: Fri, 13 Mar 2026 16:46:43 +0900 Subject: [PATCH 07/11] =?UTF-8?q?chore:=20PubOrderRepository=EC=97=90=20?= =?UTF-8?q?=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C=20import=EB=AC=B8=20?= =?UTF-8?q?=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../knuserver/domain/pubOrder/repository/PubOrderRepository.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/kr/co/knuserver/domain/pubOrder/repository/PubOrderRepository.java b/src/main/java/kr/co/knuserver/domain/pubOrder/repository/PubOrderRepository.java index 3678921..e3c0882 100644 --- a/src/main/java/kr/co/knuserver/domain/pubOrder/repository/PubOrderRepository.java +++ b/src/main/java/kr/co/knuserver/domain/pubOrder/repository/PubOrderRepository.java @@ -2,7 +2,6 @@ import java.util.List; import kr.co.knuserver.domain.pubOrder.entity.PubOrder; -import kr.co.knuserver.domain.pubTableSession.entity.PubTableSession; import org.springframework.data.jpa.repository.JpaRepository; public interface PubOrderRepository extends JpaRepository { From 9b0b88866e4205f65c5730cbeaac2e6a096ba65f Mon Sep 17 00:00:00 2001 From: jhssong Date: Fri, 13 Mar 2026 17:08:31 +0900 Subject: [PATCH 08/11] =?UTF-8?q?fix:=20Quantity=20=EA=B0=92=EC=9D=B4=20nu?= =?UTF-8?q?ll=EC=9D=B8=20=EA=B2=BD=EC=9A=B0=20=EC=98=88=EC=99=B8=EC=B2=98?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kr/co/knuserver/domain/pubOrder/entity/PubOrder.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/kr/co/knuserver/domain/pubOrder/entity/PubOrder.java b/src/main/java/kr/co/knuserver/domain/pubOrder/entity/PubOrder.java index e92a3af..532f270 100644 --- a/src/main/java/kr/co/knuserver/domain/pubOrder/entity/PubOrder.java +++ b/src/main/java/kr/co/knuserver/domain/pubOrder/entity/PubOrder.java @@ -6,6 +6,8 @@ import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.Table; +import kr.co.knuserver.global.exception.BusinessErrorCode; +import kr.co.knuserver.global.exception.BusinessException; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Builder; @@ -34,6 +36,10 @@ public class PubOrder { private Integer quantity; public static PubOrder createPubOrder(Long pubSessionId, Long pubMenuId, Integer quantity) { + if (quantity == null || quantity <= 0) { + throw new BusinessException("주문 수량은 양수만 입력 가능합니다.", BusinessErrorCode.INVALID_INPUT_VALUE); + } + return PubOrder.builder() .pubTableSessionId(pubSessionId) .pubMenuId(pubMenuId) From 3743e10ba4f7466d4a8bd656d1cb66da0bfb5475 Mon Sep 17 00:00:00 2001 From: jhssong Date: Fri, 13 Mar 2026 17:17:33 +0900 Subject: [PATCH 09/11] =?UTF-8?q?fix:=20PubOrderRequestDto=EC=97=90=20NotE?= =?UTF-8?q?mpty=EC=99=80=20Valid=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/pubOrder/dto/PubOrderRequestDto.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/kr/co/knuserver/presentation/pubOrder/dto/PubOrderRequestDto.java b/src/main/java/kr/co/knuserver/presentation/pubOrder/dto/PubOrderRequestDto.java index bb014da..1a4105b 100644 --- a/src/main/java/kr/co/knuserver/presentation/pubOrder/dto/PubOrderRequestDto.java +++ b/src/main/java/kr/co/knuserver/presentation/pubOrder/dto/PubOrderRequestDto.java @@ -1,10 +1,12 @@ package kr.co.knuserver.presentation.pubOrder.dto; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import java.util.List; public record PubOrderRequestDto( @NotNull Long pubTableSessionId, - @NotNull List orderMenus + @NotEmpty List<@Valid OrderMenus> orderMenus ) { } From 1bff5e9cae1c16b6997534dcf9308ea0c781ef2f Mon Sep 17 00:00:00 2001 From: jhssong Date: Fri, 13 Mar 2026 17:43:03 +0900 Subject: [PATCH 10/11] =?UTF-8?q?fix:=20findAllPubMenuByIds=EB=A5=BC=20?= =?UTF-8?q?=ED=86=B5=ED=95=B4=20N+1=20=EC=BF=BC=EB=A6=AC=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/pubMenu/PubMenuQueryService.java | 5 +++++ .../pubOrder/PubOrderCommandService.java | 13 ++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/kr/co/knuserver/application/pubMenu/PubMenuQueryService.java b/src/main/java/kr/co/knuserver/application/pubMenu/PubMenuQueryService.java index e2e7961..52e9794 100644 --- a/src/main/java/kr/co/knuserver/application/pubMenu/PubMenuQueryService.java +++ b/src/main/java/kr/co/knuserver/application/pubMenu/PubMenuQueryService.java @@ -1,5 +1,6 @@ package kr.co.knuserver.application.pubMenu; +import java.util.List; import kr.co.knuserver.domain.pubMenu.entity.PubMenu; import kr.co.knuserver.domain.pubMenu.repository.PubMenuRepository; import kr.co.knuserver.global.exception.BusinessErrorCode; @@ -20,4 +21,8 @@ public PubMenu findPubMenuById(Long id) { return pubMenuRepository.findById(id) .orElseThrow(() -> new BusinessException(BusinessErrorCode.PUB_MENU_NOT_FOUND)); } + + public List findAllPubMenuByIds(List ids) { + return pubMenuRepository.findAllById(ids); + } } diff --git a/src/main/java/kr/co/knuserver/application/pubOrder/PubOrderCommandService.java b/src/main/java/kr/co/knuserver/application/pubOrder/PubOrderCommandService.java index bc4cbe7..5b3e94b 100644 --- a/src/main/java/kr/co/knuserver/application/pubOrder/PubOrderCommandService.java +++ b/src/main/java/kr/co/knuserver/application/pubOrder/PubOrderCommandService.java @@ -2,6 +2,9 @@ import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; import kr.co.knuserver.application.pubMenu.PubMenuQueryService; import kr.co.knuserver.application.pubTableSession.PubTableSessionQueryService; import kr.co.knuserver.domain.pubMenu.entity.PubMenu; @@ -34,8 +37,16 @@ public PubOrderResponseDto createOrder(PubOrderRequestDto request) { pubOrders.add(PubOrder.createPubOrder(pubTableSession.getId(), orderMenus.menuId(), orderMenus.quantity())); } List savedPubOrders = pubOrderRepository.saveAll(pubOrders); + + List menuIds = savedPubOrders.stream() + .map(PubOrder::getPubMenuId) + .distinct() + .toList(); + Map pubMenuMap = pubMenuQueryService.findAllPubMenuByIds(menuIds).stream() + .collect(Collectors.toMap(PubMenu::getId, Function.identity())); + List orderedMenus = savedPubOrders.stream().map((pubOrder -> { - PubMenu pubMenu = pubMenuQueryService.findPubMenuById(pubOrder.getPubMenuId()); + PubMenu pubMenu = pubMenuMap.get(pubOrder.getPubMenuId()); return OrderedMenus.fromEntity(pubOrder, pubMenu); })).toList(); return PubOrderResponseDto.fromEntity(request.pubTableSessionId(), orderedMenus); From b93244ce226fe760c7ba1d8f48de8cf1c5e26207 Mon Sep 17 00:00:00 2001 From: jhssong Date: Fri, 13 Mar 2026 17:52:34 +0900 Subject: [PATCH 11/11] =?UTF-8?q?fix:=20=EB=A9=94=EB=89=B4=20=EC=A1=B4?= =?UTF-8?q?=EC=9E=AC=20=EC=97=AC=EB=B6=80=EB=A5=BC=20=EC=82=AC=EC=A0=84?= =?UTF-8?q?=EC=97=90=20=EC=B2=B4=ED=81=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pubOrder/PubOrderCommandService.java | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/main/java/kr/co/knuserver/application/pubOrder/PubOrderCommandService.java b/src/main/java/kr/co/knuserver/application/pubOrder/PubOrderCommandService.java index 5b3e94b..b6886c4 100644 --- a/src/main/java/kr/co/knuserver/application/pubOrder/PubOrderCommandService.java +++ b/src/main/java/kr/co/knuserver/application/pubOrder/PubOrderCommandService.java @@ -11,6 +11,8 @@ import kr.co.knuserver.domain.pubOrder.entity.PubOrder; import kr.co.knuserver.domain.pubOrder.repository.PubOrderRepository; import kr.co.knuserver.domain.pubTableSession.entity.PubTableSession; +import kr.co.knuserver.global.exception.BusinessErrorCode; +import kr.co.knuserver.global.exception.BusinessException; import kr.co.knuserver.presentation.pubOrder.dto.OrderMenus; import kr.co.knuserver.presentation.pubOrder.dto.OrderedMenus; import kr.co.knuserver.presentation.pubOrder.dto.PubOrderRequestDto; @@ -32,19 +34,25 @@ public class PubOrderCommandService { public PubOrderResponseDto createOrder(PubOrderRequestDto request) { PubTableSession pubTableSession = pubTableSessionQueryService.getPubTableSessionById(request.pubTableSessionId()); + List menuIds = request.orderMenus().stream() + .map(OrderMenus::menuId) + .distinct() + .toList(); + List foundMenus = pubMenuQueryService.findAllPubMenuByIds(menuIds); + + if (foundMenus.size() != menuIds.size()) { + throw new BusinessException(BusinessErrorCode.PUB_MENU_NOT_FOUND); + } + + Map pubMenuMap = foundMenus.stream() + .collect(Collectors.toMap(PubMenu::getId, Function.identity())); + List pubOrders = new ArrayList<>(); for (OrderMenus orderMenus : request.orderMenus()) { pubOrders.add(PubOrder.createPubOrder(pubTableSession.getId(), orderMenus.menuId(), orderMenus.quantity())); } List savedPubOrders = pubOrderRepository.saveAll(pubOrders); - List menuIds = savedPubOrders.stream() - .map(PubOrder::getPubMenuId) - .distinct() - .toList(); - Map pubMenuMap = pubMenuQueryService.findAllPubMenuByIds(menuIds).stream() - .collect(Collectors.toMap(PubMenu::getId, Function.identity())); - List orderedMenus = savedPubOrders.stream().map((pubOrder -> { PubMenu pubMenu = pubMenuMap.get(pubOrder.getPubMenuId()); return OrderedMenus.fromEntity(pubOrder, pubMenu);