public AlmostOrderedArticlesState Apply(ShoppingCartOrdered shoppingCartOrdered) { var orderedAt = shoppingCartOrdered.DateTime; var fiveMinutesUntilPlacingOrder = orderedAt.AddMinutes(-5); bool notRelevant(ShoppingCartArticleRemovedInfo removed) => removed.ShoppingCartId == shoppingCartOrdered.Id && removed.RemovedAt < fiveMinutesUntilPlacingOrder; RemovedShoppingCartArticles.RemoveAll(notRelevant); var removedInLast5Minutes = RemovedShoppingCartArticles .Where(x => x.ShoppingCartId == shoppingCartOrdered.Id) .ToList(); removedInLast5Minutes = removedInLast5Minutes .Select(x => { x.Timespan = orderedAt - x.RemovedAt; return(x); }) .ToList(); RemovedShoppingCartArticles.RemoveAll(x => x.ShoppingCartId == shoppingCartOrdered.Id); AlmostOrderedShoppingCartArticles.AddRange(removedInLast5Minutes); return(this); }
public Task Apply(ShoppingCartOrdered @event) { return(UpdateByStreamnameAsync <ShoppingCartViewModel>(@event.Id, shoppingCart => { shoppingCart.Status = (int)ShoppingCartStatus.Ordered; })); }