Beispiel #1
0
        public async Task <Unit> Handle(SendRegistrationEmailCommand request, CancellationToken cancellationToken)
        {
            try
            {
                var startPoint = checkPointRepository.Get().OrderBy(x => x.Distance).FirstOrDefault();

                var emailModel = new RegistrationEmailModel
                {
                    LogoUrl = absoluteUrlHelper.Get("/images/AllInSkateChallengeBannerSmall.png"),
                    EmailConfirmationUrl = request.EmailConfirmationUrl,
                    SiteUrl             = absoluteUrlHelper.Get("/"),
                    LogMilesUrl         = absoluteUrlHelper.Get("/skater/skate-log"),
                    SponsorLogoUrl      = absoluteUrlHelper.Get("/images/SkateEverywhereLogo.png"),
                    StartingPostCard    = absoluteUrlHelper.Get(startPoint?.Image),
                    FromSkateEverywhere = request.FromSkateEverywhere
                };

                var emailBody = await viewToStringRenderer.RenderPartialToStringAsync("~/Views/Email/RegistrationEmail.cshtml", emailModel);

                await emailSender.SendEmailAsync(request.Email, "ALL IN Skate Challenge Registration", emailBody);
            }
            catch (Exception exception)
            {
                logger.LogError(exception, "Failed to progress updates when saving mileage entries", request);
            }

            return(Unit.Value);
        }
        public async Task Process(SaveActivityCommand request, SaveActivityCommandResult response, CancellationToken cancellationToken)
        {
            if (!response.WasSuccessful || !request.Skater.AcceptProgressNotifications || !request.Skater.EmailConfirmed)
            {
                return;
            }

            try
            {
                var milesThisSkate = request.Distance;
                switch (request.DistanceUnit)
                {
                case DistanceUnit.Kilometres:
                    milesThisSkate = milesThisSkate * 0.621371M;
                    break;

                case DistanceUnit.Metres:
                    milesThisSkate = milesThisSkate * 0.000621371M;
                    break;
                }

                var totalMiles         = context.SkateLogEntries.Where(x => x.ApplicationUserId.Equals(request.Skater.Id)).Sum(x => x.DistanceInMiles);
                var previousMiles      = totalMiles - milesThisSkate;
                var checkPoints        = checkPointRepository.Get().Where(x => x.SkateTarget <= request.Skater.Target).ToList();
                var targetCheckPoint   = checkPoints.Last();
                var checkPointsReached = checkPoints.Where(x => x.Distance >= previousMiles && x.Distance <= totalMiles).OrderByDescending(x => x.Distance).ToList();

                foreach (var checkPointReached in checkPointsReached)
                {
                    var isFinalCheckpoint = checkPointReached.SkateTarget.Equals(request.Skater.Target);
                    var emailModel        = new SkaterProgressEmailViewModel
                    {
                        LogoUrl          = absoluteUrlHelper.Get("/images/AllInSkateChallengeBannerSmall.png"),
                        SponsorLogoUrl   = absoluteUrlHelper.Get("/images/SkateEverywhereLogo.png"),
                        Skater           = request.Skater,
                        CheckPoint       = checkPointReached,
                        TotalMiles       = totalMiles,
                        NextCheckPoint   = checkPoints.Where(x => x.Distance > totalMiles).OrderBy(x => x.Distance).FirstOrDefault(),
                        TargetCheckPoint = targetCheckPoint
                    };

                    var emailTemplate = isFinalCheckpoint ? "~/Views/Email/ChallengeCompleteEmail.cshtml" : "~/Views/Email/SkaterProgressEmail.cshtml";
                    var emailBody     = await viewToStringRenderer.RenderPartialToStringAsync(emailTemplate, emailModel);

                    await emailSender.SendEmailAsync(request.Skater.Email, "ALL IN Skate Challenge - Your Progress", emailBody);
                }
            }
            catch (Exception exception)
            {
                logger.LogError(exception, "Failed to progress updates when saving mileage entries", request);
            }
        }
        public async Task Process(DeauthoriseStravaUserCommand request, DeauthoriseStravaUserCommandResponse response, CancellationToken cancellationToken)
        {
            if (!response.WasSuccessful)
            {
                return;
            }

            try
            {
                response.LogoUrl = absoluteUrlHelper.Get("/images/AllInSkateChallengeBanner2.png");
                var emailBody = await viewToStringRenderer.RenderPartialToStringAsync("~/Views/Email/DeAuthoriseEmail.cshtml", response);

                await emailSender.SendEmailAsync(response.UserDetails.Email, "ALL IN Skate Challenge", emailBody);
            }
            catch (Exception exception)
            {
                logger.LogError(exception, "Failed to send email notification for a deauthorise event.", request);
            }
        }
        public async Task <Unit> Handle(ResendRegistrationEmailCommand request, CancellationToken cancellationToken)
        {
            try
            {
                var user = await userManager.FindByIdAsync(request.UserId);

                if (user == null)
                {
                    throw new EntityNotFoundException(typeof(ApplicationUser), Guid.Parse(request.UserId));
                }

                var code = await userManager.GenerateEmailConfirmationTokenAsync(user);

                code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));

                var callbackUrl = $"/Identity/Account/ConfirmEmail/?userId={request.UserId}&code={code}&returnUrl=%2F";
                callbackUrl = absoluteUrlHelper.Get(callbackUrl);

                var startPoint = checkPointRepository.Get().OrderBy(x => x.Distance).FirstOrDefault();

                var emailModel = new RegistrationEmailModel
                {
                    LogoUrl = absoluteUrlHelper.Get("/images/AllInSkateChallengeBannerSmall.png"),
                    EmailConfirmationUrl = callbackUrl,
                    SiteUrl             = absoluteUrlHelper.Get("/"),
                    LogMilesUrl         = absoluteUrlHelper.Get("/skater/skate-log"),
                    SponsorLogoUrl      = absoluteUrlHelper.Get("/images/SkateEverywhereLogo.png"),
                    StartingPostCard    = absoluteUrlHelper.Get(startPoint?.Image),
                    FromSkateEverywhere = false
                };

                var emailBody = await viewToStringRenderer.RenderPartialToStringAsync("~/Views/Email/RegistrationEmail.cshtml", emailModel);

                await emailSender.SendEmailAsync(user.Email, "ALL IN Skate Challenge Registration", emailBody);
            }
            catch (Exception exception)
            {
                logger.LogError(exception, "Failed to progress updates when saving mileage entries", request);
            }

            return(Unit.Value);
        }