Ejemplo n.º 1
0
        public async Task <IActionResult> Post([FromBody] string cartId)
        {
            var cart = string.IsNullOrEmpty(cartId) ? null : await _storeService.GetCart(cartId);

            if (cart != null && cartId == Request.Cookies["cart"])
            {
                string userId = null;

                if (!_useIdentity)
                {
                    userId = User.Claims.Where(c => c.Type == "http://schemas.microsoft.com/identity/claims/objectidentifier")
                             .Select(c => c.Value).SingleOrDefault();
                }
                else
                {
                    _userManager = (UserManager <ApplicationUser>)_contextAccessor.HttpContext.RequestServices.GetService(typeof(UserManager <ApplicationUser>));
                    var user = await _userManager.GetUserAsync(User);

                    userId = user.Id;
                }
                Order order = new Order
                {
                    UserId      = userId,
                    DateCreated = DateTime.Now.ToUniversalTime(),
                    GrandTotal  = 0
                };

                foreach (var item in cart.Items)
                {
                    order.OrderDetails.Add(new OrderDetail()
                    {
                        ProductId    = item.Id,
                        ProductTitle = item.Title,
                        ProductModel = item.Model,
                        ProductPrice = item.Price,
                        Quantity     = item.Quantity
                    });

                    order.GrandTotal += item.Price * item.Quantity;
                }

                await _serviceBusService.SubmitOrderAsync(order);

                await _storeService.RemoveCart("cart-" + cartId);

                Response.Cookies.Delete("cart");

                // Add order to cache
                await _storeService.AddOrder(userId, order);

                return(Ok(new ResultViewModel()
                {
                    Result = Result.SUCCESS
                }));
            }

            return(Ok(new ResultViewModel()
            {
                Result = Result.ERROR
            }));
        }