public async void Execute() { try { var gamesFromProvider = _listProvider.GetGamesList().ToList(); var cachedGames = await _gameRepository.GetGamesAsync(); var newGames = gamesFromProvider.Where(x => cachedGames.All(y => !y.Equals(x))).ToList(); if (newGames.Any()) { await _gameRepository.AddGamesAsync(newGames); } _logger.LogInformation($"{newGames.Count} games added to the list."); var gamesToUpdate = cachedGames .Where(x => x.RequiresUpdate(gamesFromProvider.FirstOrDefault(y => y.Equals(x)))).ToList(); if (gamesToUpdate.Any()) { gamesToUpdate.ForEach(game => { var newVersion = gamesFromProvider.First(g => g.Equals(game)); game.FourKConfirmed = newVersion.FourKConfirmed; game.HdrRenderingAvailable = newVersion.HdrRenderingAvailable; game.Status = newVersion.Status; }); await _gameRepository.UpdateGamesAsync(gamesToUpdate); } _logger.LogInformation($"{gamesToUpdate.Count} games have been updated."); } catch (Exception e) { _logger.LogError($"An error occured during update list job: {e.Message}"); } }