Ejemplo n.º 1
0
        private async Task <string> GetDataFromApiEndpoint(CityInfoRequest cityInfoRequest)
        {
            var client = new HttpClient();

            var requestUri = _openWeatherSettings.Value.GetUriString(cityInfoRequest);

            var httpResponse = await client.GetAsync(requestUri);

            return(await httpResponse.Content.ReadAsStringAsync());
        }
Ejemplo n.º 2
0
        public async Task <string> GetCityInfo(CityInfoRequest cityInfoRequest)
        {
            var dbCityInfo = _context.CityInfos.Where(c => c.ZipCode == cityInfoRequest.ZipCode).FirstOrDefault();


            if (dbCityInfo == null || DateTime.UtcNow - dbCityInfo.UpdatedAt > new TimeSpan(0, 0, 10))
            {
                var temperatureApiResponse = await _cityTemperatureApiQuery.GetDataForCity(cityInfoRequest);

                var timezoneApiResponse = await _timezoneApiQuery.GetDataForCity(temperatureApiResponse);

                dbCityInfo = new Fest.Core.Models.CityInfo {
                    Id             = dbCityInfo == null ? dbCityInfo.Id : null,
                    Temperature    = temperatureApiResponse.Temperature,
                    CityName       = temperatureApiResponse.CityName,
                    ZipCode        = cityInfoRequest.ZipCode,
                    TimezoneName   = timezoneApiResponse.Name,
                    TimezoneOffset = timezoneApiResponse.Offset,
                    UpdatedAt      = DateTime.UtcNow,
                };

                if (dbCityInfo == null)
                {
                    _context.CityInfos.Add(dbCityInfo);
                }
                else
                {
                    _context.CityInfos.Update(dbCityInfo);
                }

                await _context.SaveChangesAsync();

                return
                    ($"At the location {temperatureApiResponse.CityName}, the temperature is {temperatureApiResponse.Temperature} degrees by Celsius, and the timezone is \"{timezoneApiResponse.Name}\"");
            }

            dbCityInfo.UpdatedAt = DateTime.UtcNow;

            await _context.SaveChangesAsync();

            return
                ($"At the location {dbCityInfo.CityName}, the temperature is {dbCityInfo.Temperature} degrees by Celsius, and the timezone is \"{dbCityInfo.CityName}\" (Data was cahced)");
        }
Ejemplo n.º 3
0
 public async Task <string> Get([FromQuery] CityInfoRequest cityInfoRequest)
 {
     return(await _cityInfoService.GetCityInfo(cityInfoRequest));
 }
 public string GetUriString(CityInfoRequest cityInfoRequest)
 {
     return(string.Format(URL, cityInfoRequest.ZipCode, cityInfoRequest.CountryCode, APIKey));
 }
Ejemplo n.º 5
0
        public async Task <TemperatureInfoResponse> GetDataForCity(CityInfoRequest cityInfoRequest)
        {
            var httpResponse = await GetDataFromApiEndpoint(cityInfoRequest);

            return(GetDataFromJsonResponse(httpResponse));
        }