TourIAm/TIAM.Services.Server/MessageSenderService.cs

83 lines
3.0 KiB
C#

using System.Net;
using AyCode.Models.Enums;
using Microsoft.Extensions.Configuration;
using SendGrid;
using SendGrid.Helpers.Mail;
using TIAM.Database.DataLayers.Admins;
using TIAM.Entities.Emails;
namespace TIAM.Services.Server
{
public class MessageSenderService(IConfiguration configuration, AdminDal adminDal) : IMessageSenderService
{
public async Task<string> SendMessageAsync(EmailMessage message, int messageType)
{
var result = "";
switch (messageType)
{
case (int)MessageTypesEnum.email:
Console.WriteLine($@"EmailMessage!!!");
// Access DerivedClass properties
//var subject = emailMessage.Subject;
result = (await SendMailWithSendgrid(message)).ToString(); //?? HttpStatusCode.BadRequest.ToString();
break;
case (int)MessageTypesEnum.sms:
//await SendSmsWithTwilio(message.Message);
break;
case (int)MessageTypesEnum.push:
//await SendPushWithFirebase(message.Message);
break;
case (int)MessageTypesEnum.chat:
//await SendChatWithSignalR(message.Message);
default:
break;
}
return result;
}
public async Task<HttpStatusCode> SendMailWithSendgrid(EmailMessage message)
{
Console.WriteLine($@"Sender: {message.SenderId}");
Console.WriteLine($@"Message: {message.Text}");
//resolve user!!!
if (!message.SenderId.HasValue) return HttpStatusCode.BadRequest;
var senderUser = adminDal.GetUserById(message.SenderId.Value);
//var receiverUser = adminDal.Context.Users.FirstOrDefault(x => x.Id == message.ReceiverId);
if (senderUser != null) return HttpStatusCode.BadRequest;
var apiKey = configuration["SendGrid:Key"];
var client = new SendGridClient(apiKey);
EmailAddress from;
if (message.SenderId == Guid.Empty)
{
from = new EmailAddress("noreply@tiam.com", "TourIAm mailservice");
}
else
{
from = new EmailAddress(message.EmailAddress, senderUser.Profile.Name);
}
foreach (var messageRecipient in message.Recipients)
{
var to = new EmailAddress(messageRecipient.EmailAddress, messageRecipient.EmailAddress);
var plainTextContent = message.Text;
//var _htmlContent = message.;
//MailHelper.CreateSingleEmailToMultipleRecipients()
var msg = MailHelper.CreateSingleEmail(from, to, message.Subject, plainTextContent, plainTextContent);
var response = await client.SendEmailAsync(msg).ConfigureAwait(false);
}
//return response.StatusCode;
return HttpStatusCode.Accepted;
}
}
}