Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion TickAPI/TickAPI/Common/Mail/Abstractions/IMailService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,6 @@ namespace TickAPI.Common.Mail.Abstractions;

public interface IMailService
{
public Task<Result> SendTicketsAsync(Customer customer, List<TicketWithScanUrl> tickets);
public Task<Result> SendTicketsAsync(Customer customer, List<Ticket> tickets);
public Task<Result> SendMailAsync(IEnumerable<MailRecipient> recipients, string subject, string content, List<MailAttachment>? attachments);
}
25 changes: 7 additions & 18 deletions TickAPI/TickAPI/Common/Mail/Services/MailService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
using SendGrid.Helpers.Mail;
using TickAPI.Common.Mail.Abstractions;
using TickAPI.Common.Mail.Models;
using TickAPI.Common.QR.Abstractions;
using TickAPI.Common.Results;
using TickAPI.Customers.Models;
using TickAPI.Tickets.Models;
Expand All @@ -14,46 +13,36 @@ public class MailService : IMailService
{
private readonly SendGridClient _client;
private readonly EmailAddress _fromEmailAddress;
private readonly IQRCodeService _qrCodeService;

public MailService(IConfiguration configuration, IQRCodeService qrCodeService)
public MailService(IConfiguration configuration)
{
_qrCodeService = qrCodeService;
var apiKey = configuration["SendGrid:ApiKey"];
_client = new SendGridClient(apiKey);
var fromEmail = configuration["SendGrid:FromEmail"];
var fromName = configuration["SendGrid:FromName"];
_fromEmailAddress = new EmailAddress(fromEmail, fromName);
}

public async Task<Result> SendTicketsAsync(Customer customer, List<TicketWithScanUrl> tickets)
public async Task<Result> SendTicketsAsync(Customer customer, List<Ticket> tickets)
{
var subject = "Your New Tickets";
var htmlContent = new StringBuilder();
htmlContent.AppendLine("<strong>Here are your tickets:</strong><br/><ul>");

var attachments = new List<MailAttachment>();

foreach (var tWithScanUrl in tickets)
htmlContent.AppendLine("<strong>You have purchased tickets for following events:</strong><br/><ul>");

foreach (var ticket in tickets)
{
var ticket = tWithScanUrl.Ticket;
var eventName = ticket.Type.Event.Name;
var eventDate = ticket.Type.Event.StartDate.ToString("yyyy-MM-dd");

htmlContent.AppendLine(
$"<li>Ticket for event <b>{eventName}</b> on {eventDate} "
$"<li><b>{eventName}</b> on {eventDate} (ticket: {ticket.Type.Description})</li>"
);

var pdfData = _qrCodeService.GenerateQrCode(tWithScanUrl.ScanUrl);

var base64Content = Convert.ToBase64String(pdfData);
attachments.Add(new MailAttachment($"ticket_{ticket.Id}.pdf", base64Content, "application/pdf"));
}

htmlContent.AppendLine("</ul>");

var recipient = new MailRecipient(customer.Email, customer.FirstName);
return await SendMailAsync([recipient], subject, htmlContent.ToString(), attachments);
return await SendMailAsync([recipient], subject, htmlContent.ToString(), []);
}

public async Task<Result> SendMailAsync(IEnumerable<MailRecipient> recipients, string subject, string content,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -158,11 +158,7 @@ public async Task<ActionResult<PaymentResponsePG>> Checkout([FromBody] CheckoutD

var customer = customerResult.Value!;

await _mailService.SendTicketsAsync(customer, checkout.BoughtTickets.Select(t =>
{
var scanUrl = Url.Action("ScanTicket", "Tickets", new { id = t.Id }, Request.Scheme)!;
return new TicketWithScanUrl(t, scanUrl);
}).ToList());
await _mailService.SendTicketsAsync(customer, checkout.BoughtTickets);

return checkout.PaymentResponse;
}
Expand Down
13 changes: 0 additions & 13 deletions TickAPI/TickAPI/Tickets/Models/TicketWithScanUrl.cs

This file was deleted.

Loading