public async Task ExecuteAsync(CartItemAdded evt)
        {
            var cartProjection = await Repository.RetrieveAsync <CartProjection>(evt.AggregateId.ToString());

            cartProjection.Products.Add(evt.Adapt <CartProjection.CartProduct>());
            cartProjection.CartTotal = CalculateCartTotal(cartProjection);
            await Repository.UpsertAsync(cartProjection, evt);
        }
Example #2
0
        private void AddItemsToCartInSession(CartItemAdded item)
        {
            var cart = GetCartInSession();

            cart.Add(item);

            HttpContext.Session.SetString(CARDKEY, JsonConvert.SerializeObject(cart));
        }
Example #3
0
        public async Task <IActionResult> AddToCard(CartViewModel cartViewModel)
        {
            var cartItemAdded = new CartItemAdded()
            {
                UserName = USER, ProductName = cartViewModel.Product
            };

            await SendOnlyBus.SendAsync(cartItemAdded, ORDERSAGASERVICENAME);

            AddItemsToCartInSession(cartItemAdded);

            var cartItems = GetCartInSession();

            cartViewModel.CartItemsAdded = cartItems;

            return(View("Index", cartViewModel));
        }
Example #4
0
        public async Task HandleCommandAsync(IBus bus, CartItemAdded message, ILogger log)
        {
            var productsList = new List <string>();

            if (Data.PartitionKey == null)
            {
                this.Data.PartitionKey = PARTITION_KEY;
                this.Data.RowKey       = message.UserName;

                this.Data.UserName = message.UserName;
            }
            else
            {
                productsList = await this.LoadBlobPropertyAsync <List <string> >(Data.Products);
            }

            productsList.Add(message.ProductName);

            Data.Products = await this.WriteBlobPropertyAsync(productsList);
        }
Example #5
0
        public Task HandleCommandAsync(IBus bus, CartItemAdded message, TraceWriter log)
        {
            var productsList = new List <string>();

            if (Data.PartitionKey == null)
            {
                this.Data.PartitionKey = PARTITION_KEY;
                this.Data.RowKey       = message.UserName;
                this.Data.Products     = bus.Serializer.Serialize(productsList);
                this.Data.UserName     = message.UserName;
            }
            else
            {
                productsList = JsonConvert.DeserializeObject <List <string> >(this.Data.Products);
            }

            productsList.Add(message.ProductName);

            this.Data.Products = JsonConvert.SerializeObject(productsList);

            return(Task.CompletedTask);
        }
Example #6
0
        public override async Task <Cart> Run(Cart arg, CommercePipelineExecutionContext context)
        {
            var policy = context.GetPolicy <Policies.AbandonCartsPolicy>();

            var data = new CartItemAdded
            {
                UserId    = arg.Id,
                Timestamp = DateTime.UtcNow,
            };

            using (var client = new WebClient())
            {
                client.Headers["content-type"] = "application/json";
                var stringData = JsonConvert.SerializeObject(data);
                var bytes      = Encoding.UTF8.GetBytes(stringData);
                var response   = await client.UploadDataTaskAsync(policy.AddItemUrl, bytes);

                var responseText = Encoding.UTF8.GetString(response);
            }

            return(await Task.FromResult(arg));
        }
Example #7
0
 // We take actions internally on an event here
 private void OnCartItemAdded(CartItemAdded evt)
 {
     _cartItems.Add(new CartItem(evt.Sku, evt.Name, evt.SalePrice, evt.Quantity));
 }
Example #8
0
 public async Task <SagaData> LookForInstanceAsync(CartItemAdded message)
 {
     return(await SagaPersistence.GetSagaDataAsync <OrderSagaData>(PARTITION_KEY, message.UserName));
 }