// fetches data for dayD and dayBeforeD to get daily new cases as well. private async Task TryUpdatingDataForDateAsync(DateTime dateUtc) { DailyCovidOverview[] dailyDataExternal = await _covidStatsService.GetPocosByDateAsync(dateUtc); DailyCovidOverview externalDayD = dailyDataExternal.Where(dailyData => dailyData.Date == dateUtc).FirstOrDefault(); DailyCovidOverview externalDayBefore = dailyDataExternal.Where(dailyData => dailyData.Date == dateUtc.AddDays(-1)).FirstOrDefault(); // if there is data available at the external server if (externalDayD != null) { // Scope has to be created to access any scoped service. using (IServiceScope scope = _services.CreateScope()) { var context = scope.ServiceProvider.GetRequiredService <AppDbContext>(); DailyCovidOverview internalDayD = context.DailyCovidOverviews.Where(dailyData => dailyData.Date == dateUtc).FirstOrDefault(); // if there is no data for this day in our db, add new database record if (internalDayD == null) { DailyCovidOverview recordToBePersisted = DailyCovidOverviewHelpers.PrepareNewRecord(externalDayD, externalDayBefore); context.DailyCovidOverviews.Add(recordToBePersisted); } context.SaveChanges(); } } }
/// <summary> /// Updates current entity object from data for two consecutive days. Perserves Id. /// </summary> /// <param name="internalRecord"></param> /// <param name="dayD"></param> /// <param name="dayBeforeD"></param> /// <returns></returns> public static DailyCovidOverview UpdateEntityObject(this DailyCovidOverview internalRecord, DailyCovidOverview dayD, DailyCovidOverview dayBeforeD) { internalRecord.Date = dayD.Date; internalRecord.TotalDeaths = dayD.TotalDeaths; internalRecord.TotalConfirmed = dayD.TotalConfirmed; internalRecord.TotalRecovered = dayD.TotalRecovered; internalRecord.DailyNewConfirmed = dayD.TotalConfirmed - dayBeforeD.TotalConfirmed; internalRecord.DailyNewDeaths = dayD.TotalDeaths - dayBeforeD.TotalDeaths; internalRecord.DailyNewRecovered = dayD.TotalRecovered - dayBeforeD.TotalRecovered; return(internalRecord); }
/// <summary> /// Checks if TotalConfirmed, TotalRecovered, TotalDeaths and Dates are equal for two records. /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <returns></returns> public static bool CheckTotals(DailyCovidOverview x, DailyCovidOverview y) { if (x.TotalConfirmed == y.TotalConfirmed && x.TotalDeaths == y.TotalDeaths && x.TotalRecovered == y.TotalRecovered && x.Date == y.Date) { return(true); } else { return(false); } }
/// <summary> /// Creates new entity object for the first day of pandemic. /// </summary> /// <param name="dayD"></param> /// <returns></returns> public static DailyCovidOverview PrepareNewFirstRecord(DailyCovidOverview dayD) { DailyCovidOverview recordToBePersisted = new DailyCovidOverview(); recordToBePersisted.Date = dayD.Date; recordToBePersisted.TotalConfirmed = dayD.TotalConfirmed; recordToBePersisted.TotalDeaths = dayD.TotalDeaths; recordToBePersisted.TotalRecovered = dayD.TotalRecovered; recordToBePersisted.DailyNewConfirmed = dayD.TotalConfirmed; recordToBePersisted.DailyNewDeaths = dayD.TotalDeaths; recordToBePersisted.DailyNewRecovered = dayD.TotalRecovered; return(recordToBePersisted); }
public static DailyCovidResult Map(DailyCovidOverview entity) { DailyCovidResult result = new DailyCovidResult(); result.Date = entity.Date; result.TotalConfirmed = entity.TotalConfirmed; result.TotalDeaths = entity.TotalDeaths; result.TotalRecovered = entity.TotalRecovered; result.DailyNewConfirmed = entity.DailyNewConfirmed; result.DailyNewDeaths = entity.DailyNewDeaths; result.DailyNewRecovered = entity.DailyNewRecovered; result.Active = result.TotalConfirmed - result.TotalDeaths - result.TotalRecovered; return(result); }