From 561d53bb6e896bfb0cb50cfead14f615a8c3b2af Mon Sep 17 00:00:00 2001 From: chaerlo127 Date: Tue, 14 Mar 2023 13:34:33 +0900 Subject: [PATCH 1/5] =?UTF-8?q?#161=20feat:=20=EC=A3=BC=EB=AC=B8=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=20=EC=A1=B0=ED=9A=8C=20(=EB=94=94=EC=A0=80?= =?UTF-8?q?=ED=8A=B8=20+=20=EC=98=B5=EC=85=98)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/controller/OrderController.java | 15 +++++++- .../order/dto/GetStoreDessertsAndOptions.java | 20 +++++++++++ .../keki/order/service/OrderService.java | 34 +++++++++++++++---- 3 files changed, 62 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/codepatissier/keki/order/dto/GetStoreDessertsAndOptions.java diff --git a/src/main/java/com/codepatissier/keki/order/controller/OrderController.java b/src/main/java/com/codepatissier/keki/order/controller/OrderController.java index 61bb2af..4342d6f 100644 --- a/src/main/java/com/codepatissier/keki/order/controller/OrderController.java +++ b/src/main/java/com/codepatissier/keki/order/controller/OrderController.java @@ -3,11 +3,11 @@ import com.codepatissier.keki.common.BaseException; import com.codepatissier.keki.common.BaseResponse; +import com.codepatissier.keki.order.dto.GetStoreDessertsAndOptions; import com.codepatissier.keki.order.dto.PatchOrderStatusReq; import com.codepatissier.keki.order.entity.OrderStatus; import com.codepatissier.keki.order.dto.GetOrder; -import com.codepatissier.keki.order.entity.Order; import com.codepatissier.keki.order.service.OrderService; import com.codepatissier.keki.user.service.AuthService; @@ -24,6 +24,7 @@ import org.springframework.web.bind.annotation.*; +import java.util.List; import java.util.Objects; import static com.codepatissier.keki.common.BaseResponseStatus.*; @@ -85,4 +86,16 @@ public BaseResponse changeOrderStatus(PatchOrderStatusReq patchOrderStatusReq return new BaseResponse<>(e.getStatus()); } } + + /** + * 주문 화면 조회 + */ + @GetMapping("/orders/view/{storeIdx}") + public BaseResponse> getStoreDessertsAndOptions(@PathVariable("storeIdx") Long storeIdx){ + try{ + return new BaseResponse<>(this.orderService.getStoreDessertsAndOptions(storeIdx)); + }catch (BaseException e){ + return new BaseResponse<>(e.getStatus()); + } + } } diff --git a/src/main/java/com/codepatissier/keki/order/dto/GetStoreDessertsAndOptions.java b/src/main/java/com/codepatissier/keki/order/dto/GetStoreDessertsAndOptions.java new file mode 100644 index 0000000..e344e39 --- /dev/null +++ b/src/main/java/com/codepatissier/keki/order/dto/GetStoreDessertsAndOptions.java @@ -0,0 +1,20 @@ +package com.codepatissier.keki.order.dto; + +import com.codepatissier.keki.dessert.dto.OptionDTO; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class GetStoreDessertsAndOptions { + Long dessertIdx; + String dessertName; + Integer dessertPrice; + List options; +} diff --git a/src/main/java/com/codepatissier/keki/order/service/OrderService.java b/src/main/java/com/codepatissier/keki/order/service/OrderService.java index 957aacf..ba1723b 100644 --- a/src/main/java/com/codepatissier/keki/order/service/OrderService.java +++ b/src/main/java/com/codepatissier/keki/order/service/OrderService.java @@ -2,22 +2,25 @@ import com.codepatissier.keki.common.BaseException; -import com.codepatissier.keki.order.dto.PatchOrderStatusReq; - -import com.codepatissier.keki.order.dto.GetOptionOrder; -import com.codepatissier.keki.order.dto.GetOrder; -import com.codepatissier.keki.order.dto.GetOrderImg; +import com.codepatissier.keki.dessert.dto.OptionDTO; +import com.codepatissier.keki.dessert.entity.Dessert; +import com.codepatissier.keki.dessert.repository.DessertRepository; +import com.codepatissier.keki.dessert.repository.OptionRepository; +import com.codepatissier.keki.order.dto.*; import com.codepatissier.keki.order.entity.Order; import com.codepatissier.keki.order.entity.OrderStatus; import com.codepatissier.keki.order.repository.OptionOrderRepository; import com.codepatissier.keki.order.repository.OrderImgRepository; import com.codepatissier.keki.order.repository.OrderRepository; +import com.codepatissier.keki.store.entity.Store; +import com.codepatissier.keki.store.repository.StoreRepository; import com.codepatissier.keki.user.entity.User; import com.codepatissier.keki.user.repository.UserRepository; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -33,6 +36,9 @@ public class OrderService { private final UserRepository userRepository; private final OrderImgRepository orderImgRepository; private final OptionOrderRepository optionOrderRepository; + private final DessertRepository dessertRepository; + private final StoreRepository storeRepository; + private final OptionRepository optionRepository; // 주문 취소 public void cancelOrder(Long userIdx, Long orderIdx) throws BaseException{ @@ -58,7 +64,7 @@ public void changeOrderStatus(Long userIdx, PatchOrderStatusReq patchOrderStatus public GetOrder getOrder(Long userIdx, Long orderIdx) throws BaseException{ // TODO: 겹치는 부분이 3줄 이상인데 extract method 는 어떠신지? - User user = userRepository.findByUserIdxAndStatusEquals(userIdx, ACTIVE_STATUS).orElseThrow(() -> new BaseException(INVALID_USER_AND_STATUS)); + User user = userRepository.findByUserIdxAndStatusEquals(userIdx, ACTIVE_STATUS).orElseThrow(() -> new BaseException(INVALID_USER_IDX)); Order order = orderRepository.findById(orderIdx).orElseThrow(() -> new BaseException(INVALID_ORDER_IDX)); if(!order.getUser().equals(user)) throw new BaseException(NO_MATCH_ORDER_USER); @@ -73,4 +79,20 @@ public GetOrder getOrder(Long userIdx, Long orderIdx) throws BaseException{ order.getDessert().getDessertPrice(), order.getExtraPrice(), order.getTotalPrice(), order.getRequest(), order.getPickupDate(), order.getStore().getStoreIdx(), order.getStore().getUser().getNickname(), null, order.getStore().getAddress(), orderImgs, optionOrders); } + + // 주문 조회 + public List getStoreDessertsAndOptions(Long storeIdx) throws BaseException{ + Store store = this.storeRepository.findByStoreIdxAndStatus(storeIdx, ACTIVE_STATUS).orElseThrow(() -> new BaseException(INVALID_STORE_IDX)); + List desserts = this.dessertRepository.findByStoreAndStatusOrderByDessertIdx(store, ACTIVE_STATUS); + List dessertsAndOptions = new ArrayList<>(); + // 디저트 별의 option 들을 찾아서 한번에 저장하는 것이 필요함. + for (Dessert dessert: desserts){ + dessertsAndOptions.add(new GetStoreDessertsAndOptions(dessert.getDessertIdx(), dessert.getDessertName(), dessert.getDessertPrice(), + this.optionRepository.findByDessertAndStatusOrderByOptionIdx(dessert, ACTIVE_STATUS).stream() + .map(option -> new OptionDTO(option.getOptionIdx(), option.getDescription(), option.getPrice())).collect(Collectors.toList()))); + } + + return dessertsAndOptions; + + } } From 2b0df6e94253fb70aff5b2299da35b3458cb1ff3 Mon Sep 17 00:00:00 2001 From: chaerlo127 Date: Tue, 14 Mar 2023 13:38:08 +0900 Subject: [PATCH 2/5] =?UTF-8?q?#161=20fix:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=20=EC=9D=B5=EC=85=89=EC=85=98=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/codepatissier/keki/order/service/OrderService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/codepatissier/keki/order/service/OrderService.java b/src/main/java/com/codepatissier/keki/order/service/OrderService.java index ba1723b..ed458a7 100644 --- a/src/main/java/com/codepatissier/keki/order/service/OrderService.java +++ b/src/main/java/com/codepatissier/keki/order/service/OrderService.java @@ -42,7 +42,7 @@ public class OrderService { // 주문 취소 public void cancelOrder(Long userIdx, Long orderIdx) throws BaseException{ - User user = userRepository.findByUserIdxAndStatusEquals(userIdx, ACTIVE_STATUS).orElseThrow(() -> new BaseException(INVALID_USER_AND_STATUS)); + User user = userRepository.findByUserIdxAndStatusEquals(userIdx, ACTIVE_STATUS).orElseThrow(() -> new BaseException(INVALID_USER_IDX)); Order order = orderRepository.findById(orderIdx).orElseThrow(() -> new BaseException(INVALID_ORDER_IDX)); if(!order.getUser().equals(user)) throw new BaseException(NO_MATCH_ORDER_USER); @@ -54,7 +54,7 @@ public void cancelOrder(Long userIdx, Long orderIdx) throws BaseException{ // [판매자] 주문 상태 변경 public void changeOrderStatus(Long userIdx, PatchOrderStatusReq patchOrderStatusReq) throws BaseException{ - User user = userRepository.findByUserIdxAndStatusEquals(userIdx, ACTIVE_STATUS).orElseThrow(() -> new BaseException(INVALID_USER_AND_STATUS)); + User user = userRepository.findByUserIdxAndStatusEquals(userIdx, ACTIVE_STATUS).orElseThrow(() -> new BaseException(INVALID_USER_IDX)); Order order = orderRepository.findById(patchOrderStatusReq.getOrderIdx()).orElseThrow(() -> new BaseException(INVALID_ORDER_IDX)); if(!order.getStore().getUser().equals(user)) throw new BaseException(NO_MATCH_ORDER_USER); From 9336ccd26de5b7e9d40b0c6112d30543ea7563f3 Mon Sep 17 00:00:00 2001 From: chaerlo127 Date: Tue, 14 Mar 2023 13:43:15 +0900 Subject: [PATCH 3/5] =?UTF-8?q?#161=20fix:=20url=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../codepatissier/keki/order/controller/OrderController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/codepatissier/keki/order/controller/OrderController.java b/src/main/java/com/codepatissier/keki/order/controller/OrderController.java index 4342d6f..748475a 100644 --- a/src/main/java/com/codepatissier/keki/order/controller/OrderController.java +++ b/src/main/java/com/codepatissier/keki/order/controller/OrderController.java @@ -90,7 +90,7 @@ public BaseResponse changeOrderStatus(PatchOrderStatusReq patchOrderStatusReq /** * 주문 화면 조회 */ - @GetMapping("/orders/view/{storeIdx}") + @GetMapping("/view/{storeIdx}") public BaseResponse> getStoreDessertsAndOptions(@PathVariable("storeIdx") Long storeIdx){ try{ return new BaseResponse<>(this.orderService.getStoreDessertsAndOptions(storeIdx)); From 72469c5e490d18b8011b1c422ecfb44e60349f7d Mon Sep 17 00:00:00 2001 From: chaerlo127 Date: Tue, 14 Mar 2023 17:24:57 +0900 Subject: [PATCH 4/5] =?UTF-8?q?#161=20fix:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=20=EC=A0=95=EB=B3=B4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../keki/order/dto/GetStoreDessertsAndOptions.java | 4 ++++ .../com/codepatissier/keki/order/service/OrderService.java | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/codepatissier/keki/order/dto/GetStoreDessertsAndOptions.java b/src/main/java/com/codepatissier/keki/order/dto/GetStoreDessertsAndOptions.java index e344e39..e579a17 100644 --- a/src/main/java/com/codepatissier/keki/order/dto/GetStoreDessertsAndOptions.java +++ b/src/main/java/com/codepatissier/keki/order/dto/GetStoreDessertsAndOptions.java @@ -13,6 +13,10 @@ @NoArgsConstructor @AllArgsConstructor public class GetStoreDessertsAndOptions { + Long storeIdx; + String storeName; + String accountName; + String storeAccount; Long dessertIdx; String dessertName; Integer dessertPrice; diff --git a/src/main/java/com/codepatissier/keki/order/service/OrderService.java b/src/main/java/com/codepatissier/keki/order/service/OrderService.java index ed458a7..0d16ad7 100644 --- a/src/main/java/com/codepatissier/keki/order/service/OrderService.java +++ b/src/main/java/com/codepatissier/keki/order/service/OrderService.java @@ -87,7 +87,8 @@ public List getStoreDessertsAndOptions(Long storeIdx List dessertsAndOptions = new ArrayList<>(); // 디저트 별의 option 들을 찾아서 한번에 저장하는 것이 필요함. for (Dessert dessert: desserts){ - dessertsAndOptions.add(new GetStoreDessertsAndOptions(dessert.getDessertIdx(), dessert.getDessertName(), dessert.getDessertPrice(), + dessertsAndOptions.add(new GetStoreDessertsAndOptions(dessert.getStore().getStoreIdx(), dessert.getStore().getUser().getNickname(), + null, dessert.getStore().getAddress(), dessert.getDessertIdx(), dessert.getDessertName(), dessert.getDessertPrice(), this.optionRepository.findByDessertAndStatusOrderByOptionIdx(dessert, ACTIVE_STATUS).stream() .map(option -> new OptionDTO(option.getOptionIdx(), option.getDescription(), option.getPrice())).collect(Collectors.toList()))); } From 27d55a191de0cdb9ec51bff3455ff39f90f0ccf1 Mon Sep 17 00:00:00 2001 From: chaerlo127 Date: Tue, 14 Mar 2023 22:46:17 +0900 Subject: [PATCH 5/5] =?UTF-8?q?#161=20fix:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=20=EC=A0=95=EB=B3=B4=20return=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/controller/OrderController.java | 5 +++-- .../keki/order/dto/GetOrderStore.java | 20 +++++++++++++++++++ ...ns.java => GetStoreDessertAndOptions.java} | 7 ++----- .../keki/order/service/OrderService.java | 14 ++++++------- 4 files changed, 32 insertions(+), 14 deletions(-) create mode 100644 src/main/java/com/codepatissier/keki/order/dto/GetOrderStore.java rename src/main/java/com/codepatissier/keki/order/dto/{GetStoreDessertsAndOptions.java => GetStoreDessertAndOptions.java} (74%) diff --git a/src/main/java/com/codepatissier/keki/order/controller/OrderController.java b/src/main/java/com/codepatissier/keki/order/controller/OrderController.java index 748475a..bab6ea6 100644 --- a/src/main/java/com/codepatissier/keki/order/controller/OrderController.java +++ b/src/main/java/com/codepatissier/keki/order/controller/OrderController.java @@ -3,7 +3,8 @@ import com.codepatissier.keki.common.BaseException; import com.codepatissier.keki.common.BaseResponse; -import com.codepatissier.keki.order.dto.GetStoreDessertsAndOptions; +import com.codepatissier.keki.order.dto.GetOrderStore; +import com.codepatissier.keki.order.dto.GetStoreDessertAndOptions; import com.codepatissier.keki.order.dto.PatchOrderStatusReq; import com.codepatissier.keki.order.entity.OrderStatus; @@ -91,7 +92,7 @@ public BaseResponse changeOrderStatus(PatchOrderStatusReq patchOrderStatusReq * 주문 화면 조회 */ @GetMapping("/view/{storeIdx}") - public BaseResponse> getStoreDessertsAndOptions(@PathVariable("storeIdx") Long storeIdx){ + public BaseResponse getStoreDessertsAndOptions(@PathVariable("storeIdx") Long storeIdx){ try{ return new BaseResponse<>(this.orderService.getStoreDessertsAndOptions(storeIdx)); }catch (BaseException e){ diff --git a/src/main/java/com/codepatissier/keki/order/dto/GetOrderStore.java b/src/main/java/com/codepatissier/keki/order/dto/GetOrderStore.java new file mode 100644 index 0000000..6be5a81 --- /dev/null +++ b/src/main/java/com/codepatissier/keki/order/dto/GetOrderStore.java @@ -0,0 +1,20 @@ +package com.codepatissier.keki.order.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +@AllArgsConstructor +@NoArgsConstructor +public class GetOrderStore { + Long storeIdx; + String storeName; + String accountName; + String storeAccount; + List getStoreDessertsAndOptions; +} diff --git a/src/main/java/com/codepatissier/keki/order/dto/GetStoreDessertsAndOptions.java b/src/main/java/com/codepatissier/keki/order/dto/GetStoreDessertAndOptions.java similarity index 74% rename from src/main/java/com/codepatissier/keki/order/dto/GetStoreDessertsAndOptions.java rename to src/main/java/com/codepatissier/keki/order/dto/GetStoreDessertAndOptions.java index e579a17..7b6d5dc 100644 --- a/src/main/java/com/codepatissier/keki/order/dto/GetStoreDessertsAndOptions.java +++ b/src/main/java/com/codepatissier/keki/order/dto/GetStoreDessertAndOptions.java @@ -12,11 +12,8 @@ @Setter @NoArgsConstructor @AllArgsConstructor -public class GetStoreDessertsAndOptions { - Long storeIdx; - String storeName; - String accountName; - String storeAccount; +public class GetStoreDessertAndOptions { + Long dessertIdx; String dessertName; Integer dessertPrice; diff --git a/src/main/java/com/codepatissier/keki/order/service/OrderService.java b/src/main/java/com/codepatissier/keki/order/service/OrderService.java index 0d16ad7..d84bc47 100644 --- a/src/main/java/com/codepatissier/keki/order/service/OrderService.java +++ b/src/main/java/com/codepatissier/keki/order/service/OrderService.java @@ -74,26 +74,26 @@ public GetOrder getOrder(Long userIdx, Long orderIdx) throws BaseException{ List optionOrders = optionOrderRepository.findByOrderAndStatusEquals(order, ACTIVE_STATUS).stream() .map(getOptionOrder -> new GetOptionOrder(getOptionOrder.getOption().getOptionIdx(), getOptionOrder.getOption().getDescription(), getOptionOrder.getOption().getPrice())).collect(Collectors.toList()); - // TODO: 아직 판매자 계좌 번호는 DB에 없는 건가요? + // TODO: 아직 판매자 계좌 번호 저장 이전 return new GetOrder(order.getOrderStatus().getName(), order.getDessert().getDessertName(), order.getDessert().getDessertPrice(), order.getExtraPrice(), order.getTotalPrice(), order.getRequest(), order.getPickupDate(), order.getStore().getStoreIdx(), order.getStore().getUser().getNickname(), null, order.getStore().getAddress(), orderImgs, optionOrders); } // 주문 조회 - public List getStoreDessertsAndOptions(Long storeIdx) throws BaseException{ + public GetOrderStore getStoreDessertsAndOptions(Long storeIdx) throws BaseException{ Store store = this.storeRepository.findByStoreIdxAndStatus(storeIdx, ACTIVE_STATUS).orElseThrow(() -> new BaseException(INVALID_STORE_IDX)); List desserts = this.dessertRepository.findByStoreAndStatusOrderByDessertIdx(store, ACTIVE_STATUS); - List dessertsAndOptions = new ArrayList<>(); + List dessertsAndOptions = new ArrayList<>(); // 디저트 별의 option 들을 찾아서 한번에 저장하는 것이 필요함. for (Dessert dessert: desserts){ - dessertsAndOptions.add(new GetStoreDessertsAndOptions(dessert.getStore().getStoreIdx(), dessert.getStore().getUser().getNickname(), - null, dessert.getStore().getAddress(), dessert.getDessertIdx(), dessert.getDessertName(), dessert.getDessertPrice(), + dessertsAndOptions.add(new GetStoreDessertAndOptions(dessert.getDessertIdx(), dessert.getDessertName(), dessert.getDessertPrice(), this.optionRepository.findByDessertAndStatusOrderByOptionIdx(dessert, ACTIVE_STATUS).stream() .map(option -> new OptionDTO(option.getOptionIdx(), option.getDescription(), option.getPrice())).collect(Collectors.toList()))); } - return dessertsAndOptions; - + // TODO: 아직 판매자 계좌 번호 저장 이전 + return new GetOrderStore(store.getStoreIdx(), store.getUser().getNickname(), + null, store.getAddress(),dessertsAndOptions); } }