static void Main(string[] args) { EventTickets.Contracts.ITicketService myService; myService = new TicketServiceClientProxy(); //EventTickets.Service.TicketService myService = new TicketService(); //IEventRepository myRepository = new InMemoryRepository(); //foreach (Event x in myRepository) // Debug.Print(x.Id.ToString()); ReserveTicketResponse reservation = myService.ReserveTicket(new ReserveTicketRequest { EventId = "7632ef29-64aa-4fc7-90aa-d86cf735f1a8", TicketQuantity = 3 }); Console.WriteLine(reservation.Message ?? "OK"); Console.WriteLine("{0} {1}", reservation.ReservationNumber, reservation.NoOfTickets); PurchaseTicketResponse purchase = myService.PurchaseTicket(new PurchaseTicketRequest { ReservationId = reservation.ReservationNumber, EventId = reservation.EventId, }); Console.WriteLine("{0} {1}", purchase.Message ?? "OK", purchase.TicketId); Console.Read(); }
public TicketPresentation PurchaseReservedTicket(string EventId, string ReservationId) { TicketPresentation ticket = new TicketPresentation(); PurchaseTicketResponse response = new PurchaseTicketResponse(); PurchaseTicketRequest request = new PurchaseTicketRequest(); request.ReservationId = ReservationId; request.EventId = EventId; request.CorrelationId = ReservationId; // In this instance we can use the ReservationId response = _ticketService.PurchaseTicket(request); if (response.Success) { ticket.Description = String.Format("{0} ticket(s) purchased for {1}.<br/><small>Your e-ticket id is {2}.</small>", response.CountOfTickets, response.EventName, response.TicketId); ticket.EventId = response.EventId; ticket.TicketId = response.TicketId; ticket.WasAbleToPurchaseTicket = true; } else { ticket.WasAbleToPurchaseTicket = false; ticket.Description = response.Message; } return(ticket); }
public static PurchaseTicketResponse ConvertToPurchaseTicketResponse(this TicketPurchase ticketPurchase) { PurchaseTicketResponse response = new PurchaseTicketResponse(); response.TicketId = ticketPurchase.Id.ToString(); response.EventName = ticketPurchase.Event.Name; response.EventId = ticketPurchase.Event.Id.ToString(); response.NoOfTickets = ticketPurchase.TicketQuantity; return(response); }
/// <summary> /// 购票 /// </summary> /// <param name="PurchaseTicketRequest">购票请求</param> /// <returns></returns> 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 we can't be sure. //判断该请求在字典仓储中是否唯一 //1 即判断 if (_reservationResponse.IsAUniqueRequest(PurchaseTicketRequest.CorrelationId)) { TicketPurchase ticket; //找到指定的事件 Event my_event = _eventRepository.FindBy(new Guid(PurchaseTicketRequest.EventId)); //判断该票是否已经预定 if (my_event.CanPurchaseTicketWith(new Guid(PurchaseTicketRequest.ReservationId))) { //根据购票id购票 ticket = my_event.PurchaseTicketWith(new Guid(PurchaseTicketRequest.ReservationId)); //保存事件 _eventRepository.Save(my_event); response = ticket.ConvertToPurchaseTicketResponse(); response.Success = true; } else { response.Message = my_event.DetermineWhyATicketCannotbePurchasedWith(new Guid(PurchaseTicketRequest.ReservationId)); response.Success = false; } _reservationResponse.LogResponse(PurchaseTicketRequest.CorrelationId, response); } else { // Retrieve last response response = _reservationResponse.RetrievePreviousResponseFor(PurchaseTicketRequest.CorrelationId); } } catch (Exception ex) { // Shield Exceptions response.Message = ErrorLog.GenerateErrorRefMessageAndLog(ex); response.Success = false; } 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) { // Shield exceptions response.Message = ErrorLog.GenerateErrorRefMessageAndLog(ex); response.Success = false; } return(response); }
public DataContract.PurchaseTicketResponse PurchaseTicket(DataContract.PurchaseTicketRequest purchaseTicketRequest) { PurchaseTicketResponse response = new PurchaseTicketResponse(); try { if (_reservationResponse.IsUniqueRequest(purchaseTicketRequest.EventId)) { 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.DetermineWhyTicketCannotBePurchasedWith(new Guid(purchaseTicketRequest.ReservationId)); response.Success = false; } } else { response.Success = false; response.Message = String.Format("There is no reservation for {0}", purchaseTicketRequest.ReservationId); } } catch (Exception ex) { response.Message = ErrorLog.GenerateErrorRefMessageAndLog(ex); response.Success = false; } return(response); }
public PurchaseTicketResponse PurchaseTicket(PurchaseTicketRequest request) { PurchaseTicketResponse response = new PurchaseTicketResponse(); try { if (_messageResponse.IsUniqueRequest(request.CorrelationId)) { TicketPurchase ticketPurchase; Event eventEntity = _eventRepository.FindBy(new Guid(request.ReservationId)); if (eventEntity.CanPurchaseTicketWith(new Guid(request.ReservationId))) { ticketPurchase = eventEntity.PurchaseTicketWith(new Guid(request.ReservationId)); _eventRepository.Save(eventEntity); response = ticketPurchase.ConvertToPurchaseTicketResponse(); response.Success = true; } else { response.Message = eventEntity.DetermineWhyATicketCannotbePurchasedWith(new Guid(request.ReservationId)); response.Success = false; } _messageResponse.LogResponse(request.CorrelationId, response); } else { response = _messageResponse.RetrievePreviousResponseFor(request.CorrelationId); } } catch (Exception ex) { response.Success = false; response.Message = ErrorLog.GenerateErrorRefMessageAndLog(ex); } return(response); }