public List <CovidGlobalCaseCountDADto> FetchGlobalCasesFromAPI(Metrics metrics, Locations location)
        {
            WebRequest request = WebRequest.Create(configuration.GetSection("AppSettings")["covidConfirmedCasesAPI"]);

            if (metrics == Metrics.DEATHS)
            {
                request = WebRequest.Create(configuration.GetSection("AppSettings")["covidDeathsAPI"]);
            }
            else if (metrics == Metrics.RECOVERIES)
            {
                request = WebRequest.Create(configuration.GetSection("AppSettings")["covidRecoveriesAPI"]);
            }
            request.Method = "GET";
            WebResponse  response     = request.GetResponse();
            Stream       dataStream   = response.GetResponseStream();
            StreamReader readerStream = new StreamReader(dataStream);

            Console.WriteLine(((HttpWebResponse)response).StatusDescription);
            string responseFromServer = readerStream.ReadToEnd();

            //Console.WriteLine(responseFromServer);
            response.Close();

            TextReader reader    = new StringReader(responseFromServer);
            CsvReader  csvReader = new CsvReader(reader, CultureInfo.InvariantCulture);
            dynamic    records   = csvReader.GetRecords <dynamic>();
            List <CovidGlobalCaseCountBLDto> bALCaseCountRecords = new List <CovidGlobalCaseCountBLDto>();
            Date latestDate = covidDataRepository.GetLastUpdateDate(metrics.ToDALMetrics(), location.ToDALocations()).Date;
            //IDictionary<string, object> caseCounts = new IDictionary;
            string csvRecordCompositeKey = "";
            int    counterKeys           = 0;

            foreach (var rec in records)
            {
                counterKeys           = 0;
                csvRecordCompositeKey = "";
                foreach (KeyValuePair <string, object> count in rec)
                {
                    if (count.Key == "Province/State" || count.Key == "Country/Region" || count.Key == "Lat" || count.Key == "Long")
                    {
                        csvRecordCompositeKey += (string)count.Value == "" ?  "Null" + "_" : count.Value + "_";
                    }
                    if (counterKeys > 3)
                    {
                        if (DateTime.Compare(DateTime.ParseExact(count.Key, "M/d/yy", System.Globalization.CultureInfo.InvariantCulture), latestDate) > 0)
                        {
                            CovidGlobalCaseCountBLDto caseRecord = new CovidGlobalCaseCountBLDto();
                            caseRecord.Date           = DateTime.ParseExact(count.Key, "M/d/yy", System.Globalization.CultureInfo.InvariantCulture);
                            caseRecord.Count          = Convert.ToInt32(count.Value);
                            caseRecord.dbCompositeKey = csvRecordCompositeKey.Remove(csvRecordCompositeKey.Length - 1);
                            bALCaseCountRecords.Add(caseRecord);
                        }
                    }
                    counterKeys++;
                }
            }
            var dALCaseCountRecords = Utils.Utilities.MapCaseCountsBLDTOtoDADTO(bALCaseCountRecords);

            return(dALCaseCountRecords);
        }
        public List <CovidCaseCountBLDto> FetchCasesFromAPI(Metrics metrics)
        {
            WebRequest request = WebRequest.Create(ConfigurationManager.AppSettings["covidConfirmedCasesAPI"]);

            if (metrics == Metrics.DEATHS)
            {
                request = WebRequest.Create(ConfigurationManager.AppSettings["covidDeathsAPI"]);
            }
            else if (metrics == Metrics.RECOVERIES)
            {
                request = WebRequest.Create(ConfigurationManager.AppSettings["covidRecoveriesAPI"]);
            }
            request.Method = "GET";
            WebResponse  response     = request.GetResponse();
            Stream       dataStream   = response.GetResponseStream();
            StreamReader readerStream = new StreamReader(dataStream);

            Console.WriteLine(((HttpWebResponse)response).StatusDescription);
            string responseFromServer = readerStream.ReadToEnd();

            //Console.WriteLine(responseFromServer);
            response.Close();

            TextReader reader    = new StringReader(responseFromServer);
            CsvReader  csvReader = new CsvReader(reader, CultureInfo.InvariantCulture);
            dynamic    records   = csvReader.GetRecords <dynamic>();
            List <CovidCaseCountBLDto> bALCaseCountRecords = new List <CovidCaseCountBLDto>();
            int  id         = 1;
            Date latestDate = covidDataRepository.GetLastUpdateDate(metrics).Date;

            foreach (var rec in records)
            {
                IDictionary <string, object> caseCounts = rec;

                foreach (var count in caseCounts)
                {
                    if (count.Key != "Province/State" && count.Key != "Country/Region" && count.Key != "Lat" && count.Key != "Long" && DateTime.Compare(DateTime.ParseExact(count.Key, "M/d/yy", System.Globalization.CultureInfo.InvariantCulture), latestDate) > 0)
                    {
                        CovidCaseCountBLDto caseRecord = new CovidCaseCountBLDto
                        {
                            Id    = id,
                            Date  = DateTime.ParseExact(count.Key, "M/d/yy", System.Globalization.CultureInfo.InvariantCulture),
                            Count = Convert.ToInt32(count.Value)
                        };

                        bALCaseCountRecords.Add(caseRecord);
                    }
                }
                id++;
            }
            return(bALCaseCountRecords);
        }