Esempio n. 1
0
        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;
     }));
 }