diff --git a/src/main/java/com/cleanengine/coin/order/application/OrderRestoreService.java b/src/main/java/com/cleanengine/coin/order/application/OrderRestoreService.java index cf28ed4b..eed137ae 100644 --- a/src/main/java/com/cleanengine/coin/order/application/OrderRestoreService.java +++ b/src/main/java/com/cleanengine/coin/order/application/OrderRestoreService.java @@ -38,6 +38,6 @@ public void run(ApplicationArguments args) throws Exception { protected void restoreOrder(Order order){ WaitingOrders waitingOrders = waitingOrdersManager.getWaitingOrders(order.getTicker()); waitingOrders.addOrder(order); - updateOrderBookUsecase.updateOrderBookOnNewOrder(order); + updateOrderBookUsecase.updateOrderBookOnRestored(order); } } diff --git a/src/main/java/com/cleanengine/coin/orderbook/application/service/OrderBookService.java b/src/main/java/com/cleanengine/coin/orderbook/application/service/OrderBookService.java index 3360b9e9..51ee275e 100644 --- a/src/main/java/com/cleanengine/coin/orderbook/application/service/OrderBookService.java +++ b/src/main/java/com/cleanengine/coin/orderbook/application/service/OrderBookService.java @@ -25,12 +25,21 @@ public class OrderBookService implements UpdateOrderBookUsecase, ReadOrderBookUs @Override public void updateOrderBookOnNewOrder(Order order) { + addToOrderBook(order, order.getOrderSize()); + } + + @Override + public void updateOrderBookOnRestored(Order order) { + addToOrderBook(order, order.getRemainingSize()); + } + + private void addToOrderBook(Order order, double size) { if(order.getIsMarketOrder()){return;} String ticker = order.getTicker(); activeOrders(ticker).saveOrder(order); boolean isBuyOrder = order instanceof BuyOrder; - orderBookDomainService.updateOrderBookOnNewOrder(ticker, isBuyOrder, order.getPrice(), order.getRemainingSize()); + orderBookDomainService.updateOrderBookOnNewOrder(ticker, isBuyOrder, order.getPrice(), size); sendOrderBookUpdated(ticker); } diff --git a/src/main/java/com/cleanengine/coin/orderbook/application/service/UpdateOrderBookUsecase.java b/src/main/java/com/cleanengine/coin/orderbook/application/service/UpdateOrderBookUsecase.java index ec1c9cd2..8d28e23a 100644 --- a/src/main/java/com/cleanengine/coin/orderbook/application/service/UpdateOrderBookUsecase.java +++ b/src/main/java/com/cleanengine/coin/orderbook/application/service/UpdateOrderBookUsecase.java @@ -5,5 +5,6 @@ // TODO 메서드 parameter가 비슷한 스타일이어야 한다. public interface UpdateOrderBookUsecase { void updateOrderBookOnNewOrder(Order order); + void updateOrderBookOnRestored(Order order); void updateOrderBookOnTradeExecuted(String ticker, Long buyOrderId, Long sellOrderId, Double orderSize); } diff --git a/src/main/java/com/cleanengine/coin/order/adapter/in/event/SpringOrderCreatedUpdateOrderBookHandler.java b/src/main/java/com/cleanengine/coin/orderbook/infra/SpringOrderCreatedUpdateOrderBookHandler.java similarity index 85% rename from src/main/java/com/cleanengine/coin/order/adapter/in/event/SpringOrderCreatedUpdateOrderBookHandler.java rename to src/main/java/com/cleanengine/coin/orderbook/infra/SpringOrderCreatedUpdateOrderBookHandler.java index aef0fbd9..8ad6fe20 100644 --- a/src/main/java/com/cleanengine/coin/order/adapter/in/event/SpringOrderCreatedUpdateOrderBookHandler.java +++ b/src/main/java/com/cleanengine/coin/orderbook/infra/SpringOrderCreatedUpdateOrderBookHandler.java @@ -1,8 +1,9 @@ -package com.cleanengine.coin.order.adapter.in.event; +package com.cleanengine.coin.orderbook.infra; import com.cleanengine.coin.order.application.event.OrderCreated; import com.cleanengine.coin.orderbook.application.service.UpdateOrderBookUsecase; import lombok.RequiredArgsConstructor; +import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; import org.springframework.transaction.event.TransactionalEventListener; @@ -11,6 +12,7 @@ public class SpringOrderCreatedUpdateOrderBookHandler { private final UpdateOrderBookUsecase updateOrderBookUsecase; + @Order(1) @TransactionalEventListener public void handleOrderCreated(OrderCreated event) { updateOrderBookUsecase.updateOrderBookOnNewOrder(event.order());