public static PurchaseTicketResponse ConvertToPurchaseTicketResponse(this TicketPurchase ticketPurchase) { PurchaseTicketResponse response = new PurchaseTicketResponse(); response.TicketId = ticketPurchase.Id.ToString(); response.EventName = ticketPurchase.Event.Name; response.NoOfTickets = ticketPurchase.TicketQuantity; return response; }
public PurchaseTicketResponse PurchaseTicket(PurchaseTicketRequest purchaseTicketRequest) { PurchaseTicketResponse response = new PurchaseTicketResponse(); try { // check for a duplicate transaction using the Idempotent pattern; // the Domain Logic could cope but you can't be sure. if (_reservationResponse.IsAUniqueRequest(purchaseTicketRequest.CorrelationId)) { TicketPurchase ticket; Event Event = _eventRepository.FindBy(new Guid(purchaseTicketRequest.EventId)); if (Event.CanPurchaseTicketWith(new Guid(purchaseTicketRequest.ReservationId))) { ticket = Event.PurchaseTicketWith(new Guid(purchaseTicketRequest.ReservationId)); _eventRepository.Save(Event); response = ticket.ConvertToPurchaseTicketResponse(); response.Success = true; } else { response.Message = Event.DetermineWhyATicketCannotbePurchasedWith(new Guid(purchaseTicketRequest.ReservationId)); response.Success = false; } _reservationResponse.LogResponse(purchaseTicketRequest.CorrelationId, response); } else { response = _reservationResponse.RetrievePreviousResponseFor(purchaseTicketRequest.CorrelationId); } } catch (Exception ex) { response.Message = ErrorLog.GenerateErrorRefMessageAndLog(ex); response.Success = false; } return response; }