예제 #1
0
        public OrdersModule(IOrderRepository orderRepository)
            : base("/orders")
        {
            Get("/", _ =>
            {
                var orders = orderRepository.GetAll();
                return(orders);
            });

            Post("/", _ => Response.AsCreatedResource(911));

            Post("/{id:int}", parameters =>
            {
                var model = this.Bind <List <OrderItem> > ();

                int id     = parameters.id;
                var result = orderRepository.AddItemsToOrder(id, model);
                return(result ? HttpStatusCode.Created : HttpStatusCode.NotFound); //loc header
            });

            Get("/{id:int}", parameters =>
            {
                int id = parameters.id;

                var order = orderRepository.GetById(id);
                if (order == null)
                {
                    return(HttpStatusCode.NotFound);
                }

                return(order);
            });

            Get("/{id:int}/items", parameters =>
            {
                int id = parameters.id;

                var items = orderRepository.GetItemsForOrder(id);

                return(items);
            });

            Delete("/{id:int}", parameters =>
            {
                int id = parameters.id;

                var result = orderRepository.Delete(id);

                return(result ? HttpStatusCode.NoContent : HttpStatusCode.NotFound);
            });
        }
예제 #2
0
        public OrdersModule (IOrderRepository orderRepository)
            : base ("/orders")
        {
            Get ("/" , _ =>
             {
                 var orders = orderRepository.GetAll ();
                 return orders;
             });

            Post ("/", _ => Response.AsCreatedResource (911));

            Post ("/{id:int}", parameters =>
             {
                 var model = this.Bind<List<OrderItem>> ();

                 int id = parameters.id;
                 var result = orderRepository.AddItemsToOrder (id, model);
                 return result ? HttpStatusCode.Created : HttpStatusCode.NotFound; //loc header
            });

            Get ("/{id:int}", parameters =>
             {
                 int id = parameters.id;

                 var order = orderRepository.GetById (id);
                 if (order == null)
                 {
                     return HttpStatusCode.NotFound;
                 }

                 return order;
             });

            Get ("/{id:int}/items", parameters =>
             {
                 int id = parameters.id;

                 var items = orderRepository.GetItemsForOrder (id);

                 return items;
             });

            Delete ("/{id:int}", parameters =>
             {
                 int id = parameters.id;

                 var result = orderRepository.Delete (id);

                 return result ? HttpStatusCode.NoContent : HttpStatusCode.NotFound;
             });
        }
예제 #3
0
        public async Task <int> CreateOrderAsync(List <OrderItemModel> cart)
        {
            string userEmail = _contextAccessor.HttpContext.User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Email)?.Value;
            var    user      = await _userRepository.GetUserByEmailAsync(userEmail);

            decimal totalAmount = 0;

            for (int i = 0; i < cart.Count; i++)
            {
                totalAmount += cart[i].Amount * cart[i].PrintingEdition.Price;
            }

            var payment = new Payment()
            {
                TransactionId = string.Empty
            };

            Order order = new Order
            {
                UserId      = user.Id,
                Date        = DateTime.Now,
                TotalAmount = totalAmount,
                Status      = Enums.Status.Unpaid
            };

            order = await _orderRepository.CreateOrderAsync(order, payment);

            var orderItems = _mapper.Map <List <OrderItemModel>, List <OrderItem> >(cart);

            for (int i = 0; i < orderItems.Count; i++)
            {
                orderItems[i].OrderId = order.Id;
            }

            await _orderRepository.AddItemsToOrder(orderItems);

            return(order.Id);
        }
예제 #4
0
        public OrdersModule(IOrderRepository orderRepository)
            : base("/orders")
        {
            Get("/", _ =>
            {
                var orders = orderRepository.GetAll();
                return(orders);
            });

            Post("/", _ =>
            {
                var model = this.Bind <List <OrderItem> >();

                var createdOrder = orderRepository.CreateNewOrder(model);
                return(Response.AsCreatedResource(createdOrder.OrderNumber));
            });

            Post("/{id:Guid}", parameters =>
            {
                var model = this.Bind <List <OrderItem> >();

                Guid id    = parameters.id;
                var result = orderRepository.AddItemsToOrder(id, model);
                return(result ? HttpStatusCode.Created : HttpStatusCode.NotFound);
            });

            Get("/{id:Guid}", parameters =>
            {
                Guid id = parameters.id;

                var order = orderRepository.GetById(id);
                if (order == null)
                {
                    return(HttpStatusCode.NotFound);
                }
                return(order);
            });

            Get("/{id:Guid}/items", parameters =>
            {
                Guid id = parameters.id;

                var items = orderRepository.GetItemsForOrder(id);

                return(items);
            });

            Delete("/{id:Guid}", parameters =>
            {
                Guid id = parameters.id;

                var result = orderRepository.Delete(id);

                return(result ? HttpStatusCode.NoContent : HttpStatusCode.NotFound);
            });

            Post("/{id:Guid}/ship", parameters =>
            {
                Guid id   = parameters.id;
                var model = this.Bind <ShipTo>();

                var order = orderRepository.GetById(id);

                if (order == null || order.Status == "Shipped" || order.Status == "Returned")
                {
                    return(HttpStatusCode.NotFound);
                }

                orderRepository.ChangeStatus(id, "Shipped", $"Shipped to {model.Name}, {model.Address} on {DateTime.Now}\n");

                return(HttpStatusCode.OK);
            });

            Post("/{id:Guid}/return", parameters =>
            {
                Guid id   = parameters.id;
                var model = this.Bind <Return>();

                var order = orderRepository.GetById(id);

                if (order == null || order.Status != "Shipped")
                {
                    return(HttpStatusCode.NotFound);
                }

                orderRepository.ChangeStatus(id, "Returned", $"Returned on {DateTime.Now}, reason: {model.Reason}");
                return(HttpStatusCode.OK);
            });
        }