//Invoked every 10 minutes
        //Gets new data from api, updates database and sends message to clients to update data on site
        private async void DoWork(object state)
        {
            using var scope = _scopeFactory.CreateScope();
            var dbContext =
                new CurrencyContext(
                    scope.ServiceProvider.GetRequiredService <DbContextOptions <CurrencyContext> >());

            var httpClient = _httpClientFactory.CreateClient("API Client");

            foreach (var currency in DropDownHelper.GetCurrenciesList())
            {
                var httpResponse = await httpClient.GetAsync("/latest?base=" + currency);

                if (!httpResponse.IsSuccessStatusCode)
                {
                    return;
                }

                var content = await httpResponse.Content.ReadAsStringAsync();

                var newModel = JsonConvert.DeserializeObject <CurrencyModel>(content);

                var oldModel = dbContext.Currency.FirstOrDefault(c =>
                                                                 c.CurrencyName == newModel.CurrencyName && c.RatesDate.Date == newModel.RatesDate.Date);

                if (oldModel != null)
                {
                    var oldExchangeRates = dbContext.ExchangeRates
                                           .Where(r => r.CurrencyId == oldModel.Id)
                                           .ToList();

                    dbContext.ExchangeRates.RemoveRange(oldExchangeRates);
                    oldModel.Rates = newModel.Rates;
                    dbContext.Currency.Update(oldModel);
                }
                else
                {
                    dbContext.Currency.Add(newModel);
                }
            }

            await dbContext.SaveChangesAsync();

            if (LiveRatesHub.ConnectedClients != null && LiveRatesHub.ConnectedClients.Count != 0)
            {
                await _hubContext.Clients.All.SendAsync("UpdateRates");
            }
        }