/// <summary> /// Get latest data available on Database. /// </summary> /// <returns></returns> public static List <Region> FetchDatabase() { List <Region> regions = new List <Region>(); CoronaWatchContext context = new CoronaWatchContext(); DateTime currentDate = System.DateTime.UtcNow.Date; DateTime latestDateOnDB = Convert.ToDateTime(context.ReportDBs.Max(r => r.Date)).Date; List <RegionDB> regionDBs = context.RegionDBs.ToList(); List <ReportDB> reportDBs = context.ReportDBs.ToList(); foreach (RegionDB regionDB in regionDBs) { ReportDB reportDB = reportDBs.Where(r => r.ISOCode == regionDB.ISOCode).OrderByDescending(r => r.Date).Select(r => r).FirstOrDefault(); Statistic statistic = new Statistic((int)reportDB.Confirmed, (int)reportDB.Recovered, (int)reportDB.Death) { StatisticID = reportDB.ISOCode }; Report report = new Report(Convert.ToDateTime(reportDB.Date).Date, statistic); Region region = new Region(regionDB.Name, Region.EnumLevel.Country, regionDB.Slug, regionDB.ISOCode) { Report = report }; regions.Add(region); } // Sort by Name, actually unneccesary. Can be delete to improve performance regions.Sort((x, y) => x.Name.CompareTo(y.Name)); return(regions); }
public static void UpdateDatabase() { try { CoronaWatchContext context = new CoronaWatchContext(); // Updating Region List, if exist InitializeDatabase(); // Check if the current data for ReportDB is exist. Note that ReportDB is equivalent to Report. // Different Name used to avoid confusion and ambiguity var client = new RestClient(API + "summary") { Timeout = -1 }; var request = new RestRequest(Method.GET); IRestResponse response = client.Execute(request); var json = SimpleJson.DeserializeObject(response.Content); JObject obj = JObject.Parse(json.ToString()); JsonArray array = (JsonArray)SimpleJson.DeserializeObject(obj["Countries"].ToString()); foreach (JsonObject jsonObject in array) { //DateTime APIdate = Convert.ToDateTime(Regex.Match(jsonObject["Date"].ToString(), @"\d{4}-\d{2}-\d{2}").Value); DateTime APIdate = DateTime.Parse(jsonObject["Date"].ToString(), null, System.Globalization.DateTimeStyles.RoundtripKind); string CountryName = jsonObject["CountryCode"].ToString(); if (context.ReportDBs.Where(r => r.Date == APIdate && r.ISOCode == CountryName).FirstOrDefault() == null) { ReportDB reportDB = new ReportDB { ISOCode = jsonObject["CountryCode"].ToString(), Confirmed = Convert.ToInt32(jsonObject["TotalConfirmed"].ToString()), Recovered = Convert.ToInt32(jsonObject["TotalRecovered"].ToString()), Death = Convert.ToInt32(jsonObject["TotalDeaths"].ToString()) }; reportDB.Active = reportDB.Confirmed - reportDB.Recovered - reportDB.Death; reportDB.Date = APIdate; context.ReportDBs.Add(reportDB); context.SaveChanges(); } } MessageBox.Show("Successfully Updated DB"); } catch (Exception e) { if (e.Message == "Invalid JSON string") { MessageBox.Show(e.Message + "\nPlease Check Your Connection", "Error", MessageBoxButton.OK); } else { MessageBox.Show(e.Message, "Error"); } } }
static void Main() { #region Testing Aldo try { var client = new RestClient(API + "summary") { Timeout = -1 }; var request = new RestRequest(Method.GET); IRestResponse response = client.Execute(request); var json = SimpleJson.DeserializeObject(response.Content); JObject obj = JObject.Parse(json.ToString()); JsonArray array = (JsonArray)SimpleJson.DeserializeObject(obj["Countries"].ToString()); CoronaWatchContext context = new CoronaWatchContext(); foreach (JsonObject jsonObject in array) { string ISOCode = jsonObject["CountryCode"].ToString(); Console.WriteLine(ISOCode); if (context.RegionDBs.Where(r => r.ISOCode == ISOCode).FirstOrDefault() == null) { RegionDB regionDB = new RegionDB { ISOCode = jsonObject["CountryCode"].ToString(), Name = jsonObject["Country"].ToString(), Slug = jsonObject["Slug"].ToString() }; context.RegionDBs.Add(regionDB); context.SaveChanges(); } Console.WriteLine("ABC"); } } catch (Exception e) { if (e.Message == "Invalid JSON string") { Console.WriteLine(e.Message + "\nPlease Check Your Connection Error"); } else { Console.WriteLine(e.Message + "Error"); } } #endregion Console.ReadLine(); }
public static void InitializeDatabase() { try { var client = new RestClient(API + "summary") { Timeout = -1 }; var request = new RestRequest(Method.GET); IRestResponse response = client.Execute(request); var json = SimpleJson.DeserializeObject(response.Content); JObject obj = JObject.Parse(json.ToString()); JsonArray array = (JsonArray)SimpleJson.DeserializeObject(obj["Countries"].ToString()); CoronaWatchContext context = new CoronaWatchContext(); foreach (JsonObject jsonObject in array) { string ISOCode = jsonObject["CountryCode"].ToString(); if (context.RegionDBs.Where(r => r.ISOCode == ISOCode).FirstOrDefault() == null) { RegionDB regionDB = new RegionDB { ISOCode = jsonObject["CountryCode"].ToString(), Name = jsonObject["Country"].ToString(), Slug = jsonObject["Slug"].ToString() }; context.RegionDBs.Add(regionDB); context.SaveChanges(); } } } catch (Exception e) { if (e.Message == "Invalid JSON string") { MessageBox.Show(e.Message + "\nPlease Check Your Connection", "Error", MessageBoxButton.OK); } else { MessageBox.Show(e.Message, "Error"); } } }
private List <Region> GetRegion() { using (CoronaWatchContext context = new CoronaWatchContext()) { List <Region> regions = new List <Region>(); List <RegionDB> regionDBs = context.RegionDBs.ToList(); foreach (RegionDB regionDB in regionDBs) { Region region = new Region() { Name = regionDB.Name, Slug = regionDB.Slug, ISOCode = regionDB.ISOCode, }; regions.Add(region); } return(regions); } }
/* * public bool? IsAllItemsSelected * { * get * { * var selected = _items.Select(item => item.IsSelected).Distinct().ToList(); * return selected.Count == 1 ? selected.Single() : (bool?)null; * } * set * { * if (value.HasValue) * { * SelectAll(value.Value, Items); * OnPropertyChanged(); * } * } * } * * private static void SelectAll(bool select, IEnumerable<RegionGridsViewModel> models) * { * foreach (var model in models) * { * model.IsSelected = select; * } * } */ public static ObservableCollection <RegionGridsViewModel> GenerateData() { CoronaWatchContext context = new CoronaWatchContext(); if (context.ReportDBs.Count() == 0) { JHUDataService.UpdateDatabase(); } List <Region> regions = JHUDataService.FetchDatabase(); ObservableCollection <RegionGridsViewModel> regionGrids = new ObservableCollection <RegionGridsViewModel>(); foreach (Region reg in regions) { RegionGridsViewModel regGrid = new RegionGridsViewModel(reg); regionGrids.Add(regGrid); } _lastUpdate = Convert.ToDateTime(context.ReportDBs.OrderByDescending(r => r.Date).FirstOrDefault().Date); return(regionGrids); }