Example #1
0
        private void CreateTempOrder(Messages.Order.CreateTempOrderCommand cmd)
        {
            int userId = getUserIdFromJwt(cmd.JWT);

            if (userId == -1)
            {
                Sender.Tell(new Messages.Unauthorised());
            }

            using (MyContext context = MyContext.Connect(GetPath()))
            {
                Order order = new Order
                {
                    CreatedAt = DateTime.Now,
                    Status    = Status.Created,
                    ProductId = cmd.ProductId,
                    Price     = cmd.Price,
                    UserId    = userId
                };

                context.Orders.Add(order);
                context.SaveChanges();

                Sender.Tell(new Messages.Order.TempOrderCreateSuccess(order.Id));
            }
        }
Example #2
0
        public async Task <object> CreateOrder([FromBody] Messages.Order.CreateTempOrderCommand cmd)
        {
            ProductResponseSuccess productResponse = (ProductResponseSuccess)await products.GetProductById(cmd.ProductId);

            decimal price = productResponse.Product.Price;

            if (productResponse.Product.Stock < 1)
            {
                throw new Exception("Invalid request");
            }

            Console.WriteLine("Order/CreateOrder");
            var result = await orders.CreateOrder(cmd.ProductId, price, GetJwt());

            Console.WriteLine("Order/CreateOrder /result");
            if (result is Messages.Order.TempOrderCreateSuccess)
            {
                Console.WriteLine("result is Success");
                //talk to the tracking service
                var resultCmd = (Messages.Order.TempOrderCreateSuccess)result;

                var reserveProductResult = await products.ReserveProduct(cmd.ProductId, resultCmd.OrderId);

                if (!(reserveProductResult is ProductReservedStatus) ||
                    ((ProductReservedStatus)reserveProductResult).Status != true)
                {
                    //TODO: await orders.ForceRemoveOrder(resultCmd.OrderId);
                    Console.WriteLine("Order/CreateOrder Error Occured");
                    return(reserveProductResult);
                }

                await tracking.CreateTrackingOrder(resultCmd.OrderId, "London", DateTime.Now + new TimeSpan(1, 2, 0, 0), GetJwt());

                Console.WriteLine("Order/CreateOrder return resultcmd");
                return(resultCmd);
            }

            Console.WriteLine("Order/CreateOrder return result");
            return(result);
        }