/// <inheritdoc />
        public List <CountryTerritorialUnit> GetCanadaProvinces()
        {
            var parameters = new ExecuteApiRequestParameters
            {
                Endpoint     = $"v{ApiVersion}/countries/canada/provinces",
                Method       = RequestMethod.Get,
                Deserializer = new JsonResponseToTerritorialUnitsDeserializer(),
            };
            var result = Executor.ExecuteApiWithWrappedResponse <List <CountryTerritorialUnit> >(parameters);

            return(result.DataOrException);
        }
        /// <inheritdoc />
        public Models.Payment CreateNewPayment(CreatePaymentRequest paymentRequest)
        {
            TriggerAutomaticAuthentication();
            var parameters = new ExecuteApiRequestParameters
            {
                Endpoint = $"v{ApiVersion}/payments",
                Method   = RequestMethod.Post,
                Body     = paymentRequest,
            };
            var result = Executor.ExecuteApiWithWrappedResponse <Models.Payment>(parameters);

            return(result.DataOrException);
        }
        /// <inheritdoc />
        public Models.Basket UpsertBasket(UpsertBasketParameters basketParameters)
        {
            ThrowArgumentExceptionIfBasketDetailsNotSet(basketParameters);
            var parameters = new ExecuteApiRequestParameters
            {
                Endpoint = $"v{ApiVersion}/baskets",
                Method   = RequestMethod.Patch,
                Body     = basketParameters,
            };
            var response = Executor.ExecuteApiWithWrappedResponse <Models.Basket>(parameters);

            return(response.DataOrException);
        }
        /// <inheritdoc />
        public IList <MonthlyPriceRange> GetMonthlyPriceRanges(string productId, int quantity, DateTime fromDate, DateTime toDate)
        {
            ThrowArgumentExceptionIfProductIdNotSet(productId);
            var parameters = new ExecuteApiRequestParameters
            {
                Endpoint = $"v{ApiVersion}/pricing/months/products/{productId}/quantity/{quantity}" +
                           $"/from/{fromDate.ToEncoreDate()}/to/{toDate.ToEncoreDate()}",
                Method = RequestMethod.Get,
            };
            var result = Executor.ExecuteApiWithWrappedResponse <IList <MonthlyPriceRange> >(parameters);

            return(result.DataOrException);
        }
        /// <inheritdoc />
        public IList <Product> GetProducts(GetProductsParameters requestParameters = null)
        {
            requestParameters = requestParameters ?? new GetProductsParameters();
            var parameters = new ExecuteApiRequestParameters
            {
                Endpoint = $"v{ApiVersion}/products",
                Method   = RequestMethod.Get,
                Query    = requestParameters,
            };
            var result = Executor.ExecuteApiWithWrappedResponse <List <Product> >(parameters);

            return(result.DataOrException);
        }
        /// <inheritdoc />
        public ResponseForPage <ExchangeRate> GetExchangeRates(ExchangeRatesParameters ratesParameters)
        {
            TriggerAutomaticAuthentication();
            var parameters = new ExecuteApiRequestParameters
            {
                Endpoint   = $"v{ApiVersion}/admin/exchange_rates",
                Method     = RequestMethod.Get,
                Query      = ratesParameters,
                DateFormat = DateFormat,
            };
            var result = Executor.ExecuteApiWithWrappedResponse <ResponseForPage <ExchangeRate> >(parameters);

            return(result.DataOrException);
        }
        /// <inheritdoc />
        public IList <PriceBand> GetPriceBands(string productId, int quantity, DateTime?performanceDateTime = null)
        {
            ThrowArgumentExceptionIfProductIdNotSet(productId);
            var queryParameters = new PriceBandsQueryParameters(performanceDateTime);
            var parameters      = new ExecuteApiRequestParameters
            {
                Endpoint = $"v{ApiVersion}/pricing/products/{productId}/quantity/{quantity}/bands",
                Method   = RequestMethod.Get,
                Query    = queryParameters,
            };
            var result = Executor.ExecuteApiWithWrappedResponse <IList <PriceBand> >(parameters);

            return(result.DataOrException);
        }
        /// <inheritdoc />
        public Order CreateOrder(CreateOrderRequest orderRequest)
        {
            TriggerAutomaticAuthentication();
            var parameters = new ExecuteApiRequestParameters
            {
                Endpoint     = $"v{ApiVersion}/orders",
                Method       = RequestMethod.Post,
                Body         = orderRequest,
                Deserializer = new JsonResponseToOrderDeserializer(),
            };
            var result = Executor.ExecuteApiWithWrappedResponse <Order>(parameters);

            return(result.DataOrException);
        }
        /// <inheritdoc />
        public Models.Basket RemoveReservation(string basketReference, string reservationId)
        {
            ValidationHelper.ThrowArgumentExceptionIfNotSet(
                ("basket ID", basketReference),
                ("reservation ID", reservationId));
            var parameters = new ExecuteApiRequestParameters
            {
                Endpoint = $"v{ApiVersion}/baskets/{basketReference}/reservations/{reservationId}",
                Method   = RequestMethod.Delete,
            };
            var response = Executor.ExecuteApiWithWrappedResponse <Models.Basket>(parameters);

            return(response.DataOrException);
        }
Example #10
0
        /// <inheritdoc />
        public Models.Basket UpsertPromotion(string basketReference, Coupon coupon)
        {
            ThrowArgumentExceptionIfBasketReferenceNotSet(basketReference);
            var parameters = new ExecuteApiRequestParameters
            {
                Endpoint = $"v{ApiVersion}/baskets/{basketReference}/applyPromotion",
                Method   = RequestMethod.Patch,
                Body     = new ApplyPromotionRequest {
                    Coupon = coupon
                },
            };
            var result = Executor.ExecuteApiWithWrappedResponse <Models.Basket>(parameters);

            return(GetUpsertPromotionResult(result, coupon, basketReference));
        }
        /// <inheritdoc />
        public AvailabilityRange GetAvailabilityRange(string productId)
        {
            if (string.IsNullOrWhiteSpace(productId))
            {
                throw new ArgumentException("Product ID must be set");
            }

            var parameters = new ExecuteApiRequestParameters
            {
                Endpoint = $"v{ApiVersion}/products/{productId}/availability-range",
                Method   = RequestMethod.Get,
            };
            var result = Executor.ExecuteApiWithWrappedResponse <AvailabilityRange>(parameters);

            return(result.DataOrException);
        }
Example #12
0
        private AccessToken JwtLogin()
        {
            var requestParameters = new ExecuteApiRequestParameters
            {
                Endpoint = Endpoint,
                Method   = RequestMethod.Post,
                Body     = new Credentials
                {
                    Username = Context.UserName ?? string.Empty,
                    Password = Context.Password ?? string.Empty,
                },
            };
            var result = Executor.ExecuteApiWithNotWrappedResponse <AccessToken>(requestParameters);

            return(result.DataOrException);
        }
Example #13
0
        /// <inheritdoc/>
        public IList <SeatDetailed> GetSeatAttributes(string venueId)
        {
            if (string.IsNullOrEmpty(venueId))
            {
                throw new ArgumentException("venue ID must be set");
            }

            var parameters = new ExecuteApiRequestParameters
            {
                Endpoint = $"v{ApiVersion}/venues/{venueId}/seats/attributes/detailed",
                Method   = RequestMethod.Get,
            };
            var result = Executor.ExecuteApiWithWrappedResponse <List <SeatDetailed> >(parameters);

            return(result.DataOrException);
        }
        /// <inheritdoc />
        public IList <Availability> GetAvailabilities(string productId, int quantity, DateTime from, DateTime to)
        {
            if (string.IsNullOrWhiteSpace(productId))
            {
                throw new ArgumentException("Product ID must be set");
            }

            var requestParameters = new ExecuteApiRequestParameters
            {
                Endpoint = $"v{ApiVersion}/availability/products/{productId}/quantity/{quantity}/from/{from.ToEncoreDate()}/to/{to.ToEncoreDate()}",
                Method   = RequestMethod.Get,
            };
            var result = Executor.ExecuteApiWithWrappedResponse <List <Availability> >(requestParameters);

            return(result.DataOrException);
        }
        /// <inheritdoc />
        public Product GetProductById(string id)
        {
            if (string.IsNullOrEmpty(id))
            {
                throw new ArgumentException("product ID must be set");
            }

            var parameters = new ExecuteApiRequestParameters
            {
                Endpoint = $"v{ApiVersion}/products/{id}",
                Method   = RequestMethod.Get,
            };
            var result = Executor.ExecuteApiWithWrappedResponse <Product>(parameters);

            return(result.DataOrException);
        }
Example #16
0
        /// <inheritdoc/>
        public Models.Venue GetVenueById(string id)
        {
            if (string.IsNullOrEmpty(id))
            {
                throw new ArgumentException("venue ID must be set");
            }

            var parameters = new ExecuteApiRequestParameters
            {
                Endpoint = $"v{ApiVersion}/venues/{id}",
                Method   = RequestMethod.Get,
            };
            var result = Executor.ExecuteApiWithWrappedResponse <Models.Venue>(parameters);

            return(result.DataOrException);
        }
        public SeatAvailability GetSeatAvailability(string productId, int quantity, SeatAvailabilityParameters parameters)
        {
            if (string.IsNullOrWhiteSpace(productId))
            {
                throw new ArgumentException("Product ID must be set");
            }

            var requestParameters = new ExecuteApiRequestParameters
            {
                Endpoint = $"v{ApiVersion}/europa/availability/products/{productId}/quantity/{quantity}/seats",
                Method   = RequestMethod.Get,
                Query    = new SeatAvailabilityQueryParameters(parameters),
            };
            var result = Executor.ExecuteApiWithWrappedResponse <SeatAvailability>(requestParameters);

            return(result.DataOrException);
        }
        /// <inheritdoc />
        public PaymentInfo Checkout(BookingParameters bookingParameters)
        {
            if (bookingParameters == null)
            {
                throw new ArgumentException("booking parameters must be set");
            }

            var requestParameters = new ExecuteApiRequestParameters
            {
                Endpoint   = $"v{ApiVersion}/checkout",
                Method     = RequestMethod.Post,
                Body       = new BookingQueryParameters(bookingParameters),
                Serializer = new DefaultJsonSerializer(new DefaultNamingStrategy()),
            };
            var result = Executor.ExecuteApiWithWrappedResponse <PaymentInfo>(requestParameters);

            return(result.DataOrException);
        }
Example #19
0
        /// <inheritdoc/>
        public Models.Venue UpdateVenueById(Models.Venue venue)
        {
            if (string.IsNullOrEmpty(venue?.InternalId))
            {
                throw new ArgumentException("venue ID must be set");
            }

            TriggerAutomaticAuthentication();
            var parameters = new ExecuteApiRequestParameters
            {
                Endpoint = $"v{ApiVersion}/admin/venues/{venue.InternalId}",
                Method   = RequestMethod.Post,
                Body     = venue,
            };
            var result = Executor.ExecuteApiWithWrappedResponse <Models.Venue>(parameters);

            return(result.DataOrException);
        }
Example #20
0
        /// <inheritdoc/>
        public Attribute UpsertStandardAttributeByTitle(Attribute attribute)
        {
            if (string.IsNullOrEmpty(attribute?.Title))
            {
                throw new ArgumentException("attribute title must be set");
            }

            TriggerAutomaticAuthentication();
            var parameters = new ExecuteApiRequestParameters
            {
                Endpoint = $"v{ApiVersion}/admin/attributes",
                Method   = RequestMethod.Patch,
                Body     = attribute,
            };
            var result = Executor.ExecuteApiWithWrappedResponse <Attribute>(parameters);

            return(result.DataOrException);
        }
        /// <inheritdoc />
        public Order UpdateOrder(string orderId, UpdateOrderRequest orderRequest)
        {
            if (string.IsNullOrWhiteSpace(orderId))
            {
                throw new ArgumentException("order ID must be set");
            }

            TriggerAutomaticAuthentication();
            var parameters = new ExecuteApiRequestParameters
            {
                Endpoint     = $"v{ApiVersion}/orders/{orderId}",
                Method       = RequestMethod.Patch,
                Body         = orderRequest,
                Deserializer = new JsonResponseToOrderDeserializer(),
            };
            var result = Executor.ExecuteApiWithWrappedResponse <Order>(parameters);

            return(result.DataOrException);
        }
        /// <inheritdoc />
        public IList <Product> SearchProducts(string text)
        {
            if (string.IsNullOrWhiteSpace(text))
            {
                throw new ArgumentException("search text must be set");
            }

            var requestParameters = new ExecuteApiRequestParameters
            {
                Endpoint = $"v{ApiVersion}/search",
                Method   = RequestMethod.Get,
                Query    = new
                {
                    query = text,
                },
            };
            var result = Executor.ExecuteApiWithWrappedResponse <List <Product>, ProductSearchResponse, ProductSearchResponseContent>(requestParameters);

            return(result.DataOrException);
        }
        /// <inheritdoc />
        public bool ConfirmBooking(string bookingReference, ConfirmBookingParameters bookingParameters)
        {
            if (string.IsNullOrWhiteSpace(bookingReference))
            {
                throw new ArgumentException("booking reference must not be empty");
            }

            if (bookingParameters == null)
            {
                throw new ArgumentException("parameters must be set");
            }

            var requestParameters = new ExecuteApiRequestParameters
            {
                Endpoint = $"v{ApiVersion}/bookings/{bookingReference}/confirm",
                Method   = RequestMethod.Post,
                Body     = bookingParameters,
            };
            var result = Executor.ExecuteApiWithWrappedResultsInResponse <string>(requestParameters);

            return(result.DataOrException.Equals(ActionResultStatuses.Success, StringComparison.InvariantCultureIgnoreCase));
        }
        /// <inheritdoc />
        public Order GetOrder(string channelId, string externalId)
        {
            if (string.IsNullOrWhiteSpace(channelId))
            {
                throw new ArgumentException("channel ID must be set");
            }

            if (string.IsNullOrWhiteSpace(externalId))
            {
                throw new ArgumentException("order external ID must be set");
            }

            var parameters = new ExecuteApiRequestParameters
            {
                Endpoint     = $"v{ApiVersion}/orders/{channelId}/{externalId}",
                Method       = RequestMethod.Get,
                Deserializer = new JsonResponseToOrderDeserializer(),
            };
            var result = Executor.ExecuteApiWithWrappedResponse <Order>(parameters);

            return(result.DataOrException);
        }
        /// <inheritdoc />
        public AggregateSeatAvailability GetAggregateSeatAvailability(string productId, AggregateSeatAvailabilityParameters parameters)
        {
            if (string.IsNullOrWhiteSpace(productId))
            {
                throw new ArgumentException("Product ID must be set");
            }

            if (parameters == null)
            {
                throw new ArgumentException("Parameters must be set");
            }

            var requestParameters = new ExecuteApiRequestParameters
            {
                Endpoint = $"v{ApiVersion}/products/{productId}/areas",
                Method   = RequestMethod.Get,
                Query    = new AggregateSeatAvailabilityQueryParameters(parameters),
            };
            var result = Executor.ExecuteApiWithWrappedResponse <AggregateSeatAvailability>(requestParameters);

            return(result.DataOrException);
        }
Example #26
0
        /// <inheritdoc/>
        public RestClientParameters CreateClientWrapperParameters(
            ApiContext context,
            string baseUrl,
            ExecuteApiRequestParameters requestParameters)
        {
            var serializer   = GetInitializedSerializer(requestParameters.Serializer, requestParameters.DateFormat);
            var deserializer = GetInitializedSerializer(requestParameters.Deserializer, requestParameters.DateFormat);

            return(new RestClientParameters
            {
                BaseUrl = baseUrl,
                RequestUrl = requestParameters.Endpoint,
                RequestMethod = requestParameters.Method,
                RequestBody = requestParameters.Body,
                RequestHeaders = GetHeaders(context),
                RequestQueryParameters = GetQueryParameters(requestParameters.Query),
                RequestDataFormat = serializer.SerializedDataFormat,
                RequestDataSerializer = serializer,
                ResponseDataFormat = deserializer.SerializedDataFormat,
                ResponseDataDeserializer = deserializer,
            });
        }
Example #27
0
        /// <inheritdoc/>
        public bool UpsertSeatAttributes(string venueId, IEnumerable <SeatDetailed> seatAttributes)
        {
            if (string.IsNullOrEmpty(venueId))
            {
                throw new ArgumentException("venue ID must be set");
            }

            TriggerAutomaticAuthentication();
            var parameters = new ExecuteApiRequestParameters
            {
                Endpoint = $"v{ApiVersion}/admin/venues/{venueId}/seats/attributes",
                Method   = RequestMethod.Patch,
                Body     = new SeatAttributesRequest
                {
                    Seats = seatAttributes ?? new List <SeatDetailed>(),
                },
                DateFormat   = "yyyy-MM-dd",
                Deserializer = new DefaultJsonSerializer(new[] { new SingleOrListToListConverter <string>() }),
            };
            var result = Executor.ExecuteApiWithWrappedResponse <List <string> >(parameters);

            return(result.DataOrException?.Any(x =>
                                               x.Equals(ActionResultStatuses.Success, StringComparison.InvariantCultureIgnoreCase)) ?? false);
        }
        public void CreateClientWrapperParameters_ReturnsParametersWithInitializedBaseProperties(ExecuteApiRequestParameters parameters)
        {
            var builder = new ApiRestClientBuilder();

            var actual = builder.CreateClientWrapperParameters(It.IsAny <ApiContext>(), It.IsAny <string>(), parameters);

            Assert.AreEqual(parameters.Endpoint, actual.RequestUrl);
            Assert.AreEqual(parameters.Method, actual.RequestMethod);
            Assert.AreEqual(parameters.Body, actual.RequestBody);
        }