示例#1
0
        public async Task <ActionResult <IEnumerable <LiveByCountryAndStatusAfterDate> > > GetLiveByCountryAndStatusAfterDate(
            LiveByCountryAndStatusAfterDateViewModel byCountryStatusAfterDateViewModel)
        {
            if (ModelState.IsValid)
            {
                byCountryStatusAfterDateCacheKey = $"{byCountryStatusAfterDateCacheKey}_{byCountryStatusAfterDateViewModel.Country}_{byCountryStatusAfterDateViewModel.StatusType}_{byCountryStatusAfterDateViewModel.Date.ToShortDateString()}";
                if (!_cache.Get(byCountryStatusAfterDateCacheKey, out LiveByCountryAndStatusAfterDateViewModel byCountryStatusAfterDateVM))
                {
                    byCountryStatusAfterDateVM = await GetCountriesViewModel <LiveByCountryAndStatusAfterDateViewModel>();

                    string byCountryStatusAfterDateUrl = ExtractPlaceholderUrlApi(byCountryStatusAfterDateVM);

                    var byCountryStatusAfterDateUrlList =
                        await _apiService.GetAsync <IEnumerable <LiveByCountryAndStatusAfterDate> >(byCountryStatusAfterDateUrl);

                    byCountryStatusAfterDateVM.LiveByCountryAndStatusAfterDate =
                        ApplySearchFilter(byCountryStatusAfterDateUrlList, byCountryStatusAfterDateVM);

                    _cache.Set(byCountryStatusAfterDateCacheKey, byCountryStatusAfterDateVM);
                }

                byCountryStatusAfterDateViewModel = byCountryStatusAfterDateVM;
            }

            return(View("Index", byCountryStatusAfterDateViewModel));
        }
示例#2
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="byCountryStatusAfterDateViewModel">La vista-modelo que contienen las opciones seleccionadas en el
        /// formulario de búsqueda</param>
        /// <returns>La URL de la API "live/country/status/date" con los parámetros de búsqueda sustituídos</returns>
        private string ExtractPlaceholderUrlApi(LiveByCountryAndStatusAfterDateViewModel byCountryStatusAfterDateViewModel)
        {
            string byCountryStatusAfterDateApiUrl = GetAppSettingsUrlApiByKey(AppSettingsConfig.LIVE_BY_CONTRY_AND_STATUS_AFTERDATE_KEY);

            byCountryStatusAfterDateViewModel.Country ??= "Spain";
            byCountryStatusAfterDateViewModel.StatusType ??= "confirmed";

            return(new StringBuilder(byCountryStatusAfterDateApiUrl)
                   .Replace(AppSettingsConfig.COUNTRYNAME_PLACEHOLDER, byCountryStatusAfterDateViewModel.Country)
                   .Replace(AppSettingsConfig.STATUS_PLACEHOLDER, byCountryStatusAfterDateViewModel.StatusType)
                   .Replace(AppSettingsConfig.DATE_PLACEHOLDER, byCountryStatusAfterDateViewModel.Date.ToString("yyyy-MM-ddThh:mm:ssZ"))
                   .ToString());
        }
示例#3
0
        /// <summary>
        ///     Aplica el filtro de búsqueda para los datos en directo de los países y sus estados
        ///     después de una fecha dada
        /// </summary>
        /// <param name="byCountryStatusAfterDateUrlList">La lista de países</param>
        /// <param name="byCountryStatusAfterDateViewModel">La vista-modelo que contienen las opciones seleccionadas en el formulario de búsqueda</param>
        /// <returns>Lista con los datos en directo de los países y sus estados después de una fecha dada,
        /// ordenadas de fechas más recientes a más antiguas</returns>
        private IEnumerable <LiveByCountryAndStatusAfterDate> ApplySearchFilter
            (IEnumerable <LiveByCountryAndStatusAfterDate> byCountryStatusAfterDateUrlList,
            LiveByCountryAndStatusAfterDateViewModel byCountryStatusAfterDateViewModel)
        {
            if (byCountryStatusAfterDateViewModel.Country == null)
            {
                return(byCountryStatusAfterDateUrlList.OrderByDescending(bc => bc.Date.Date));
            }

            return(byCountryStatusAfterDateUrlList
                   .Where(live => live.Country.Equals(byCountryStatusAfterDateViewModel.Country))
                   .OrderByDescending(live => live.Date.Date));
        }