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 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 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; } } }