public async Task <IActionResult> PutOrderItem([FromRoute] int id, [FromBody] OrderItemChangeDto itemDto)
        {
            try
            {
                var item = await _repository.GetOrderItem(id);

                if (item == null)
                {
                    return(NotFound());
                }

                _mapper.Map(itemDto, item);

                await _repository.UpdateOrderItem(item);

                await _repository.Save();

                return(NoContent());
            }
            catch (DbUpdateException e)
            {
                ModelState.AddModelError("database", e.InnerException != null
                    ? e.InnerException.Message
                    : e.Message);
                return(ValidationProblem());
            }
            catch (Exception e)
            {
                return(_helpers.ErrorResponse(e));
            }
        }
        public async Task <IActionResult> PostOrderItem([FromBody] OrderItemChangeDto itemDto)
        {
            try
            {
                var item = _mapper.Map <OrderItem>(itemDto);

                var order = await _repository.AddOrderItem(item);

                await _repository.Save();

                return(CreatedAtAction("GetOrder",
                                       new { controller = "orders", id = item.OrderId },
                                       _mapper.Map <OrderDto>(order)));
            }
            catch (DbUpdateException e)
            {
                ModelState.AddModelError("database", e.InnerException != null
                    ? e.InnerException.Message
                    : e.Message);
                return(ValidationProblem());
            }
            catch (Exception e)
            {
                return(_helpers.ErrorResponse(e));
            }
        }
        private async void AddOrderItem(ProductDto product)
        {
            loading = true;

            try
            {
                if (product.InStock)
                {
                    var orderItem = new OrderItemChangeDto()
                    {
                        Amount    = 1,
                        OrderId   = _state.order.Id,
                        ProductId = product.Id
                    };

                    var res = await _ordersDataService.AddOrderItem(orderItem);

                    // Success
                    if (res.StatusCode == System.Net.HttpStatusCode.Created)
                    {
                        _state.order = JsonSerializer.Deserialize <OrderDto>(
                            await res.Content.ReadAsStringAsync(),
                            new JsonSerializerOptions()
                        {
                            PropertyNameCaseInsensitive = true
                        });
                    }
                    // Error
                    else
                    {
                        await _helpers.ErrorResponse(res);
                    }
                }
            }
            catch (AccessTokenNotAvailableException e)
            {
                e.Redirect();
            }
            catch (Exception e)
            {
                _state.err = new Error(e.Message, false);
            }

            loading = false;
            StateHasChanged();
        }
        public async Task <HttpResponseMessage> AddOrderItem(OrderItemChangeDto item)
        {
            var i = JsonSerializer.Deserialize <OrderItemDto>(
                JsonSerializer.Serialize <OrderItemChangeDto>(item));

            var product = _context.products
                          .Where(p => p.Id == item.ProductId)
                          .FirstOrDefault();

            var existingItem = _context.order.OrderItems
                               .Find(i => i.ProductId == item.ProductId);

            i.Id      = _context.order.OrderItems.Count + 1;
            i.Price   = item.Amount * product.Price;
            i.Product = product;

            // If the item exists in the order, correct the amount and price
            if (existingItem != null)
            {
                existingItem.Price  += i.Price;
                existingItem.Amount += i.Amount;
            }
            // Otherwise, add the new item
            else
            {
                _context.order.OrderItems.Add(i);
            }

            CalculateTotal(_context.order);

            await _context.SetOrderAsync(_context.order);

            var jsonString = new StringContent(
                JsonSerializer.Serialize <OrderDto>(_context.order),
                Encoding.UTF8,
                "application/json");

            res = new HttpResponseMessage()
            {
                StatusCode = System.Net.HttpStatusCode.Created,
                Content    = jsonString
            };

            return(res);
        }
        public async Task <HttpResponseMessage> UpdateOrderItem(int id, OrderItemChangeDto item)
        {
            var i = _context.order.OrderItems
                    .Where(o => o.ProductId == item.ProductId)
                    .FirstOrDefault();

            i.Amount = item.Amount;
            i.Price  = item.Amount * i.Product.Price;

            CalculateTotal(_context.order);

            await _context.SetOrderAsync(_context.order);

            res = new HttpResponseMessage()
            {
                StatusCode = System.Net.HttpStatusCode.NoContent
            };

            return(res);
        }
 public async Task <HttpResponseMessage> UpdateOrderItem(int id, OrderItemChangeDto item)
 {
     return(await _secureHttp.PutAsJsonAsync($"/api/orderitems/{id}", item));
 }
 public async Task <HttpResponseMessage> AddOrderItem(OrderItemChangeDto item)
 {
     return(await _secureHttp.PostAsJsonAsync("/api/orderitems", item));
 }