예제 #1
0
        /// <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());
        }
예제 #2
0
        /// <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));
        }
예제 #3
0
        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));
        }