public ReserveTicketResponse ReserveTicket(ReserveTicketRequest request)
        {
            ReserveTicketResponse response = new ReserveTicketResponse();

            try
            {
                Event Event = _eventRepository.FindBy(new Guid(request.EventId));

                TicketReservation reservation;

                if (Event.CanReserveTicket(request.TicketQuantity))
                {
                    reservation = Event.ReserveTicket(request.TicketQuantity);

                    _eventRepository.Save(Event);

                    response = reservation.ConvertToReserveTicketResponse();
                    response.Success = true;
                }
                else
                {
                    response.Success = false;
                    response.Message = string.Format("There are {0} tickets available.", Event.AvailableAllocation());

                }
            }
             catch (Exception ex)
            {
            // Shield exceptions
            response.Message = ErrorLog.GenerateErrorRefMessageAndLog(ex);
            response.Success = false;
            }
            return response;
        }
 public static ReserveTicketResponse ConvertToReserveTicketResponse(this TicketReservation ticketReservation)
 {
     ReserveTicketResponse response = new ReserveTicketResponse();
     response.EventId = ticketReservation.Event.Id.ToString();
     response.EventName = ticketReservation.Event.Name;
     response.NoOfTickets = ticketReservation.TicketQuantity;
     response.ExpirationDate = ticketReservation.ExpiryTime;
     response.ReservationNumber = ticketReservation.Id.ToString();
     return response;
 }