private void Apply(ProductAdded @event) { Version++; var newProductItem = @event.ProductItem; var existingProductItem = FindProductItemMatchingWith(newProductItem); if (existingProductItem is null) { ProductItems.Add(newProductItem); return; } ProductItems.Replace( existingProductItem, existingProductItem.MergeWith(newProductItem) ); }
private void Apply(ProductRemoved @event) { Version++; var productItemToBeRemoved = @event.ProductItem; var existingProductItem = FindProductItemMatchingWith(@event.ProductItem); if (existingProductItem.HasTheSameQuantity(productItemToBeRemoved)) { ProductItems.Remove(existingProductItem); return; } ProductItems.Replace( existingProductItem, existingProductItem.Substract(productItemToBeRemoved) ); }