Update Projection

Add event handlers to update the products map of the OrderedProduct
model

#BAEL-4767
This commit is contained in:
Steven van Beelen 2021-03-19 11:08:42 +01:00
parent 886368a4c3
commit 41d47f8aa6
1 changed files with 46 additions and 12 deletions

View File

@ -1,20 +1,23 @@
package com.baeldung.axon.querymodel;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.baeldung.axon.coreapi.events.OrderConfirmedEvent;
import com.baeldung.axon.coreapi.events.OrderPlacedEvent;
import com.baeldung.axon.coreapi.events.OrderShippedEvent;
import com.baeldung.axon.coreapi.events.ProductAddedEvent;
import com.baeldung.axon.coreapi.events.ProductCountDecrementedEvent;
import com.baeldung.axon.coreapi.events.ProductCountIncrementedEvent;
import com.baeldung.axon.coreapi.events.ProductRemovedEvent;
import com.baeldung.axon.coreapi.queries.FindAllOrderedProductsQuery;
import com.baeldung.axon.coreapi.queries.OrderedProduct;
import org.axonframework.config.ProcessingGroup;
import org.axonframework.eventhandling.EventHandler;
import org.axonframework.queryhandling.QueryHandler;
import org.springframework.stereotype.Service;
import com.baeldung.axon.coreapi.events.OrderConfirmedEvent;
import com.baeldung.axon.coreapi.events.OrderPlacedEvent;
import com.baeldung.axon.coreapi.events.OrderShippedEvent;
import com.baeldung.axon.coreapi.queries.FindAllOrderedProductsQuery;
import com.baeldung.axon.coreapi.queries.OrderedProduct;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
@ProcessingGroup("ordered-products")
@ -25,7 +28,39 @@ public class OrderedProductsEventHandler {
@EventHandler
public void on(OrderPlacedEvent event) {
String orderId = event.getOrderId();
orderedProducts.put(orderId, new OrderedProduct(orderId, event.getProduct()));
orderedProducts.put(orderId, new OrderedProduct(orderId));
}
@EventHandler
public void on(ProductAddedEvent event) {
orderedProducts.computeIfPresent(event.getOrderId(), (orderId, orderedProduct) -> {
orderedProduct.addProduct(event.getProductId());
return orderedProduct;
});
}
@EventHandler
public void on(ProductCountIncrementedEvent event) {
orderedProducts.computeIfPresent(event.getOrderId(), (orderId, orderedProduct) -> {
orderedProduct.incrementProductInstance(event.getProductId());
return orderedProduct;
});
}
@EventHandler
public void on(ProductCountDecrementedEvent event) {
orderedProducts.computeIfPresent(event.getOrderId(), (orderId, orderedProduct) -> {
orderedProduct.decrementProductInstance(event.getProductId());
return orderedProduct;
});
}
@EventHandler
public void on(ProductRemovedEvent event) {
orderedProducts.computeIfPresent(event.getOrderId(), (orderId, orderedProduct) -> {
orderedProduct.removeProduct(event.getProductId());
return orderedProduct;
});
}
@EventHandler
@ -48,5 +83,4 @@ public class OrderedProductsEventHandler {
public List<OrderedProduct> handle(FindAllOrderedProductsQuery query) {
return new ArrayList<>(orderedProducts.values());
}
}