コード例 #1
0
        public async Task RecalculcateStatistics(TextWriter log)
        {
            await log.WriteLineAsync("Recalculating statistics");

            var command = new UpdateStatisticCommands(_settings, _connectionFactory);

            await command.Recalculate();

            await log.WriteLineAsync("Recalculation complete");
        }
コード例 #2
0
        public async Task UpdateStats(
            [ServiceBusTrigger(ApplicationSettings.ConfirmationTopic, ApplicationSettings.StatsSubscription)] BrokeredMessage message,
            TextWriter log)
        {
            var subscription = message.GetBody <Subscription>();

            var domain = subscription.GetDomain();

            await log.WriteLineAsync($"Updating stats for {domain} due to entry for {subscription.EmailAddress}");

            var update = new UpdateStatisticCommands(_settings, _connectionFactory);

            await update.AddConfirmation(domain);

            await log.WriteLineAsync("Stats updated");
        }
コード例 #3
0
        public async Task SendNotification([ServiceBusTrigger(ApplicationSettings.JobMessagesQueue)] Guid id, TextWriter log)
        {
            try
            {
                await log.WriteLineAsync($"Sending notifications for {id}");

                var query = new SubscriptionQuery(_settings, _connectionFactory);

                var subscription = await query.GetSubscriptionById(id);

                if (subscription == null || subscription.ConfirmationSentOn.HasValue)
                {
                    return;
                }

                var mailMessage = _messageFactory.CreateConfirmationMessage(subscription);

                subscription.ConfirmationSentOn = DateTime.UtcNow;

                var update = new UpdateSubscriptionCommand(_settings, _connectionFactory);

                await update.Update(subscription, async (s, c, t) =>
                {
                    var updateStats = new UpdateStatisticCommands(_settings, _connectionFactory);

                    await updateStats.AddOrUpdateDomainCount(subscription.GetDomain(), c, t);

                    using (var smtpClient = new SmtpClient())
                    {
                        await smtpClient.SendMailAsync(mailMessage);
                    }
                });

                await log.WriteLineAsync($"Sent email to {subscription.EmailAddress}");
            }
            catch (Exception e)
            {
                log.Write($"GUID: {id}, Error: {e.Message}");
                throw;
            }
        }
コード例 #4
0
        public static async Task ProcessMissingConfirmationEmails(TextWriter log)
        {
            await log.WriteLineAsync("Starting resend of missing confirmation emails");

            var settings = new ApplicationSettings("");

            var connectionFactory = new SqlConnectionFactory();

            var query = new SubscriptionQuery(settings, connectionFactory);

            var subscriptions = await query.GetSubscriptionsWithMissingConfirmations();

            var messageFactory = new MessageFactory(settings);

            var updater = new UpdateSubscriptionCommand(settings, connectionFactory);

            foreach (var subscription in subscriptions.Where(s => s.CreatedOn > DateTime.UtcNow.Date))
            {
                await log.WriteLineAsync($"Sending confirmation email to {subscription.EmailAddress}");

                subscription.ConfirmationSentOn = DateTime.UtcNow;

                await updater.Update(subscription, async (s, c, t) =>
                {
                    using (var smtpClient = new SmtpClient())
                    {
                        var updateStats = new UpdateStatisticCommands(settings, connectionFactory);

                        await updateStats.AddOrUpdateDomainCount(subscription.GetDomain(), c, t);

                        await smtpClient.SendMailAsync(messageFactory.CreateConfirmationMessage(s));
                    }
                });
            }

            await log.WriteLineAsync("Completed resend of missing confirmation emails");
        }