Beispiel #1
0
        public async Task <ActionResult> PostDieselStationsRequestProxy([FromBody] DieselStationsRequestDto request)
        {
            // await _ds.Test(request.Detour, request.Waypoints);

            var c = _clientFactory.CreateClient();

            c.Timeout = new TimeSpan(1, 0, 0);
            var query = "/ds/" + request.Detour + "/" + request.Waypoints.Aggregate(new StringBuilder(), (q, point) => q.Append(point.Lat.ToString("N7") + ',' + point.Lng.ToString("N7") + '/'));

            query = query.Substring(0, query.Length - 1);
            GetFuelStationsDto[] res = null;
            try
            {
                var r = await c.GetAsync("http://fuel_stations:8000" + query);

                r.EnsureSuccessStatusCode();
                string fres = await r.Content.ReadAsStringAsync();

                res = JsonConvert.DeserializeObject <GetFuelStationsDto[]>(fres);
            }
            catch (Exception e)
            {
                return(BadRequest("Error in Fuel Stations: " + e.Message));
            }

            NewGetFuelStationsDto[] ress = new NewGetFuelStationsDto[res.Length];

            var addresses = (await _ds.GetAddresses(res.Select(g => new Coord {
                Lat = g.Coords.Lat, Lng = g.Coords.Lng
            }).ToList())).ToList();
            var costs     = await _db.GetFuelPricesForNetworkNameAsync();

            var options = new JsonSerializerSettings {
                ContractResolver = new DefaultContractResolver {
                    NamingStrategy = new CamelCaseNamingStrategy()
                }
            };

            for (int i = 0; i < res.Length; i++)
            {
                var address = addresses[i];
                var cc      = costs.FirstOrDefault(ccc => ccc.Country.Code == address.Address.Country);
                ress[i] = new NewGetFuelStationsDto
                {
                    Type    = res[i].Type,
                    Name    = res[i].Name,
                    Address = address.MatchLevel == "houseNumber" || (address.MatchLevel == "street" && !string.IsNullOrEmpty(address.Address.Street))
                        ? "\"" + JsonConvert.SerializeObject(address, options) + "\""
                        : null,
                    Coords              = res[i].Coords,
                    Junction0           = res[i].Junction0,
                    Junction1           = res[i].Junction1,
                    DistanceToNextPoint = res[i].DistanceToNextPoint,
                    Cost = cc is null ? 30 : cc.Price
                };
            }

            return(Ok(ress));
        }
Beispiel #2
0
 public async Task <ActionResult> PostDieselStationsRequest([FromBody] DieselStationsRequestDto request)
 {
     return(Ok(await _ds.GetDieselStationsAlongRouteAsync(request.Detour, request.Waypoints)));
 }