TourIAm/TIAMWebApp/Server/Services/MessageSenderService.cs

80 lines
2.9 KiB
C#

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<bool> 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<string> 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();
}
}
}