private Task <TomTomResult> FindClosestStoreLocationAsync(IEnumerable <AlternativeVendor> vendors, ShoppingRequestData data) { TomTomResult bestResult = null; foreach (var vendor in vendors) { // Call TomTom API var baseUrl = $"https://api.tomtom.com/search/2/search/{vendor.Name}.json?key={TomtomApiKey}"; var parameters = new Dictionary <string, string>() { { "typeahead", "false" }, { "countrySet", "DE" }, { "lat", data.Lat.ToString() }, { "lon", data.Lng.ToString() }, { "radius", "3000" }, { "idxSet", "POI" } }; var url = baseUrl + "&" + string.Join('&', parameters.Select(pair => $"{pair.Key}={pair.Value}")); // Get response var client = new RestClient(url); var response = client.Execute(new RestRequest()); dynamic result = JsonConvert.DeserializeObject(response.Content); // Process response if (result.summary.numResults == 0) { continue; } var closest = result.results[0]; var distance = double.Parse(closest.dist.ToString()); if (bestResult != null && distance > bestResult.Distance) { continue; } // prepare result bestResult = new TomTomResult() { Distance = distance, Address = closest.address.streetName + " " + closest.address.streetNumber + ", " + closest.address.municipality, Vendor = closest.poi.name, Vendor_logo = "https://www.guenstiger.de/haendlerlogo/" + vendor.Id, Lat = closest.position.lat, Lng = closest.position.lon, Method = distance < 600 ? "Walking" : "Biking", LocationUrl = $"https://www.google.com/maps/search/?api=1&query={closest.position.lat},{closest.position.lon}" }; } if (bestResult == null) { throw new AlternativeNotFoundException(); } return(Task.FromResult(bestResult)); }
private Task <double> CalculateSavingAsync(TomTomResult responseData) { var saving = responseData.Distance / 1000.0 * 0.270; return(Task.FromResult(saving)); }