Exemple #1
0
        public dynamic GetCart(Guid id)
        {
            using (var db = SalesContext.Create())
            {
                var cartItems = db.ShoppingCarts
                                .Include(c => c.Items)
                                .Where(o => o.Id == id)
                                .SelectMany(cart => cart.Items)
                                .ToArray()
                                .GroupBy(cartItem => cartItem.ProductId)
                                .Select(group => new
                {
                    ProductId    = group.Key,
                    Quantity     = group.Sum(cartItem => cartItem.Quantity),
                    CurrentPrice = group.FirstOrDefault()?.CurrentPrice,
                    LastPrice    = group.FirstOrDefault()?.LastPrice,
                })
                                .ToArray();

                return(new
                {
                    CartId = id,
                    Items = cartItems
                });
            }
        }
        public async Task <IActionResult> AddToCart(dynamic data)
        {
            var cartId    = new Guid((string)data.CartId);
            var productId = (int)data.ProductId;
            var quantity  = (int)data.Quantity;
            var requestId = Request.Headers["request-id"].Single();

            if (quantity <= 0)
            {
                return(BadRequest());
            }

            using (var db = SalesContext.Create())
            {
                var requestAlreadyHandled = await db.ShoppingCarts
                                            .Where(o => o.Items.Any(i => i.RequestId == requestId))
                                            .AnyAsync();

                if (!requestAlreadyHandled)
                {
                    var cart = db.ShoppingCarts
                               .Include(c => c.Items)
                               .Where(o => o.Id == cartId)
                               .SingleOrDefault();

                    if (cart == null)
                    {
                        cart = db.ShoppingCarts.Add(new ShoppingCart()
                        {
                            Id = data.CartId
                        }).Entity;
                    }

                    var product = db.ProductsPrices
                                  .Where(o => o.Id == productId)
                                  .Single();

                    cart.Items.Add(new ShoppingCartItem()
                    {
                        CartId       = cartId,
                        RequestId    = requestId,
                        ProductId    = productId,
                        CurrentPrice = product.Price,
                        LastPrice    = product.Price,
                        Quantity     = quantity
                    });

                    await messageSession.Publish <ProductAddedToCart>(e =>
                    {
                        e.CartId    = cartId;
                        e.ProductId = productId;
                    });

                    await db.SaveChangesAsync();
                }
            }

            return(StatusCode(200));
        }
Exemple #3
0
        public dynamic Get(int id)
        {
            using (var db = SalesContext.Create())
            {
                var item = db.ProductsPrices
                           .Where(o => o.Id == id)
                           .SingleOrDefault();

                return(item);
            }
        }
Exemple #4
0
        public IEnumerable <dynamic> Get(string ids)
        {
            using (var db = SalesContext.Create())
            {
                var productIds = ids.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).Select(s => int.Parse(s)).ToArray();
                var items      = db.ProductsPrices
                                 .Where(status => productIds.Any(id => id == status.Id))
                                 .ToArray();

                return(items);
            }
        }
        public async Task Handle(AddItemToCart message, IMessageHandlerContext context)
        {
            using (var db = SalesContext.Create())
            {
                var requestAlreadyHandled = await db.ShoppingCarts
                                            .Where(o => o.Items.Any(i => i.RequestId == message.RequestId))
                                            .AnyAsync();

                if (!requestAlreadyHandled)
                {
                    var cart = db.ShoppingCarts
                               .Include(c => c.Items)
                               .Where(o => o.Id == message.CartId)
                               .SingleOrDefault();

                    if (cart == null)
                    {
                        cart = db.ShoppingCarts.Add(new ShoppingCart()
                        {
                            Id = message.CartId
                        }).Entity;
                    }

                    var product = db.ProductsPrices
                                  .Where(o => o.Id == message.ProductId)
                                  .Single();

                    cart.Items.Add(new ShoppingCartItem()
                    {
                        CartId       = message.CartId,
                        RequestId    = message.RequestId,
                        ProductId    = message.ProductId,
                        CurrentPrice = product.Price,
                        LastPrice    = product.Price,
                        Quantity     = message.Quantity
                    });

                    await context.Publish <ProductAddedToCart>(e =>
                    {
                        e.CartId    = message.CartId;
                        e.ProductId = message.ProductId;
                    });

                    await db.SaveChangesAsync();
                }
            }
        }
Exemple #6
0
        public async Task Handle(ShoppingCartGotInactive message, IMessageHandlerContext context)
        {
            Console.WriteLine($"Ready to wipe cart {message.CartId}.", Color.Yellow);

            using (var db = SalesContext.Create())
            {
                var cart = await db.ShoppingCarts
                           .Where(o => o.Id == message.CartId)
                           .SingleOrDefaultAsync();

                if (cart != null)
                {
                    db.ShoppingCarts.Remove(cart);
                    await db.SaveChangesAsync();
                }
            }

            Console.WriteLine($"Cart {message.CartId} wiped.", Color.Green);
        }
        public async Task Handle(CleanupFailedCartRequest message, IMessageHandlerContext context)
        {
            using (var db = SalesContext.Create())
            {
                var requestWasHandled = await db.ShoppingCarts
                                        .Where(o => o.Items.Any(i => i.RequestId == message.RequestId))
                                        .AnyAsync();

                if (requestWasHandled)
                {
                    var cart = db.ShoppingCarts
                               .Include(c => c.Items)
                               .Where(c => c.Id == message.CartId)
                               .Single();

                    var itemToRemove = cart.Items.Single(item => item.RequestId == message.RequestId);
                    cart.Items.Remove(itemToRemove);
                    await db.SaveChangesAsync();
                }
            }
        }