public async Task UpdateBankHolidaysAsync()
        {
            var client   = new RestClient(_config.Url);
            var request  = new RestRequest();
            var response = await client.ExecuteTaskAsync <BankHolidays.BankHolidaysData>(request);

            if (!response.IsSuccessful)
            {
                throw new Exception($"Error getting list of bank holidays from url:{_config.Url}. Error:{response.ErrorMessage}");
            }

            if (!response.Data.EnglandAndWales.Events.Any())
            {
                throw new Exception($"Expected a non-empty list of bank holidays from url:{_config.Url}");
            }

            var bankHolidaysFromApi = new BankHolidays
            {
                Data = response.Data
            };

            if (await HasBankHolidayDataChanged(bankHolidaysFromApi))
            {
                await _referenceDataWriter.UpsertReferenceData(bankHolidaysFromApi);

                _logger.LogInformation($"Upserted bank holidays into ReferenceData store. Last England and Wales date:{bankHolidaysFromApi.Data.EnglandAndWales.Events.Last().Date}");
            }
            else
            {
                _logger.LogInformation("ReferenceData not updated as there is no change.");
            }
        }
        private async Task <bool> HasBankHolidayDataChanged(BankHolidays bankHolidaysFromApi)
        {
            var bankHolidaysFromDb = await _referenceDataReader.GetReferenceData <BankHolidays>();

            if (bankHolidaysFromDb == null)
            {
                return(true);
            }

            var bankHolidaysFromApiJson = JsonConvert.SerializeObject(bankHolidaysFromApi.Data);
            var bankHolidaysFromDbJson  = JsonConvert.SerializeObject(bankHolidaysFromDb.Data);
            var areEqual = JToken.DeepEquals(bankHolidaysFromApiJson, bankHolidaysFromDbJson);

            return(!areEqual);
        }