/// <summary> /// Sustituye los placeholders marcados entre corchetes "{" "}" especificados en el fichero "appsettings.json" /// en el apartado "Covid19Api" por los datos filtrados en la vista-modelo recogidas en el formulario de búsqueda /// </summary> /// <param name="dayOneViewModel">La vista-modelo que contienen las opciones seleccionadas en el /// formulario de búsqueda</param> /// <returns>La URL de la API "dayone/country/status" con los parámetros de búsqueda sustituídos</returns> public string ExtractPlaceholderUrlApi(DayOneViewModel dayOneViewModel) { string dayOneApiUrl = GetAppSettingsUrlApiByKey(AppSettingsConfig.DAYONE_KEY); dayOneViewModel.Country ??= "Spain"; dayOneViewModel.StatusType ??= "confirmed"; return(new StringBuilder(dayOneApiUrl) .Replace(AppSettingsConfig.COUNTRYNAME_PLACEHOLDER, dayOneViewModel.Country) .Replace(AppSettingsConfig.STATUS_PLACEHOLDER, dayOneViewModel.StatusType) .ToString()); }
/// <summary> /// Aplica el filtro de búsqueda para los casos de un país desde el /// primer caso de COVID conocido /// </summary> /// <param name="dayOneByCountryList">La lista de países</param> /// <param name="dayOneViewModel">La vista-modelo que contienen las opciones seleccionadas en el formulario de búsqueda</param> /// <returns>Lista con el país desde el primer caso de COVID, ordenadas de fechas más recientes a más antiguas</returns> public IEnumerable <DayOne> ApplySearchFilter(IEnumerable <DayOne> dayOneByCountryList, DayOneViewModel dayOneViewModel) { if (dayOneViewModel.Country == null) { return(dayOneByCountryList.OrderByDescending(bc => bc.Date.Date)); } return(dayOneByCountryList .Where(day => day.Country.Equals(dayOneViewModel.Country) && day.Status.Equals(dayOneViewModel.StatusType)) .OrderByDescending(day => day.Date.Date)); }
public async Task <ActionResult <IEnumerable <DayOne> > > GetDayOneByCountry(DayOneViewModel dayOneViewModel) { if (ModelState.IsValid) { dayOneCacheKey = $"{dayOneCacheKey}_{dayOneViewModel.Country}_{dayOneViewModel.StatusType}"; if (!_cache.Get(dayOneCacheKey, out DayOneViewModel dayOneVM)) { dayOneVM = await GetCountriesViewModel <DayOneViewModel>(); string dayOneUrl = ExtractPlaceholderUrlApi(dayOneVM); var dayOneList = await _apiService.GetAsync <IEnumerable <DayOne> >(dayOneUrl); dayOneVM.DayOne = ApplySearchFilter(dayOneList, dayOneVM); _cache.Set(dayOneCacheKey, dayOneVM); } dayOneViewModel = dayOneVM; } return(View("Index", dayOneViewModel)); }