private void placeOrderHandler(PlaceOrder placeOrder) { var customer = _userRepository.Get(placeOrder.UserId); if (customer == null) throw new InvalidOperationException("User not found."); var @event = _eventRepository.Get(placeOrder.EventId); if (@event == null) throw new InvalidOperationException("Event not found."); if (placeOrder.PaymentInfo.CreditCardId.HasValue) { var creditCard = customer.CreditCards.FirstOrDefault(a => a.CreditCardId.Equals(placeOrder.PaymentInfo.CreditCardId.Value)); if (creditCard == null) throw new InvalidOperationException("Credit Card not found."); placeOrder.PaymentInfo.InstantBuyKey = creditCard.InstantBuyKey; } var order = new Order(customer, @event, placeOrder.Quantity); _orderRepository.Add(order); _unitOfWork.Commit(); Sender.Tell(order); Self.Tell(new OrderPlaced(order.OrderId, placeOrder.PaymentInfo)); }
public async Task<HttpResponseMessage> Post(OrderViewModel orderViewModel) { if (orderViewModel == null) return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Invalid request."); var paymentInfo = Mapper.Map<PaymentInfoViewModel, PaymentInfo>(orderViewModel.PaymentInfo); var placeOrder = new PlaceOrder(orderViewModel.Customer.UserId.Value, orderViewModel.Event.EventId.Value, orderViewModel.Quantity, paymentInfo); var orderPlaced = await WebApiApplication.OrderProcessorActor.Ask(placeOrder); if (orderPlaced is InvalidOperationException) return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ((InvalidOperationException)orderPlaced).Message); var result = Mapper.Map<Order, OrderViewModel>(orderPlaced as Order); return Request.CreateResponse(HttpStatusCode.Created, result); }