using AyCode.Interfaces.Messages; using SendGrid; using SendGrid.Helpers.Mail; using AyCode.Models.Enums; using AyCode.Entities.Messages; using AyCode.Models.Messages; using TIAM.Database.DataLayers.Users; namespace TIAMWebApp.Server.Controllers { public class MessageService : IMessageSenderService { private readonly HttpClient http; private readonly IConfiguration _configuration; public UserDal _userDal; public MessageService(HttpClient http, IConfiguration configuration, UserDal userDal) { this.http = http; _configuration = configuration; _userDal = userDal; } public async Task SendMessageAsync(IMessageBase message, int[] messageTypes) { foreach (var messageType in messageTypes) { switch (messageType) { case (int)MessageTypesEnum.email: await SendMailWithSendgrid(((EMailMessage)message)); 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 true here return await Task.FromResult(true); } public async Task SendMailWithSendgrid(EMailMessage message) { //resolve user!!! var senderUser = _userDal.Ctx.Users.FirstOrDefault(x => x.Id == message.SenderId); var receiverUser = _userDal.Ctx.Users.FirstOrDefault(x => x.Id == message.ReceiverId); string apiKey = _configuration["SendGrid:Key"]; var _client = new SendGridClient(apiKey); var _from = new EmailAddress("", ""); if(message.SenderId == null) { _from = new EmailAddress("noreply@tiam.com", "TourIAm mailservice"); } else { _from = new EmailAddress(senderUser.Email, senderUser.Email); } var _subject = message.Subject; var _to = new EmailAddress(receiverUser.Email, receiverUser.Email); var _plainTextContent = message.Message; var _htmlContent = message.HtmlContent; var _msg = MailHelper.CreateSingleEmail(_from, _to, message.Subject, _plainTextContent, _htmlContent); var response = await _client.SendEmailAsync(_msg).ConfigureAwait(false); return response.StatusCode.ToString(); } } }