Example #1
0
        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);
        }
Example #2
0
        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");
        }