public async Task ClearCacheFor(Tournament tournament) { if (tournament == null) { throw new ArgumentNullException(nameof(tournament)); } var affectedTeams = tournament.Teams.Select(t => t.Team.TeamId.Value).ToList(); foreach (var teamId in affectedTeams) { var filter = _matchFilterFactory.MatchesForTeams(new List <Guid> { teamId }); var cacheKey = CacheConstants.MatchListingsCacheKeyPrefix + _matchFilterSerializer.Serialize(filter.filter) + filter.sortOrder; _cache.Remove(cacheKey); } if (affectedTeams.Any()) { var clubs = await _clubDataSource.ReadClubs(new ClubFilter { TeamIds = affectedTeams }).ConfigureAwait(false); foreach (var club in clubs) { var filter = _matchFilterFactory.MatchesForTeams(club.Teams.Select(x => x.TeamId.Value).ToList()); var cacheKey = CacheConstants.MatchListingsCacheKeyPrefix + _matchFilterSerializer.Serialize(filter.filter) + filter.sortOrder; _cache.Remove(cacheKey); } } if (tournament.TournamentLocation != null) { var filter = _matchFilterFactory.MatchesForMatchLocation(tournament.TournamentLocation.MatchLocationId.Value); var cacheKey = CacheConstants.MatchListingsCacheKeyPrefix + _matchFilterSerializer.Serialize(filter.filter) + filter.sortOrder; _cache.Remove(cacheKey); } if (tournament.Seasons != null) { foreach (var season in tournament.Seasons) { var filter = _matchFilterFactory.MatchesForSeason(season.SeasonId.Value); var cacheKey = CacheConstants.MatchListingsCacheKeyPrefix + _matchFilterSerializer.Serialize(filter.filter) + filter.sortOrder; _cache.Remove(cacheKey); } } if (tournament != null) { var filter = _matchFilterFactory.MatchesForTournament(tournament.TournamentId.Value); var cacheKey = CacheConstants.MatchListingsCacheKeyPrefix + _matchFilterSerializer.Serialize(filter.filter) + filter.sortOrder; _cache.Remove(cacheKey); } }
/// <inheritdoc /> public async Task <List <MatchListing> > ReadMatchListings(MatchFilter filter, MatchSortOrder sortOrder) { filter = filter ?? new MatchFilter(); var cachePolicy = _policyRegistry.Get <IAsyncPolicy>(CacheConstants.MatchesPolicy); var cacheKey = CacheConstants.MatchListingsCacheKeyPrefix + _matchFilterSerializer.Serialize(filter) + sortOrder.ToString(); return(await cachePolicy.ExecuteAsync(async context => await _matchListingDataSource.ReadMatchListings(filter, sortOrder), new Context(cacheKey))); }