Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        private Task <double> CalculateSavingAsync(TomTomResult responseData)
        {
            var saving = responseData.Distance / 1000.0 * 0.270;

            return(Task.FromResult(saving));
        }