Ejemplo n.º 1
0
        private async Task SendOutbidNoticeAsync(Event evt, Product product, Bid previousBid, Bid highBid)
        {
            try
            {
                var subject      = $"[{evt.Name}] You've been outbid on {product.Name}";
                var messageModel = new OutbidNoticeModel
                {
                    EventId          = evt.Id,
                    EventName        = evt.Name,
                    EventEndDate     = evt.EndOn,
                    ProductId        = product.Id,
                    ProductName      = product.Name,
                    UserName         = previousBid.User.FullName,
                    OutbidTime       = highBid.Timestamp,
                    OutbidAmount     = previousBid.Amount,
                    NewHighBidAmount = highBid.Amount
                };

                var messageBody = await _viewRenderer.RenderViewToStringAsync("EmailTemplates/OutbidNotice", messageModel);

                await _emailSender.SendEmailAsync(previousBid.User.Email, subject, messageBody);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Error sending outbid notice for product ID {productId}", previousBid.ProductId);
            }
        }
Ejemplo n.º 2
0
        public async Task CanRenderConfirmationMail()
        {
            // arrange
            var confirmationUrl = $"http://example.com/user/{Guid.NewGuid()}/confirm/{Guid.NewGuid()}";

            // act
            var renderedView = await viewRenderer.RenderViewToStringAsync("~/emails/ConfirmEmail.cshtml", confirmationUrl);

            // assert
            testOutputHelper.WriteLine(renderedView);
            Assert.NotNull(renderedView);
            Assert.Contains(confirmationUrl, renderedView, StringComparison.OrdinalIgnoreCase);
        }
Ejemplo n.º 3
0
        public async Task <IActionResult> EmailItinerary(int eventId)
        {
            var evt = await _dbContext.Events.FindAsync(eventId);

            if (evt == null)
            {
                return(NotFound());
            }

            var user = await _userManager.GetUserAsync(User);

            try
            {
                var model = new EventItineraryEmailModel();
                model.Event = evt.ToModel();
                model.User  = user.ToModel();

                model.Sections = await _dbContext.Sections
                                 .Where(x => x.EventId == evt.Id)
                                 .OrderBy(x => x.StartOn)
                                 .ProjectTo <SectionModel>()
                                 .ToListAsync();

                var userSessionIds = await _dbContext.Registrations
                                     .Where(x => x.EventId == eventId &&
                                            x.UserId == user.Id)
                                     .Select(x => x.SessionId)
                                     .ToListAsync();

                model.RegisteredSessions = await _dbContext.Sessions
                                           .Where(x => userSessionIds.Contains(x.Id))
                                           .ProjectTo <SessionModel>()
                                           .ToListAsync();

                model.ItineraryUrl = Url.Action("EventItinerary", "Itinerary", new { eventId }, Request.Scheme);
                model.EventUrl     = Url.Action("Details", "Events", new { slug = evt.Slug }, Request.Scheme);

                var subject = $"Your {evt.Name} itinerary";
                var body    = await _viewRenderer.RenderViewToStringAsync("Itinerary/ItineraryEmail", model);

                await _emailSender.SendEmailAsync(user.Email, subject, body);

                return(Json(null));
            }
            catch (Exception ex)
            {
                _logger.LogError(0, ex, $"Error sending itinerary email to '{user.Email}' for event '{evt.Name}'");

                return(StatusCode((int)HttpStatusCode.InternalServerError, "Error sending itinerary email"));
            }
        }
Ejemplo n.º 4
0
 public async Task <string> ToHtmlString(IViewRenderer viewRenderer) => await viewRenderer.RenderViewToStringAsync(this);