public async Task SendPublicBidEmails() { var supportedYears = await _interLeagueService.GetSupportedYears(); var activeYears = supportedYears.Where(x => x.OpenForPlay && !x.Finished); var publicBiddingSetDictionary = new Dictionary <LeagueYearKey, PublicBiddingSet>(); foreach (var year in activeYears) { var publicBiddingSets = await _gameAcquisitionService.GetPublicBiddingGames(year.Year); foreach (var publicBiddingSet in publicBiddingSets) { publicBiddingSetDictionary[publicBiddingSet.LeagueYear.Key] = publicBiddingSet; } } var userEmailSettings = await _userManager.GetAllEmailSettings(); var usersWithPublicBidEmails = userEmailSettings.Where(x => !x.User.IsDeleted && x.User.EmailConfirmed && x.EmailTypes.Contains(EmailType.PublicBids)).Select(x => x.User).ToList(); var usersWithLeagueYears = await _leagueMemberService.GetUsersWithLeagueYearsWithPublisher(); foreach (var user in usersWithPublicBidEmails) { if (!usersWithLeagueYears.TryGetValue(user, out var leagueYearKeys)) { continue; } List <PublicBiddingSet> publicBiddingSetsForUser = new List <PublicBiddingSet>(); foreach (var leagueYearKey in leagueYearKeys) { if (publicBiddingSetDictionary.TryGetValue(leagueYearKey, out var publicBiddingSet)) { publicBiddingSetsForUser.Add(publicBiddingSet); } } if (publicBiddingSetsForUser.Any() && publicBiddingSetsForUser.Any(x => x.MasterGames.Any())) { await SendPublicBiddingEmailToUser(user, publicBiddingSetsForUser); } } }