コード例 #1
0
ファイル: OrdersController.cs プロジェクト: lcm4w/GildedRose
        public IHttpActionResult Post([FromBody] OrderPostDto orders)
        {
            var order = new Order
            {
                CustomerId = User.Identity.GetUserId(),
                OrderDate  = DateTime.Now
            };

            if (orders.OrderItems.Count !=
                orders.OrderItems
                .Select(oi => oi.ItemId)
                .Distinct()
                .Count()
                )
            {
                return(BadRequest("Items should be unique."));
            }

            var orderItems = new Collection <OrderItem>();

            foreach (var orderItemDto in orders.OrderItems)
            {
                var item = _unitOfWork.Items.GetItemById(orderItemDto.ItemId);
                if (item == null)
                {
                    return(NotFound());
                }

                if (item.Quantity < orderItemDto.Quantity)
                {
                    return(BadRequest($"Not enough stock for '{item.Name}.'"));
                }

                var orderItem = new OrderItem
                {
                    ItemId    = orderItemDto.ItemId,
                    Order     = order,
                    Price     = item.Price,
                    Quantity  = orderItemDto.Quantity,
                    LinePrice = orderItemDto.Quantity * item.Price
                };

                orderItems.Add(orderItem);

                item.Quantity -= orderItemDto.Quantity;
            }

            order.OrderItems = orderItems;
            order.TotalPrice = orderItems.Sum(oi => oi.LinePrice);

            _unitOfWork.Orders.Add(order);

            _unitOfWork.Complete();

            return(CreatedAtRoute("GetOrder",
                                  new { order.Id },
                                  _unitOfWork.Orders.GetOrder(order.Id, User.Identity.GetUserId())
                                  ));
        }
コード例 #2
0
 public string PostOrder([FromBody] OrderPostDto newOrder)
 {
     try
     {
         var createdId = _orderService.PostOrder(newOrder);
         return($"Order {createdId} successfully created.");
     }
     catch
     {
         return("Error creating new order.");
     }
 }
コード例 #3
0
        public Guid PostOrder(OrderPostDto newOrderDto)
        {
            Order newOrder = new Order()
            {
                Id          = Guid.NewGuid(),
                CustomerId  = newOrderDto.CustomerId,
                Canceled    = newOrderDto.Canceled,
                OrderObject = newOrderDto.OrderObject,
                Amount      = newOrderDto.Amount
            };

            _orderRepository.orders.Add(newOrder);

            return(newOrder.Id);
        }
コード例 #4
0
        public void Post_NotEnoughStock_ShouldReturnBadRequest()
        {
            var dto = new OrderPostDto
            {
                OrderItems = new Collection <OrderItemPostDto>
                {
                    new OrderItemPostDto()
                    {
                        ItemId   = _itemId,
                        Quantity = _quantity + 1
                    }
                }
            };

            var result = _controller.Post(dto);

            result.Should().BeOfType <BadRequestErrorMessageResult>();
        }
コード例 #5
0
        public void Post_NoItemWithGivenIdExists_ShouldReturnNotFound()
        {
            var dto = new OrderPostDto
            {
                OrderItems = new Collection <OrderItemPostDto>
                {
                    new OrderItemPostDto()
                    {
                        ItemId   = _itemId + 1,
                        Quantity = _quantity - 1
                    }
                }
            };

            var result = _controller.Post(dto);

            result.Should().BeOfType <NotFoundResult>();
        }
コード例 #6
0
        public void Post_ValidRequest_ShouldReturnCreated()
        {
            var dto = new OrderPostDto
            {
                OrderItems = new Collection <OrderItemPostDto>
                {
                    new OrderItemPostDto()
                    {
                        ItemId   = _itemId,
                        Quantity = _quantity - 1
                    }
                }
            };

            var result = _controller.Post(dto);

            result.Should().BeOfType <CreatedAtRouteNegotiatedContentResult <OrderDto> >();
        }
コード例 #7
0
        public void TestPost()
        {
            //arrange
            var orderPostDto = new OrderPostDto()
            {
                CustomerId  = Guid.Parse("c9820ad9-22d9-4ab8-b291-6a8722656ebb"),
                Canceled    = false,
                OrderObject = "book",
                Amount      = 3
            };

            var createdId    = _orderService.PostOrder(orderPostDto);
            var createdOrder = _orderService.GetOrder(createdId);

            Assert.Equal(orderPostDto.CustomerId, createdOrder.CustomerId);
            Assert.Equal(orderPostDto.Canceled, createdOrder.Canceled);
            Assert.Equal(orderPostDto.OrderObject, createdOrder.OrderObject);
            Assert.Equal(orderPostDto.Amount, createdOrder.Amount);
        }
コード例 #8
0
        public IActionResult AddNewOrder([FromBody] OrderPostDto orderDto)
        {
            try
            {
                if (orderDto == null)
                {
                    return(BadRequest("A new order cannot be null."));
                }
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }

                orderDto.OrderItems = SetUnitPrices(orderDto.OrderItems);
                var newOrderNumber = Guid.NewGuid().ToString();

                var order = new Order()
                {
                    CustomerId  = orderDto.CustomerId,
                    OrderDate   = DateTime.Now,
                    OrderNumber = newOrderNumber.Substring(newOrderNumber.Length - 7, 7),
                    OrderItems  = Mapper.Map <ICollection <OrderItem> >(orderDto.OrderItems),
                    TotalAmount = CalculatePrice(orderDto.OrderItems, orderDto.Discount)
                };

                _repo.addNewOrder(order);

                if (!_repo.Save())
                {
                    return(StatusCode(500, "An error occured while creating the order."));
                }

                return(Ok(Mapper.Map <OrderDto>(order)));
            }
            catch (Exception ex)
            {
                return(StatusCode(500, ex.Message));
            }
        }
コード例 #9
0
        public void Post_MultipleSameItem_ShouldReturnBadRequest()
        {
            var dto = new OrderPostDto
            {
                OrderItems = new Collection <OrderItemPostDto>
                {
                    new OrderItemPostDto()
                    {
                        ItemId   = _itemId,
                        Quantity = 1
                    },
                    new OrderItemPostDto()
                    {
                        ItemId   = _itemId,
                        Quantity = 2
                    }
                }
            };

            var result = _controller.Post(dto);

            result.Should().BeOfType <BadRequestErrorMessageResult>();
        }