public List <CovidCaseCountBLDto> FetchCasesFromFile(Metrics metrics)
        {
            //Needs fixing
            TextReader reader     = new StreamReader(path);
            CsvReader  csvReader  = new CsvReader(reader, CultureInfo.InvariantCulture);
            dynamic    records    = csvReader.GetRecords <dynamic>();
            var        bALRecords = FetchLocationsFromFile().Item1;
            var        headerRow  = FetchLocationsFromFile().Item2;
            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 cases in caseCounts)
                {
                    if (cases.Key != "State" && cases.Key != "Country" && cases.Key != "Lat" && cases.Key != "Long" && DateTime.Compare((DateTime.ParseExact(cases.Key, "M/d/yy", System.Globalization.CultureInfo.InvariantCulture)), latestDate) > 0)
                    {
                        CovidCaseCountBLDto caseRecord = new CovidCaseCountBLDto
                        {
                            Id    = id,
                            Date  = DateTime.ParseExact(cases.Key, "M/d/yyyy", System.Globalization.CultureInfo.InvariantCulture),
                            Count = Convert.ToInt32(cases.Value)
                        };
                        bALCaseCountRecords.Add(caseRecord);
                    }
                }
                id++;
            }
            return(bALCaseCountRecords);
        }
 public static CovidCaseCountDADto ToCaseCountstDADto(this CovidCaseCountBLDto rec)
 {
     return(new CovidCaseCountDADto
     {
         dbCompositeKey = rec.dbCompositeKey,
         Date = rec.Date,
         Count = rec.Count
     });
 }
        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);
        }
        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>();
            Date latestDate = covidDataRepository.GetLastUpdateDate(metrics).Date;
            //IDictionary<string, object> caseCounts = new IDictionary;
            string csvRecordCompositeKey = "";
            int    counterKeys           = 0;

            foreach (var rec in records)
            {
                //Console.WriteLine(rec);
                counterKeys           = 0;
                csvRecordCompositeKey = "";
                //var a = rec.where(x => x.key == "Country/Region" && x.Value == "Tajikistan").ToList();

                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)
                        {
                            CovidCaseCountBLDto caseRecord = new CovidCaseCountBLDto();
                            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++;
                }
            }
            return(bALCaseCountRecords);
        }