Example #1
0
        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();
        }
Example #2
0
        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);
        }
Example #3
0
        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);
        }
Example #5
0
        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);
        }
Example #6
0
        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);
        }
Example #7
0
        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);
        }