diff --git a/src/main/java/com/everyonewaiter/application/receipt/ReceiptCreateService.java b/src/main/java/com/everyonewaiter/application/receipt/ReceiptCreateService.java index 2a55c7c..224731c 100644 --- a/src/main/java/com/everyonewaiter/application/receipt/ReceiptCreateService.java +++ b/src/main/java/com/everyonewaiter/application/receipt/ReceiptCreateService.java @@ -4,9 +4,7 @@ import com.everyonewaiter.application.receipt.provided.ReceiptCreator; import com.everyonewaiter.application.receipt.required.ReceiptPrintNoRepository; import com.everyonewaiter.domain.order.Order; -import com.everyonewaiter.domain.order.OrderUpdateRequests; import com.everyonewaiter.domain.receipt.Receipt; -import jakarta.annotation.Nullable; import java.util.List; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -43,29 +41,20 @@ public Receipt create(Long storeId, int tableNo, List orderIds) { @Override @Transactional(readOnly = true) - public @Nullable Receipt createDiff( - Long storeId, - int tableNo, - List orders, - OrderUpdateRequests updateRequests - ) { - if (!Receipt.hasDiff(orders, updateRequests)) { - return null; - } + public Receipt createCancel(Long storeId, int tableNo, Long orderId) { + Order order = orderFinder.findOrThrow(orderId); receiptRepository.increment(storeId); - return Receipt.diff(tableNo, orders, updateRequests, receiptRepository.get(storeId)); + return Receipt.cancel(tableNo, order, receiptRepository.get(storeId)); } @Override @Transactional(readOnly = true) - public Receipt createCancel(Long storeId, int tableNo, Long orderId) { - Order order = orderFinder.findOrThrow(orderId); - + public Receipt copyWithIncrementPrintNo(Long storeId, Receipt receipt) { receiptRepository.increment(storeId); - return Receipt.cancel(tableNo, order, receiptRepository.get(storeId)); + return receipt.copy(receiptRepository.get(storeId)); } } diff --git a/src/main/java/com/everyonewaiter/application/receipt/ReceiptSendEventHandler.java b/src/main/java/com/everyonewaiter/application/receipt/ReceiptSendEventHandler.java index dd0fb53..6c86028 100644 --- a/src/main/java/com/everyonewaiter/application/receipt/ReceiptSendEventHandler.java +++ b/src/main/java/com/everyonewaiter/application/receipt/ReceiptSendEventHandler.java @@ -47,14 +47,8 @@ public void handle(OrderCreateEvent event) { public void handle(OrderUpdateEvent event) { LOGGER.info("[주문 수정 빌지 전송 이벤트] 매장 ID: {}, 테이블 번호: {}", event.storeId(), event.tableNo()); - Receipt diff = receiptCreator.createDiff( - event.storeId(), - event.tableNo(), - event.orders(), - event.updateRequests() - ); - - if (diff != null) { + if (event.diff() != null) { + Receipt diff = receiptCreator.copyWithIncrementPrintNo(event.storeId(), event.diff()); publishSseEvent(event.storeId(), diff); } } diff --git a/src/main/java/com/everyonewaiter/application/receipt/provided/ReceiptCreator.java b/src/main/java/com/everyonewaiter/application/receipt/provided/ReceiptCreator.java index 892231e..8f7cf34 100644 --- a/src/main/java/com/everyonewaiter/application/receipt/provided/ReceiptCreator.java +++ b/src/main/java/com/everyonewaiter/application/receipt/provided/ReceiptCreator.java @@ -1,10 +1,6 @@ package com.everyonewaiter.application.receipt.provided; -import com.everyonewaiter.domain.order.Order; -import com.everyonewaiter.domain.order.OrderUpdateRequests; import com.everyonewaiter.domain.receipt.Receipt; -import jakarta.annotation.Nullable; -import jakarta.validation.Valid; import java.util.List; public interface ReceiptCreator { @@ -13,14 +9,8 @@ public interface ReceiptCreator { Receipt create(Long storeId, int tableNo, List orderIds); - @Nullable - Receipt createDiff( - Long storeId, - int tableNo, - List orders, - @Valid OrderUpdateRequests updateRequests - ); - Receipt createCancel(Long storeId, int tableNo, Long orderId); + Receipt copyWithIncrementPrintNo(Long storeId, Receipt receipt); + } diff --git a/src/main/java/com/everyonewaiter/domain/order/OrderUpdateEvent.java b/src/main/java/com/everyonewaiter/domain/order/OrderUpdateEvent.java index 1af8d80..fc59fa3 100644 --- a/src/main/java/com/everyonewaiter/domain/order/OrderUpdateEvent.java +++ b/src/main/java/com/everyonewaiter/domain/order/OrderUpdateEvent.java @@ -1,12 +1,8 @@ package com.everyonewaiter.domain.order; -import java.util.List; +import com.everyonewaiter.domain.receipt.Receipt; +import org.jspecify.annotations.Nullable; -public record OrderUpdateEvent( - Long storeId, - int tableNo, - List orders, - OrderUpdateRequests updateRequests -) { +public record OrderUpdateEvent(Long storeId, int tableNo, @Nullable Receipt diff) { } diff --git a/src/main/java/com/everyonewaiter/domain/pos/PosTable.java b/src/main/java/com/everyonewaiter/domain/pos/PosTable.java index 195dbaa..354c24c 100644 --- a/src/main/java/com/everyonewaiter/domain/pos/PosTable.java +++ b/src/main/java/com/everyonewaiter/domain/pos/PosTable.java @@ -14,6 +14,7 @@ import com.everyonewaiter.domain.order.OrderUpdateEvent; import com.everyonewaiter.domain.order.OrderUpdateRequest; import com.everyonewaiter.domain.order.OrderUpdateRequests; +import com.everyonewaiter.domain.receipt.Receipt; import com.everyonewaiter.domain.receipt.ReceiptResendEvent; import com.everyonewaiter.domain.sse.SseEvent; import com.everyonewaiter.domain.store.Store; @@ -129,11 +130,13 @@ public void cancelOrder(Long orderId) { public void updateOrder(OrderUpdateRequests updateRequests) { PosTableActivity posTableActivity = getActiveActivityOrThrow(); + Receipt diff = Receipt.diff(getTableNo(), getOrderedOrders(), updateRequests); + for (OrderUpdateRequest updateRequest : updateRequests.orders()) { posTableActivity.updateOrder(updateRequest); } - registerEvent(new OrderUpdateEvent(store.getId(), tableNo, getOrderedOrders(), updateRequests)); + registerEvent(new OrderUpdateEvent(store.getId(), tableNo, diff)); registerEvent(new SseEvent(store.getId(), ORDER, UPDATE, getTableNo())); registerEvent(new SseEvent(store.getId(), POS, UPDATE, getTableNo())); } diff --git a/src/main/java/com/everyonewaiter/domain/receipt/Receipt.java b/src/main/java/com/everyonewaiter/domain/receipt/Receipt.java index 05f562b..6f7d628 100644 --- a/src/main/java/com/everyonewaiter/domain/receipt/Receipt.java +++ b/src/main/java/com/everyonewaiter/domain/receipt/Receipt.java @@ -36,38 +36,10 @@ public static Receipt of(int tableNo, List orders, int printNo) { ); } - public static boolean hasDiff(List orders, OrderUpdateRequests updateRequests) { - Map beforeOrderMenus = orders.stream() - .flatMap(order -> order.getPrintEnabledOrderMenus().stream()) - .collect(Collectors.toMap(OrderMenu::getId, orderMenu -> orderMenu)); - - List afterOrderMenus = updateRequests.orders() - .stream() - .flatMap(order -> order.orderMenus().stream()) - .toList(); - - for (OrderMenuQuantityUpdateRequest afterOrderMenu : afterOrderMenus) { - if (!beforeOrderMenus.containsKey(afterOrderMenu.orderMenuId())) { - continue; - } - - OrderMenu orderMenu = beforeOrderMenus.get(afterOrderMenu.orderMenuId()); - - int updatedQuantity = afterOrderMenu.quantity() - orderMenu.getQuantity(); - - if (updatedQuantity != 0) { - return true; - } - } - - return false; - } - public static @Nullable Receipt diff( int tableNo, List orders, - OrderUpdateRequests updateRequests, - int printNo + OrderUpdateRequests updateRequests ) { Map beforeOrderMenus = orders.stream() .flatMap(order -> order.getPrintEnabledOrderMenus().stream()) @@ -95,7 +67,7 @@ public static boolean hasDiff(List orders, OrderUpdateRequests updateRequ } } - return receiptMenus.isEmpty() ? null : new Receipt(tableNo, "", printNo, receiptMenus); + return receiptMenus.isEmpty() ? null : new Receipt(tableNo, "", 0, receiptMenus); } public static Receipt cancel(int tableNo, Order order, int printNo) { @@ -110,4 +82,8 @@ public static Receipt cancel(int tableNo, Order order, int printNo) { ); } + public Receipt copy(int printNo) { + return new Receipt(this.tableNo, this.memo, printNo, this.receiptMenus); + } + }