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); }
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)); }