public async Task SendFixtureChangeEmailAsync(UserProfile user, FixtureChangeModel fixtureChange) { var apiKey = _configuration["SendGrid:ApiKey"]; var client = new SendGridClient(apiKey); var sender = new EmailAddress(_configuration["SendGrid:SenderAddress"], _configuration["SendGrid:SenderName"]); var templateId = _configuration["SendGrid:FixtureChangeTemplateId"]; var recipient = new EmailAddress(user.Email, user.Name); var templateData = new FixtureChangeTemplateData { ApplicationUrl = _configuration["ApplicationUrl"], AwayTeam = fixtureChange.AwayTeam, HomeTeam = fixtureChange.HomeTeam, Name = user.Name, NewAddress = fixtureChange.NewAddress, NewDate = fixtureChange.NewDateTime.ToLongDateString(), NewTime = fixtureChange.NewDateTime.ToShortTimeString(), NewVenue = fixtureChange.NewVenue, OldAddress = fixtureChange.OldAddress, OldDate = fixtureChange.OldDateTime.ToLongDateString(), OldTime = fixtureChange.OldDateTime.ToShortTimeString(), OldVenue = fixtureChange.OldVenue }; var msg = new SendGridMessage { From = sender, Subject = $"Fixture Change: {fixtureChange.HomeTeam} vs {fixtureChange.AwayTeam}", TemplateId = templateId }; msg.AddTo(recipient); msg.SetTemplateData(templateData); await client.SendEmailAsync(msg).ConfigureAwait(false); }
public async Task NotifySubscribersAsync(Fixture oldFixture, Fixture newFixture) { var subscriptions = (await _subscriptionRepository.FindAsync( s => s.TeamId == oldFixture.HomeTeamId || s.TeamId == oldFixture.AwayTeamId, s => s.Id)).ToList(); if (!subscriptions.Any()) { _logger.LogInformation( $"Fixture {newFixture.Id} changed but there were no subscribers to listen to it"); return; } var userIds = subscriptions.Select(s => s.UserId).Distinct(); _logger.LogInformation("Fetching subscriber user profiles"); var userProfiles = await Task.WhenAll(userIds.Select(u => _userProfileService.GetUserProfileAsync(u))); _logger.LogInformation("Successfully fetched subscriber user profiles"); var fixtureChange = new FixtureChangeModel { AwayTeam = newFixture.AwayTeamName, HomeTeam = newFixture.HomeTeamName, NewAddress = newFixture.Address, NewDateTime = newFixture.Date, NewVenue = newFixture.VenueName, OldAddress = oldFixture.Address, OldDateTime = oldFixture.Date, OldVenue = oldFixture.VenueName }; _logger.LogInformation("Sending fixture change emails to subscribers"); await Task.WhenAll(userProfiles.Select(user => _emailService.SendFixtureChangeEmailAsync(user, fixtureChange))); _logger.LogInformation("Successfully sent fixture change emails to subscribers"); }