diff --git a/ManagerService/Controllers/ConfigurationController.cs b/ManagerService/Controllers/ConfigurationController.cs index 9627306..02e3488 100644 --- a/ManagerService/Controllers/ConfigurationController.cs +++ b/ManagerService/Controllers/ConfigurationController.cs @@ -129,54 +129,62 @@ namespace ManagerService.Controllers List sectionIds = _sectionService.GetAllIdsFromConfiguration(id); - if (configuration.WeatherCity != null && configuration.WeatherCity.Length >= 2 && - (configuration.WeatherUpdatedDate == null || configuration.WeatherUpdatedDate.Value.AddHours(3) < DateTimeOffset.Now)) // Update all 4 hours + var weatherSections = _sectionService.GetAllWeatherSectionsFromConfiguration(id); + + foreach (var weatherSection in weatherSections) { - // Call Openweather api with token from appSettings and update result with json - var apiKey = _configuration.GetSection("OpenWeatherApiKey").Get(); - - if (apiKey != null && apiKey.Length > 0) + WeatherDTO weatherDTO = JsonConvert.DeserializeObject(weatherSection.Data); + if (weatherDTO.city != null && weatherDTO.city.Length >= 2 && + (weatherDTO.updatedDate == null || weatherDTO.updatedDate.Value.AddHours(3) < DateTimeOffset.Now)) // Update all 4 hours { - string url = $"http://api.openweathermap.org/geo/1.0/direct?q={configuration.WeatherCity}&limit=1&appid={apiKey}"; + // Call Openweather api with token from appSettings and update result with json + var apiKey = _configuration.GetSection("OpenWeatherApiKey").Get(); - using (HttpClient client = new HttpClient()) + if (apiKey != null && apiKey.Length > 0) { - try + string url = $"http://api.openweathermap.org/geo/1.0/direct?q={weatherDTO.city}&limit=1&appid={apiKey}"; + + using (HttpClient client = new HttpClient()) { - HttpResponseMessage response = await client.GetAsync(url); - response.EnsureSuccessStatusCode(); - string responseBody = await response.Content.ReadAsStringAsync(); - - List cities = JsonConvert.DeserializeObject>(responseBody); - - if (cities.Count > 0) + try { - double lat = cities[0].Lat; - double lon = cities[0].Lon; + HttpResponseMessage response = await client.GetAsync(url); + response.EnsureSuccessStatusCode(); + string responseBody = await response.Content.ReadAsStringAsync(); - //string onecallUrl = $"https://api.openweathermap.org/data/3.0/onecall?lat={lat}&lon={lon}&appid={apiKey}"; - string callUrl = $"https://api.openweathermap.org/data/2.5/forecast?lat={lat}&lon={lon}&units=metric&appid={apiKey}"; + List cities = JsonConvert.DeserializeObject>(responseBody); - HttpResponseMessage callResponse = await client.GetAsync(callUrl); - callResponse.EnsureSuccessStatusCode(); - string callResponseBody = await callResponse.Content.ReadAsStringAsync(); + if (cities.Count > 0) + { + double lat = cities[0].Lat; + double lon = cities[0].Lon; - configuration.WeatherUpdatedDate = DateTimeOffset.Now; - configuration.WeatherResult = callResponseBody; + //string onecallUrl = $"https://api.openweathermap.org/data/3.0/onecall?lat={lat}&lon={lon}&appid={apiKey}"; + string callUrl = $"https://api.openweathermap.org/data/2.5/forecast?lat={lat}&lon={lon}&units=metric&appid={apiKey}"; - _configurationService.Update(configuration.Id, configuration); + HttpResponseMessage callResponse = await client.GetAsync(callUrl); + callResponse.EnsureSuccessStatusCode(); + string callResponseBody = await callResponse.Content.ReadAsStringAsync(); + + weatherDTO.updatedDate = DateTimeOffset.Now; + weatherDTO.result = callResponseBody; + weatherSection.Data = JsonConvert.SerializeObject(weatherDTO); + + _sectionService.Update(weatherSection.Id, weatherSection); + } + else + { + Console.WriteLine("Aucune ville trouvée."); + } } - else + catch (HttpRequestException e) { - Console.WriteLine("Aucune ville trouvée."); + Console.WriteLine($"Une erreur s'est produite lors de la requête HTTP : {e.Message}"); } } - catch (HttpRequestException e) - { - Console.WriteLine($"Une erreur s'est produite lors de la requête HTTP : {e.Message}"); - } } } + } return new OkObjectResult(configuration.ToDTO(sectionIds)); diff --git a/ManagerService/Services/SectionDatabaseService.cs b/ManagerService/Services/SectionDatabaseService.cs index 807d3e6..8c53c63 100644 --- a/ManagerService/Services/SectionDatabaseService.cs +++ b/ManagerService/Services/SectionDatabaseService.cs @@ -39,6 +39,11 @@ namespace Manager.Services return _Sections.Find(s => !s.IsSubSection && s.ConfigurationId == configurationId).ToList().Select(s => s.Id).ToList(); } + public List
GetAllWeatherSectionsFromConfiguration(string configurationId) + { + return _Sections.Find(s => s.ConfigurationId == configurationId && s.Type == SectionType.Weather).ToList(); + } + public List
GetAllSubSection(string parentId) { return _Sections.Find(s => s.IsSubSection && s.ParentId == parentId).ToList();