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)); }
public dynamic Get(int id) { using (var db = SalesContext.Create()) { var item = db.ProductsPrices .Where(o => o.Id == id) .SingleOrDefault(); return(item); } }
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(); } } }
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(); } } }