Пример #1
0
        private void OnReservedOrder(
            object o,
            Message <string, ReservedOrder> e,
            Producer <string, ReserveCustomerCredit> reserveCustomerCreditProducer,
            Producer <string, OrderFailed> orderFailedProducer,
            Producer <string, OrderState> orderStateProducer)
        {
            using (var orderOrchestraDbContext = new OrderOrchestraDbContext())
            {
                IUnitOfWork unitOfWork = new UnitOfWork <Infrastructure.OrderOrchestraDbContext>(orderOrchestraDbContext);
                IRepository <Entities.Order> orderRepository = unitOfWork.GetRepository <Entities.Order>();

                // Get the Order from the repository.
                var order = orderRepository.FirstOrDefault(x => x.OrderId == e.Value.OrderId).Result;

                if (order == null)
                {
                    throw new Exception();
                }

                if (e.Value.Status.Equals("success"))
                {
                    order.Status = Entities.Order.OrderStatus.WaitingForPayment;
                    order.Total  = e.Value.Total;
                }
                else if (e.Value.Status.Equals("outofstock"))
                {
                    order.Status = Entities.Order.OrderStatus.Failed;
                }

                // Save the order entity to the repository.
                orderRepository.Update(order);
                var result = unitOfWork.SaveChanges().Result;

                // If save fails, throw an exception.
                if (!result.IsSuccessfull())
                {
                    throw new Exception();
                }

                var orderState = new OrderState()
                {
                    customerId = order.CustomerId,
                    date       = order.Date.ToString(),
                    status     = order.Status.ToString(),
                    total      = order.Total,
                    products   = order.Products.Select(x => new OrderProduct()
                    {
                        id       = x.ProductId,
                        Quantity = x.Quantity
                    }).ToList()
                };

                var orderStateResult = orderStateProducer.ProduceAsync(
                    "order-state",
                    Guid.NewGuid().ToString(),
                    orderState).Result;

                if (e.Value.Status.Equals("success"))
                {
                    var reserveCustomerCredit = new ReserveCustomerCredit()
                    {
                        OrderId    = e.Value.OrderId,
                        Amount     = e.Value.Total,
                        CustomerId = order.CustomerId
                    };

                    var r = reserveCustomerCreditProducer.ProduceAsync(
                        "reserve-customer-credit",
                        Guid.NewGuid().ToString(),
                        reserveCustomerCredit).Result;
                }
                else if (e.Value.Status.Equals("outofstock"))
                {
                    var orderFailed = new OrderFailed()
                    {
                        OrderId = e.Value.OrderId
                    };

                    var r = orderFailedProducer.ProduceAsync(
                        "order-failed", Guid.NewGuid().ToString(), orderFailed).Result;
                }
            }
        }
Пример #2
0
        private void OnReservedCustomerCredit(
            object o,
            Message <string, ReservedCustomerCredit> e,
            Producer <string, OrderFailed> producer,
            Producer <string, OrderState> orderStateProducer)
        {
            using (var orderOrchestraDbContext = new OrderOrchestraDbContext())
            {
                IUnitOfWork unitOfWork = new UnitOfWork <Infrastructure.OrderOrchestraDbContext>(orderOrchestraDbContext);
                IRepository <Entities.Order> orderRepository = unitOfWork.GetRepository <Entities.Order>();

                var specification = new Specification <Entities.Order>();
                specification.Include(x => x.Products);
                var order = orderRepository.FirstOrDefault(x => x.OrderId == e.Value.OrderId, specification).Result;

                if (e.Value.Status.Equals("success"))
                {
                    order.Status = Entities.Order.OrderStatus.Success;
                }
                else
                {
                    order.Status = Entities.Order.OrderStatus.Failed;
                }

                var result = unitOfWork.SaveChanges().Result;

                if (!result.IsSuccessfull())
                {
                    throw new Exception();
                }

                var orderState = new OrderState()
                {
                    id         = order.OrderId,
                    customerId = order.CustomerId,
                    date       = order.Date.ToString(),
                    status     = order.Status.ToString(),
                    total      = order.Total,
                    products   = order.Products.Select(x => new OrderProduct()
                    {
                        id       = x.ProductId,
                        Quantity = x.Quantity
                    }).ToList()
                };

                var orderStateResult = orderStateProducer.ProduceAsync(
                    "order-state",
                    Guid.NewGuid().ToString(),
                    orderState).Result;

                if (e.Value.Status.Equals("success"))
                {
                    // TODO:
                }
                else
                {
                    var orderFailed = new OrderFailed()
                    {
                        OrderId = e.Value.OrderId
                    };

                    var p = producer.ProduceAsync(
                        "order-failed",
                        Guid.NewGuid().ToString(),
                        orderFailed).Result;
                }
            }
        }
Пример #3
0
        private void OnCreated(
            object o,
            Message <string, OrderCreated> e,
            Producer <string, ReserveOrder> producer,
            Producer <string, OrderState> orderStateProducer)
        {
            using (var orderOrchestraDbContext = new OrderOrchestraDbContext())
            {
                IUnitOfWork unitOfWork = new UnitOfWork <Infrastructure.OrderOrchestraDbContext>(orderOrchestraDbContext);
                IRepository <Entities.Order> orderRepository = unitOfWork.GetRepository <Entities.Order>();

                // Converts OrderCreated to an order entity.
                var order = new Entities.Order()
                {
                    OrderId    = e.Value.id,
                    CustomerId = e.Value.customerId,
                    Date       = DateTime.Parse(e.Value.date),
                    Products   = e.Value.products.Select(x => new Entities.OrderProduct()
                    {
                        ProductId = x.id,
                        Quantity  = x.Quantity
                    }).ToList(),
                    Status = Entities.Order.OrderStatus.WaitingForReservation
                };

                // Save the order entity to the repository.
                orderRepository.Add(order);
                var result = unitOfWork.SaveChanges().Result;

                // If save fails, throw an exception.
                if (!result.IsSuccessfull())
                {
                    throw new Exception();
                }

                var orderState = new OrderState()
                {
                    customerId = order.CustomerId,
                    date       = order.Date.ToString(),
                    status     = order.Status.ToString(),
                    total      = order.Total,
                    products   = order.Products.Select(x => new OrderProduct()
                    {
                        id       = x.ProductId,
                        Quantity = x.Quantity
                    }).ToList()
                };

                var orderStateResult = orderStateProducer.ProduceAsync(
                    "order-state",
                    Guid.NewGuid().ToString(),
                    orderState).Result;

                var reserveItems = new ReserveOrder()
                {
                    OrderId  = order.OrderId,
                    products = order.Products.Select(x => new ReserveItemProduct()
                    {
                        id       = x.ProductId,
                        Quantity = x.Quantity
                    }).ToList()
                };

                var reserveItemsResult = producer.ProduceAsync(
                    "reserve-order",
                    Guid.NewGuid().ToString() + DateTime.Now,
                    reserveItems).Result;
            }
        }