Esempio n. 1
0
        public async Task <JObject> GetCinemas(
            string city,
            string searchTerm,
            int distance,
            int limit,
            GetCinemasDynamicQuery dynamicQuery,
            CancellationToken cancellationToken)
        {
            if (string.IsNullOrEmpty(city?.Trim()))
            {
                throw new ArgumentNullException(nameof(city));
            }

            if (distance <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(distance),
                                                      $"{nameof(distance)} needs to be bigger than 0");
            }

            if (limit <= 0)
            {
                throw new ArgumentOutOfRangeException(nameof(limit),
                                                      $"{nameof(limit)} needs to be bigger than 0");
            }

            var query    = new GetCinemasQuery(searchTerm, city, distance, limit, dynamicQuery);
            var request  = BuildRestRequest(query.BuildRequest());
            var client   = CreateClient();
            var response = await client.ExecutePostTaskAsync <GraphQLResponse>(request, cancellationToken).ConfigureAwait(false);

            return(response?.Data?.Data);
        }
Esempio n. 2
0
 public GetCinemasQuery(string searchTerm, string city, int distance, int limit, GetCinemasDynamicQuery dynamicQuery)
 {
     m_searchTerm   = searchTerm;
     m_city         = city;
     m_distance     = distance;
     m_limit        = limit;
     m_dynamicQuery = dynamicQuery;
 }
        private static IEnumerable <Cinema> FilterByDistance(
            IEnumerable <Cinema> cinemas,
            GetCinemasDynamicQuery dynamicQuery)
        {
            if (dynamicQuery != GetCinemasDynamicQuery.Full)
            {
                return(cinemas);
            }

            // Hack:
            // The api is returning random cinemas with distance = null,
            // when searching for a non-existing city
            return(cinemas.Where(p => p.Distance.HasValue));
        }
        public async Task <IEnumerable <Cinema> > GetCinemas(
            string city,
            string searchTerm = "",
            int distance      = 15,
            int limit         = 5,
            GetCinemasDynamicQuery dynamicQuery = GetCinemasDynamicQuery.Full,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            var jsonResult = await m_client.GetCinemas(city, searchTerm, distance, limit, dynamicQuery, cancellationToken).ConfigureAwait(false);

            if (jsonResult == null)
            {
                return(new Cinema[0]);
            }

            var cinemas = m_jsonWorker.ConvertToCinemas(jsonResult);

            return(FilterByDistance(cinemas, dynamicQuery));
        }