From f6ca50b0c2bdac6d7e8d1da7c0983eacd98424e7 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Wed, 3 Sep 2025 18:14:26 +0900 Subject: [PATCH 01/13] =?UTF-8?q?refactor:=20=EC=A3=BC=EB=AC=B8=20?= =?UTF-8?q?=EC=B7=A8=EC=86=8C=20=EC=83=81=ED=83=9C=EA=B0=92=20CANCELLED=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 --- .../com/nowait/domaincorerdb/order/entity/OrderStatus.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/order/entity/OrderStatus.java b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/order/entity/OrderStatus.java index 322a5218..7e022a5b 100644 --- a/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/order/entity/OrderStatus.java +++ b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/order/entity/OrderStatus.java @@ -16,7 +16,10 @@ public enum OrderStatus { COOKING("조리중"), @Schema(description = "조리완료") - COOKED("조리완료"); + COOKED("조리완료"), + + @Schema(description = "주문취소") + CANCELLED("주문취소"); private final String description; } From b462a7ea6f79bdf5c88af80d4561c799722a9d95 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Wed, 3 Sep 2025 18:14:42 +0900 Subject: [PATCH 02/13] =?UTF-8?q?refactor:=20=EC=A3=BC=EB=AC=B8=20?= =?UTF-8?q?=EC=B7=A8=EC=86=8C=EB=A5=BC=20=EC=9C=84=ED=95=9C=20deleteOrder?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/nowait/domaincorerdb/order/entity/UserOrder.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/order/entity/UserOrder.java b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/order/entity/UserOrder.java index 5dbd0295..0da1415a 100644 --- a/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/order/entity/UserOrder.java +++ b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/order/entity/UserOrder.java @@ -63,4 +63,8 @@ public void updateStatus(OrderStatus newStatus) { this.status = newStatus; } + public void deleteOrder() { + this.status = OrderStatus.CANCELLED; + } + } From a8040d4aefc89f6376b4bdd73bf1c557fc060b85 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Wed, 3 Sep 2025 18:14:49 +0900 Subject: [PATCH 03/13] =?UTF-8?q?refactor:=20=EC=A3=BC=EB=AC=B8=20?= =?UTF-8?q?=EC=B7=A8=EC=86=8C=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/service/OrderService.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/order/service/OrderService.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/order/service/OrderService.java index dfc88532..eb4a0e9c 100644 --- a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/order/service/OrderService.java +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/order/service/OrderService.java @@ -87,6 +87,20 @@ public OrderStatusUpdateResponseDto updateOrderStatus(Long orderId, OrderStatus return OrderStatusUpdateResponseDto.fromEntity(userOrder); } + @Transactional + public OrderStatusUpdateResponseDto deleteOrder(Long orderId, MemberDetails memberDetails) { + User user = userRepository.findById(memberDetails.getId()).orElseThrow(UserNotFoundException::new); + UserOrder userOrder = orderRepository.findById(orderId).orElseThrow(OrderNotFoundException::new); + + if (!Role.SUPER_ADMIN.equals(user.getRole()) && !user.getStoreId().equals(userOrder.getStore().getStoreId())) { + throw new OrderUpdateUnauthorizedException(); + } + + userOrder.deleteOrder(); + + return OrderStatusUpdateResponseDto.fromEntity(userOrder); + } + @Transactional(readOnly = true) public OrderSalesSumDetail getSaleSumByStoreId(MemberDetails memberDetails, LocalDate date) { User user = userRepository.findById(memberDetails.getId()).orElseThrow(UserNotFoundException::new); From 6fb3f14e0e9272b0df43c27372a4411dca2132b1 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Wed, 3 Sep 2025 18:14:56 +0900 Subject: [PATCH 04/13] =?UTF-8?q?refactor:=20=EC=A3=BC=EB=AC=B8=20?= =?UTF-8?q?=EC=B7=A8=EC=86=8C=20=EC=97=94=EB=93=9C=ED=8F=AC=EC=9D=B8?= =?UTF-8?q?=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 --- .../order/controller/OrderController.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/order/controller/OrderController.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/order/controller/OrderController.java index 3e7e7efa..f62743b6 100644 --- a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/order/controller/OrderController.java +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/order/controller/OrderController.java @@ -5,6 +5,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PatchMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -20,6 +21,7 @@ import com.nowait.domaincorerdb.user.entity.MemberDetails; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; @@ -63,4 +65,19 @@ public ResponseEntity updateOrderStatus( .status(HttpStatus.OK) .body(ApiUtils.success(response)); } + + @DeleteMapping("/{orderId}") + @Operation(summary = "주문 삭제", description = "특정 주문을 삭제") + @ApiResponse(responseCode = "200", description = "주문 삭제 성공") + public ResponseEntity deleteOrder( + @PathVariable Long orderId, + @AuthenticationPrincipal MemberDetails memberDetails + ) { + + return ResponseEntity + .status(HttpStatus.OK) + .body(ApiUtils.success( + orderService.deleteOrder(orderId, memberDetails) + )); + } } From 7cfbd09ea67e2317561c4ad969cbcfbc9a6cb458 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Wed, 3 Sep 2025 19:49:00 +0900 Subject: [PATCH 05/13] =?UTF-8?q?chore:=20domain-admin-rdb=20=EC=9D=98?= =?UTF-8?q?=EC=A1=B4=EC=84=B1=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nowait-event/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/nowait-event/build.gradle b/nowait-event/build.gradle index 067d51c3..f802a2ff 100644 --- a/nowait-event/build.gradle +++ b/nowait-event/build.gradle @@ -25,6 +25,7 @@ repositories { dependencies { implementation project(':nowait-common') implementation project(':nowait-domain:domain-core-rdb') + implementation project(':nowait-domain:domain-admin-rdb') api 'org.springframework.boot:spring-boot-starter-data-jpa' api 'jakarta.persistence:jakarta.persistence-api:3.1.0' From ce0f3653581f97b99af3e24a06ca87fe22b5b392 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Wed, 3 Sep 2025 19:49:18 +0900 Subject: [PATCH 06/13] =?UTF-8?q?feat:=20CancelOrder=20=EC=97=94=ED=8B=B0?= =?UTF-8?q?=ED=8B=B0=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cancelOrder/entity/CancelOrder.java | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/cancelOrder/entity/CancelOrder.java diff --git a/nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/cancelOrder/entity/CancelOrder.java b/nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/cancelOrder/entity/CancelOrder.java new file mode 100644 index 00000000..7ee01640 --- /dev/null +++ b/nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/cancelOrder/entity/CancelOrder.java @@ -0,0 +1,52 @@ +package com.nowait.domainadminrdb.cancelOrder.entity; + +import java.time.Instant; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.PrePersist; +import jakarta.persistence.Table; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Entity +@Table(name = "cancel_orders") +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@Builder +public class CancelOrder { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false) + private Long orderId; + + @Column(name = "store_id", nullable = false) + private Long storeId; + + @Column(nullable = false, length = 256) + private String orderSignature; + + @Enumerated(EnumType.STRING) + @Column(nullable = false, length = 30) + private CancelReason reason; + + @Column(nullable = false) + private Instant cancelAt; + + @PrePersist + void prePersist() { + if (cancelAt == null) cancelAt = Instant.now(); + } +} From b6b45cee06f3cdc418e05a3718bfb60fb6ac028c Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Wed, 3 Sep 2025 19:49:28 +0900 Subject: [PATCH 07/13] =?UTF-8?q?feat:=20CancelOrderRepository=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cancelOrder/repository/CancelOrderRepository.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/cancelOrder/repository/CancelOrderRepository.java diff --git a/nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/cancelOrder/repository/CancelOrderRepository.java b/nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/cancelOrder/repository/CancelOrderRepository.java new file mode 100644 index 00000000..790a9a3a --- /dev/null +++ b/nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/cancelOrder/repository/CancelOrderRepository.java @@ -0,0 +1,10 @@ +package com.nowait.domainadminrdb.cancelOrder.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import com.nowait.domainadminrdb.cancelOrder.entity.CancelOrder; + +@Repository +public interface CancelOrderRepository extends JpaRepository { +} From c7c9d9ab689c98a326eeb19199565c1b4dcc1fdb Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Wed, 3 Sep 2025 19:49:42 +0900 Subject: [PATCH 08/13] =?UTF-8?q?feat:=20CancelOrder=20=EA=B4=80=EB=A0=A8?= =?UTF-8?q?=20Dto=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cancelOrder/dto/CancelOrderRequest.java | 5 ++++ .../cancelOrder/dto/CancelOrderResponse.java | 29 +++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/cancelOrder/dto/CancelOrderRequest.java create mode 100644 nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/cancelOrder/dto/CancelOrderResponse.java diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/cancelOrder/dto/CancelOrderRequest.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/cancelOrder/dto/CancelOrderRequest.java new file mode 100644 index 00000000..76c6e86e --- /dev/null +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/cancelOrder/dto/CancelOrderRequest.java @@ -0,0 +1,5 @@ +package com.nowait.applicationadmin.cancelOrder.dto; + +import com.nowait.domainadminrdb.cancelOrder.entity.CancelReason; + +public record CancelOrderRequest(CancelReason reason) { } diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/cancelOrder/dto/CancelOrderResponse.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/cancelOrder/dto/CancelOrderResponse.java new file mode 100644 index 00000000..7ee7a2f8 --- /dev/null +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/cancelOrder/dto/CancelOrderResponse.java @@ -0,0 +1,29 @@ +package com.nowait.applicationadmin.cancelOrder.dto; + +import java.time.Instant; + +import com.nowait.domainadminrdb.cancelOrder.entity.CancelOrder; +import com.nowait.domainadminrdb.cancelOrder.entity.CancelReason; + +import lombok.AllArgsConstructor; +import lombok.Builder; + +@Builder +public class CancelOrderResponse { + + private Long id; + private Long orderId; + private String orderSignature; + private CancelReason reason; + private Instant cancelAt; + + public CancelOrder fromEntity() { + return CancelOrder.builder() + .id(id) + .orderId(orderId) + .orderSignature(orderSignature) + .reason(reason) + .cancelAt(cancelAt) + .build(); + } +} From 1b5f744efd08d7412e6d0615f51e08f300964fc2 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Wed, 3 Sep 2025 19:49:54 +0900 Subject: [PATCH 09/13] =?UTF-8?q?feat:=20CancelReason=20=EC=A0=95=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cancelOrder/entity/CancelReason.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/cancelOrder/entity/CancelReason.java diff --git a/nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/cancelOrder/entity/CancelReason.java b/nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/cancelOrder/entity/CancelReason.java new file mode 100644 index 00000000..66245b32 --- /dev/null +++ b/nowait-domain/domain-admin-rdb/src/main/java/com/nowait/domainadminrdb/cancelOrder/entity/CancelReason.java @@ -0,0 +1,21 @@ +package com.nowait.domainadminrdb.cancelOrder.entity; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +@Schema(description = "주문 상태 Enum") +public enum CancelReason { + + @Schema(description = "단순 취소") + SIMPLE_CANCEL("단순 취소"), + @Schema(description = "메뉴 품절") + SOLD_OUT("메뉴 품절"), + @Schema(description = "기타") + ETC("기타"); + + private final String description; +} + From 5b3e5cc7bd7a69ee3aa0fe804ac7f05faa9d7ce6 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Wed, 3 Sep 2025 19:50:07 +0900 Subject: [PATCH 10/13] =?UTF-8?q?feat:=20OrderCancel=20=EC=9D=B4=EB=B2=A4?= =?UTF-8?q?=ED=8A=B8=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../listener/OrderCancelledEventListener.java | 41 +++++++++++++++++++ .../order/event/OrderCancelledEvent.java | 16 ++++++++ 2 files changed, 57 insertions(+) create mode 100644 nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/cancelOrder/listener/OrderCancelledEventListener.java create mode 100644 nowait-event/src/main/java/com/nowait/nowaitevent/order/event/OrderCancelledEvent.java diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/cancelOrder/listener/OrderCancelledEventListener.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/cancelOrder/listener/OrderCancelledEventListener.java new file mode 100644 index 00000000..c6fcbd39 --- /dev/null +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/cancelOrder/listener/OrderCancelledEventListener.java @@ -0,0 +1,41 @@ +package com.nowait.applicationadmin.cancelOrder.listener; + +import org.springframework.dao.DataIntegrityViolationException; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.event.TransactionPhase; +import org.springframework.transaction.event.TransactionalEventListener; + +import com.nowait.domainadminrdb.cancelOrder.entity.CancelOrder; +import com.nowait.domainadminrdb.cancelOrder.repository.CancelOrderRepository; +import com.nowait.nowaitevent.order.event.OrderCancelledEvent; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Component +@RequiredArgsConstructor +@Slf4j +public class OrderCancelledEventListener { + + private final CancelOrderRepository cancelOrderRepository; + + @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) + @Transactional(propagation = Propagation.REQUIRES_NEW) + public void on(OrderCancelledEvent event) { + try { + cancelOrderRepository.save( + CancelOrder.builder() + .orderId(event.getOrderId()) + .storeId(event.getStoreId()) + .orderSignature(event.getOrderSignature()) + .reason(event.getReason()) + .cancelAt(event.getCancelAt()) + .build() + ); + } catch (DataIntegrityViolationException e) { + log.debug("cancel_orders duplicate orderId={}, ignore", event.getOrderId()); + } + } +} diff --git a/nowait-event/src/main/java/com/nowait/nowaitevent/order/event/OrderCancelledEvent.java b/nowait-event/src/main/java/com/nowait/nowaitevent/order/event/OrderCancelledEvent.java new file mode 100644 index 00000000..117655e6 --- /dev/null +++ b/nowait-event/src/main/java/com/nowait/nowaitevent/order/event/OrderCancelledEvent.java @@ -0,0 +1,16 @@ +package com.nowait.nowaitevent.order.event; + +import java.time.Instant; + +import com.nowait.domainadminrdb.cancelOrder.entity.CancelReason; + +import lombok.Value; + +@Value +public class OrderCancelledEvent { + Long orderId; + Long storeId; + String orderSignature; + CancelReason reason; + Instant cancelAt; +} From c29029476b05025116a90ddc5125466073574e6c Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Wed, 3 Sep 2025 19:50:28 +0900 Subject: [PATCH 11/13] =?UTF-8?q?refactor:=20RequestBody=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../applicationadmin/order/controller/OrderController.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/order/controller/OrderController.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/order/controller/OrderController.java index f62743b6..5a7ea897 100644 --- a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/order/controller/OrderController.java +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/order/controller/OrderController.java @@ -13,6 +13,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import com.nowait.applicationadmin.cancelOrder.dto.CancelOrderRequest; import com.nowait.applicationadmin.order.dto.OrderResponseDto; import com.nowait.applicationadmin.order.dto.OrderStatusUpdateRequestDto; import com.nowait.applicationadmin.order.dto.OrderStatusUpdateResponseDto; @@ -21,7 +22,6 @@ import com.nowait.domaincorerdb.user.entity.MemberDetails; import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; @@ -71,13 +71,14 @@ public ResponseEntity updateOrderStatus( @ApiResponse(responseCode = "200", description = "주문 삭제 성공") public ResponseEntity deleteOrder( @PathVariable Long orderId, + @RequestBody CancelOrderRequest cancelOrderRequest, @AuthenticationPrincipal MemberDetails memberDetails ) { return ResponseEntity .status(HttpStatus.OK) .body(ApiUtils.success( - orderService.deleteOrder(orderId, memberDetails) + orderService.cancelOrder(orderId, cancelOrderRequest, memberDetails) )); } } From 3239b339a054a7fbfdc4515d9cc6209b87f9ba45 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Wed, 3 Sep 2025 19:50:56 +0900 Subject: [PATCH 12/13] =?UTF-8?q?refactor:=20=EB=A9=94=EC=84=9C=EB=93=9C?= =?UTF-8?q?=EB=AA=85=20cancelOrder=EB=A1=9C=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?=EB=B0=8F=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20=EC=97=B0=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../order/service/OrderService.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/order/service/OrderService.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/order/service/OrderService.java index eb4a0e9c..cfd26222 100644 --- a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/order/service/OrderService.java +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/order/service/OrderService.java @@ -1,5 +1,6 @@ package com.nowait.applicationadmin.order.service; +import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; @@ -10,6 +11,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import com.nowait.applicationadmin.cancelOrder.dto.CancelOrderRequest; import com.nowait.applicationadmin.order.dto.OrderResponseDto; import com.nowait.applicationadmin.order.dto.OrderStatusUpdateResponseDto; import com.nowait.common.enums.Role; @@ -29,6 +31,7 @@ import com.nowait.domaincorerdb.user.exception.UserNotFoundException; import com.nowait.domaincorerdb.user.repository.UserRepository; import com.nowait.nowaitevent.order.event.CookingCompleteEvent; +import com.nowait.nowaitevent.order.event.OrderCancelledEvent; import lombok.RequiredArgsConstructor; @@ -88,7 +91,7 @@ public OrderStatusUpdateResponseDto updateOrderStatus(Long orderId, OrderStatus } @Transactional - public OrderStatusUpdateResponseDto deleteOrder(Long orderId, MemberDetails memberDetails) { + public OrderStatusUpdateResponseDto cancelOrder(Long orderId, CancelOrderRequest cancelOrderRequest, MemberDetails memberDetails) { User user = userRepository.findById(memberDetails.getId()).orElseThrow(UserNotFoundException::new); UserOrder userOrder = orderRepository.findById(orderId).orElseThrow(OrderNotFoundException::new); @@ -96,7 +99,16 @@ public OrderStatusUpdateResponseDto deleteOrder(Long orderId, MemberDetails memb throw new OrderUpdateUnauthorizedException(); } - userOrder.deleteOrder(); + userOrder.cancelOrder(); + + publisher.publishEvent(new OrderCancelledEvent( + userOrder.getId(), + userOrder.getStore().getStoreId(), + userOrder.getSignature(), + cancelOrderRequest.reason(), + Instant.now() + )); + return OrderStatusUpdateResponseDto.fromEntity(userOrder); } From 57320904c2f6636f89cada28aba51a2d15e7ae98 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Wed, 3 Sep 2025 19:51:08 +0900 Subject: [PATCH 13/13] =?UTF-8?q?refactor:=20=EB=A9=94=EC=84=9C=EB=93=9C?= =?UTF-8?q?=EB=AA=85=20cancelOrder=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/nowait/domaincorerdb/order/entity/UserOrder.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/order/entity/UserOrder.java b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/order/entity/UserOrder.java index 0da1415a..54fd36a9 100644 --- a/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/order/entity/UserOrder.java +++ b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/order/entity/UserOrder.java @@ -30,6 +30,7 @@ @AllArgsConstructor(access = AccessLevel.PRIVATE) @Builder public class UserOrder extends BaseTimeEntity { + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @@ -49,6 +50,7 @@ public class UserOrder extends BaseTimeEntity { private List orderItems = new ArrayList<>(); private String sessionId; + @Column(length = 10) // 예약자 이름 길이 제한 private String depositorName; @@ -63,7 +65,10 @@ public void updateStatus(OrderStatus newStatus) { this.status = newStatus; } - public void deleteOrder() { + public void cancelOrder() { + if (this.status == OrderStatus.CANCELLED) { + return; + } this.status = OrderStatus.CANCELLED; }