// 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);
        }