Exemple #1
0
        public IActionResult UpdateOrder(int id, [FromBody] OrderForUpdateDto order)
        {
            try
            {
                if (order == null)
                {
                    _logger.LogError("order object sent from client is null.");
                    return(BadRequest("order object is null"));
                }
                if (!ModelState.IsValid)
                {
                    _logger.LogError("Invalid order object sent from client.");
                    return(BadRequest("Invalid model object"));
                }

                var orderEntity = _repository.Order.GetOrderById(id);
                if (orderEntity == null)
                {
                    _logger.LogError($"order with id: {id}, hasn't been found in db.");
                    return(NotFound());
                }

                _mapper.Map(order, orderEntity);

                _repository.Order.UpdateOrder(orderEntity);
                _repository.Save();

                return(NoContent());
            }
            catch (Exception ex)
            {
                _logger.LogError($"Something went wrong inside UpdateOrder action: {ex.InnerException.Message}");
                return(StatusCode(500, "Internal server error"));
            }
        }
Exemple #2
0
        public IActionResult UpdateOrderForCustomer(Guid customerId, Guid orderId, OrderForUpdateDto order)
        {
            if (!this.customersRepository.CustomerExists(customerId))
            {
                return(this.NotFound());
            }

            var orderForCustomer = this.customersRepository.GetOrder(customerId, orderId);

            if (orderForCustomer == null)
            {
                var orderToAdd = this.mapper.Map <Order>(order);
                orderToAdd.Id = orderId;

                this.customersRepository.AddOrder(customerId, orderToAdd);

                this.customersRepository.Save();

                var orderToReturn = this.mapper.Map <OrderDto>(orderToAdd);

                return(CreatedAtRoute("GetOrderForCustomer",
                                      new { customerId, orderId = orderToReturn.Id },
                                      orderToReturn));
            }

            this.mapper.Map(order, orderForCustomer);

            this.customersRepository.UpdateOrder(orderForCustomer);

            this.customersRepository.Save();
            return(this.NoContent());
        }
Exemple #3
0
        public async Task <IActionResult> PutOrder([FromRoute] int id, [FromBody] OrderForUpdateDto orderForUpdateDto)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            //if (id != order.Id)
            //{
            //    return BadRequest();
            //}

            var order = await _repository.GetAsync(id);

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

            _mapper.Map(orderForUpdateDto, order);

            if (await _unitOfWork.SaveAsync())
            {
                return(NoContent());
            }

            throw new Exception($"Updating order {id} failed on save");
        }
        public void UpdateOrderAsync(OrderForUpdateDto order)
        {
            var orderEntity = _mapper.Map <OrderEntity>(order);

            _context.Entry(orderEntity).State = EntityState.Modified;
            _context.Entry(orderEntity).Property(x => x.CreatedDate).IsModified = false;
            _context.Entry(orderEntity).Property(x => x.OrderNumber).IsModified = false;
        }
        public async Task <IActionResult> UpdateOrder(int id, [FromBody] OrderForUpdateDto order)
        {
            var orderEntity = HttpContext.Items["entity"] as Order;

            _mapper.Map(order, orderEntity);

            _repository.Order.UpdateOrder(orderEntity);
            await _repository.SaveAsync();

            return(NoContent());
        }
Exemple #6
0
        public async Task <IActionResult> UpdateOrder(int id, OrderForUpdateDto orderForUpdateDto)
        {
            var orderFromRepo = await _repo.Get(id);

            _mapper.Map(orderForUpdateDto, orderFromRepo);

            if (await _repo.SaveAll())
            {
                return(NoContent());
            }

            throw new Exception($"Updating order {id} failed on save");
        }
Exemple #7
0
        public ActionResult PartiallyUpdateOrderForCustomer(Guid customerId, Guid OrderId, JsonPatchDocument <OrderForUpdateDto> patchDocument)
        {
            if (!this.customersRepository.CustomerExists(customerId))
            {
                return(NotFound());
            }

            var orderForCustomerFromRepo = this.customersRepository.GetOrder(customerId, OrderId);

            if (orderForCustomerFromRepo == null)
            {
                var orderDto = new OrderForUpdateDto();
                patchDocument.ApplyTo(orderDto, ModelState);

                if (!TryValidateModel(orderDto))
                {
                    return(ValidationProblem(ModelState));
                }

                var orderToAdd = this.mapper.Map <Order>(orderDto);
                orderToAdd.Id = OrderId;

                this.customersRepository.AddOrder(customerId, orderToAdd);
                this.customersRepository.Save();

                var orderToReturn = this.mapper.Map <OrderDto>(orderToAdd);

                return(CreatedAtRoute("GetOrderForCustomer",
                                      new { customerId, orderId = orderToReturn.Id },
                                      orderToReturn));
            }

            var orderToPatch = this.mapper.Map <OrderForUpdateDto>(orderForCustomerFromRepo);

            patchDocument.ApplyTo(orderToPatch, ModelState);

            if (!TryValidateModel(orderToPatch))
            {
                return(ValidationProblem(ModelState));
            }

            this.mapper.Map(orderToPatch, orderForCustomerFromRepo);

            this.customersRepository.UpdateOrder(orderForCustomerFromRepo);

            this.customersRepository.Save();

            return(NoContent());
        }
        public async Task <OrderDto> UpdateOrderAsync(OrderForUpdateDto order)
        {
            var orderInDb = await _orderAccessor.GetOrderAsync(order.Id);

            if (orderInDb == null)
            {
                return(null);
            }

            if (order.OrderStatus == "Complete" &&
                (orderInDb.CompletedDate != null ||
                 order.CompletedDate != DateTime.MinValue))
            {
                order.CompletedDate = DateTime.Now;
            }

            var incomingProductIds = order.LineItems.Select(x => x.ProductId).ToList();
            var dbProductIds       = orderInDb.LineItems.Select(x => x.ProductId).ToList();
            var lineItemsToDelete  = orderInDb.LineItems
                                     .Where(x => !incomingProductIds
                                            .Contains(x.ProductId))
                                     .ToList();

            if (lineItemsToDelete.Any())
            {
                _orderAccessor.DeleteLineItems(lineItemsToDelete);
            }

            var lineItemsToAdd = order.LineItems
                                 .Where(x => !dbProductIds.Contains(x.ProductId)).ToList();

            if (lineItemsToAdd.Any())
            {
                await _orderAccessor.AddLineItems(_mapper.Map <List <LineItemDto> >(lineItemsToAdd));
            }

            var lineItemsToUpdate = order.LineItems.Where(x => dbProductIds.Contains(x.ProductId)).ToList();

            if (lineItemsToUpdate.Any())
            {
                _orderAccessor.UpdateLineItems(lineItemsToUpdate);
            }
            _orderAccessor.UpdateOrderAsync(order);
            await _orderAccessor.Commit();

            return(await GetOrderAsync(order.Id));
        }
Exemple #9
0
        public async Task <IActionResult> CancelUserOrder(int orderId, [FromBody] OrderForUpdateDto orderForUpdateDto)
        {
            if (Request.Headers.ContainsKey("id"))
            {
                if (int.Parse(Request.Headers["id"].First()) == int.Parse(User.FindFirst(ClaimTypes.NameIdentifier)?.Value))
                {
                    var order = await _repo.GetOrderById(orderId);

                    order.OrderStatus = orderForUpdateDto.OrderStatus;

                    if (await _repo.SaveAll())
                    {
                        return(NoContent());
                    }
                }
            }
            return(Unauthorized("id not match or not found"));
        }
Exemple #10
0
        public async Task <IActionResult> UpdateOrderStatus(int id, [FromBody] OrderForUpdateDto orderForUpdateDto)
        {
            var order = await _repo.GetOrderById(id);

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

            order.OrderStatus = orderForUpdateDto.OrderStatus;

            if (await _repo.SaveAll())
            {
                return(NoContent());
            }

            throw new Exception($"Updating order status failed on save");
        }
Exemple #11
0
        public async Task <IActionResult> UpdateOrder(int orderId, [FromBody] OrderForUpdateDto input)
        {
            if (ModelState.IsValid)
            {
                var orderInDB = await _ordersService.GetOrderByIdAsync(orderId);

                if (orderInDB == null)
                {
                    return(NotFound(orderId));
                }
                var result = await _ordersService.UpdateOrderAsync(_mapper.Map(input, orderInDB));

                if (result)
                {
                    return(Ok());
                }
            }
            return(BadRequest(ModelState));
        }
        public async Task <IActionResult> UpdateOrder(int id, int userId, OrderForUpdateDto orderForUpdateDto)
        {
            if (userId != int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value))
            {
                return(Unauthorized());
            }

            var orderFromRepo = await _repo.GetOrder(userId, id);


            _mapper.Map(orderForUpdateDto, orderFromRepo);

            if (await _repo.SaveAll())
            {
                return(NoContent());
            }

            return(BadRequest("Could not update order."));
        }
Exemple #13
0
        public async Task <IActionResult> UpdateOrder(int id, [FromBody] OrderForUpdateDto order)
        {
            if (order == null)
            {
                _logger.LogError($"OrderForUpdateDto object sent from client is null. ");
                return(BadRequest("OrderForUpdateDto object is null"));
            }
            var orderEntity = await _serviceManager.Order.GetOrderAsync(id, trackChanges : false);

            if (orderEntity == null)
            {
                _logger.LogInfo($"Order with id: {id} doesn't exist in the database.");
                return(NotFound());
            }
            _mapper.Map(order, orderEntity);
            _serviceManager.Order.UpdateOrder(orderEntity);
            _serviceManager.Save();
            return(NoContent());
        }
        public async Task <IActionResult> PartiallyUpdateOrderForCustomer(string customerId,
                                                                          int orderId,
                                                                          [FromBody] JsonPatchDocument <OrderForUpdateDto> patchDocument)
        {
            if (!await _customerService.Exists(customerId))
            {
                return(NotFound("Customer Not Found!"));
            }

            var order = await _orderService.GetByCustomerIdAndOrderId(customerId, orderId);

            if (order == null)
            {
                var orderDto = new OrderForUpdateDto();
                patchDocument.ApplyTo(orderDto, ModelState);

                if (!await TryUpdateModelAsync(orderDto))
                {
                    return(ValidationProblem(ModelState));
                }

                var orderAdded = _mapper.Map <OrderDto>(await _orderService.AddAsync(_mapper.Map <Order>(orderDto)));

                return(CreatedAtRoute("GetOrderForCustomer",
                                      new { customerId, orderId = orderAdded.OrderID },
                                      orderAdded));
            }

            var orderToPatch = _mapper.Map <OrderForUpdateDto>(order);

            patchDocument.ApplyTo(orderToPatch, ModelState);

            if (!await TryUpdateModelAsync(orderToPatch))
            {
                return(ValidationProblem(ModelState));
            }

            _mapper.Map(orderToPatch, order);
            await _orderService.UpdateAsync(order);

            return(NoContent());
        }
Exemple #15
0
        public async void LineItemsInDbNotPassedInWithUpdateDtoShouldBeDeleted()
        {
            // Arrange
            var orderInDb = new OrderDto
            {
                Id       = 1,
                Customer = new CustomerDto {
                    Id = 1
                },
                LineItems = new List <LineItemDto>
                {
                    new LineItemDto {
                        OrderId = 1, ProductId = 1
                    },
                    new LineItemDto {
                        OrderId = 1, ProductId = 2
                    }
                }
            };
            var orderToUpdate = new OrderForUpdateDto
            {
                Id         = 1,
                CustomerId = 1,
                LineItems  = new List <LineItemForUpdateDto>
                {
                    new LineItemForUpdateDto {
                        OrderId = 1, ProductId = 1
                    }
                }
            };
            var mockAccessor = new MockOrderAccessor().MockOrderInDb(orderInDb);
            var manager      = new OrderManager(mockAccessor.Object, new MockAutoMapper().Object);

            // Act
            var result = await manager.UpdateOrderAsync(orderToUpdate);

            // Assert
            mockAccessor.VerifyDeleteLineItems(Times.Once());
        }
        public async Task <IActionResult> UpdateOrder(int id, [FromBody] OrderForUpdateDto orderForUpdateDto)
        {
            try
            {
                if (orderForUpdateDto == null)
                {
                    logger.LogError("Order object sent from client is null.");
                    return(BadRequest("Order for Update is Null."));
                }

                if (!ModelState.IsValid)
                {
                    logger.LogError("Invalid order object sent from client.");
                    return(BadRequest("Invalid Order to Update."));
                }

                var orderToUpdate = await repository.Orders.GetOrderByIDAsync(id);

                if (orderToUpdate == null)
                {
                    logger.LogError($"Order with id: {id}, hasn't been found in db");
                    return(NotFound());
                }

                mapper.Map(orderForUpdateDto, orderToUpdate);

                repository.Orders.UpdateOrder(orderToUpdate);

                await repository.SaveAsync();

                return(NoContent());
            }
            catch (Exception ex)
            {
                logger.LogError($"UpdateOrder(): {ex.Message} {ex.StackTrace} {ex.InnerException}");
                return(StatusCode(StatusCodes.Status500InternalServerError, "Internal Server Error"));
            }
        }
        public IActionResult Put(int id, [FromBody] OrderForUpdateDto order)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (!_clientRepository.ClientExists(order.ClientId))
            {
                return(NotFound());
            }

            var orderFetched = _orderRepository.GetOrder(id);

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

            _mapper.Map(order, orderFetched);
            _orderRepository.Save();

            return(NoContent());
        }
        public async Task <IActionResult> UpdateOrder([FromBody] OrderForUpdateDto order)
        {
            var newOrder = await _orderManager.UpdateOrderAsync(order);

            return(Ok(newOrder));
        }
        public async Task <IActionResult> UpdateOrderForCustomer(string customerId, int orderId, OrderForUpdateDto model)
        {
            if (!await _customerService.Exists(customerId))
            {
                return(NotFound("Customer Not Found!"));
            }

            var order = await _orderService.GetByCustomerIdAndOrderId(customerId, orderId);

            // If the order doesn't exists then will be created (upserting)
            if (order == null)
            {
                order = await _orderService.AddAsync(_mapper.Map <Order>(model));

                var orderAdded = _mapper.Map <OrderDto>(order);

                return(CreatedAtRoute("GetOrderForCustomer",
                                      new { customerId, orderId = orderAdded.OrderID },
                                      orderAdded));
            }

            _mapper.Map(model, order);
            await _orderService.UpdateAsync(order);

            return(NoContent());
        }