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; } } }
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; } } }
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; } }