EmailMessage fixes;
This commit is contained in:
parent
a8e835b252
commit
ae741bc6a7
|
|
@ -1,15 +1,20 @@
|
||||||
using System.Collections.Specialized;
|
using System.Collections.Specialized;
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
using AyCode.Entities.Messages;
|
|
||||||
using AyCode.Interfaces.Entities;
|
using AyCode.Interfaces.Entities;
|
||||||
using AyCode.Interfaces.TimeStampInfo;
|
using AyCode.Interfaces.TimeStampInfo;
|
||||||
using AyCode.Interfaces.Users;
|
using AyCode.Interfaces.Users;
|
||||||
|
|
||||||
namespace TIAM.Entities.Emails;
|
namespace TIAM.Entities.Emails;
|
||||||
|
|
||||||
|
public interface IMessageSenderService
|
||||||
|
{
|
||||||
|
public Task<string> SendMessageAsync<TEmailMessage>(TEmailMessage message, int messageType) where TEmailMessage : EmailMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
[Table(nameof(EmailMessage))]
|
[Table(nameof(EmailMessage))]
|
||||||
public class EmailMessage : NoticeBase, IEntityGuid, ITimeStampInfo, IEmailRecipientsRelation, IEmailAddress
|
public class EmailMessage : IEntityGuid, ITimeStampInfo, IEmailRecipientsRelation, IEmailAddress
|
||||||
{
|
{
|
||||||
public EmailMessage()
|
public EmailMessage()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -14,16 +14,16 @@ namespace TIAMMobileApp.Services
|
||||||
{
|
{
|
||||||
public class UserDataServiceMobile : IUserDataService
|
public class UserDataServiceMobile : IUserDataService
|
||||||
{
|
{
|
||||||
private readonly HttpClient http;
|
private readonly HttpClient _http;
|
||||||
private readonly ISecureStorageHandler secureStorageHandler;
|
private readonly ISecureStorageHandler _secureStorageHandler;
|
||||||
private readonly IServiceProviderDataService _serviceProviderDataService;
|
private readonly IServiceProviderDataService _serviceProviderDataService;
|
||||||
|
|
||||||
public Dictionary<int, string> userRoleTypes { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
|
public Dictionary<int, string> userRoleTypes { get => throw new NotImplementedException(); set => throw new NotImplementedException(); }
|
||||||
|
|
||||||
public UserDataServiceMobile(HttpClient http, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService)
|
public UserDataServiceMobile(HttpClient http, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService)
|
||||||
{
|
{
|
||||||
this.http = http;
|
this._http = http;
|
||||||
this.secureStorageHandler = secureStorageHandler;
|
this._secureStorageHandler = secureStorageHandler;
|
||||||
_serviceProviderDataService = serviceProviderDataService;
|
_serviceProviderDataService = serviceProviderDataService;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -45,7 +45,7 @@ namespace TIAMMobileApp.Services
|
||||||
|
|
||||||
public async Task<UserSessionModel> IsLoggedInAsync(Guid id)
|
public async Task<UserSessionModel> IsLoggedInAsync(Guid id)
|
||||||
{
|
{
|
||||||
var userModelDto = await GetUserByIdAsync(id);
|
var userModelDto = await GetUserDetailByIdAsync(id);
|
||||||
|
|
||||||
if (userModelDto != null)
|
if (userModelDto != null)
|
||||||
{
|
{
|
||||||
|
|
@ -62,10 +62,10 @@ namespace TIAMMobileApp.Services
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<string> TestUserApi(int Param)
|
public async Task<string> TestUserApi(int param)
|
||||||
{
|
{
|
||||||
var url = APIUrls.UserTest;
|
var url = APIUrls.UserTest;
|
||||||
var response = await http.PostAsJsonAsync(url, Param);
|
var response = await _http.PostAsJsonAsync(url, param);
|
||||||
var result = await response.Content.ReadAsStringAsync();
|
var result = await response.Content.ReadAsStringAsync();
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
@ -75,10 +75,10 @@ namespace TIAMMobileApp.Services
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
string result = string.Empty;
|
var result = string.Empty;
|
||||||
var url = APIUrls.AuthenticateUser;
|
var url = APIUrls.AuthenticateUser;
|
||||||
|
|
||||||
var response = await http.PostAsJsonAsync(url, loginModel);
|
var response = await _http.PostAsJsonAsync(url, loginModel);
|
||||||
|
|
||||||
if (response.IsSuccessStatusCode)
|
if (response.IsSuccessStatusCode)
|
||||||
{
|
{
|
||||||
|
|
@ -98,11 +98,11 @@ namespace TIAMMobileApp.Services
|
||||||
public async Task<(bool isSuccess, string ErrorMessage)> CreateUser(RegistrationModel regModel)
|
public async Task<(bool isSuccess, string ErrorMessage)> CreateUser(RegistrationModel regModel)
|
||||||
{
|
{
|
||||||
|
|
||||||
bool isSuccess = true;
|
var isSuccess = true;
|
||||||
string result = string.Empty;
|
var result = string.Empty;
|
||||||
var url = APIUrls.CreateUser;
|
var url = APIUrls.CreateUser;
|
||||||
|
|
||||||
var response = await http.PostAsJsonAsync(url, regModel);
|
var response = await _http.PostAsJsonAsync(url, regModel);
|
||||||
result = await response.Content.ReadAsStringAsync();
|
result = await response.Content.ReadAsStringAsync();
|
||||||
/*if (response.IsSuccessStatusCode)
|
/*if (response.IsSuccessStatusCode)
|
||||||
{
|
{
|
||||||
|
|
@ -122,12 +122,12 @@ namespace TIAMMobileApp.Services
|
||||||
public async Task<(bool isSuccess, UserModelDto? user)> CreateGuestUser(RegistrationModel regModel)
|
public async Task<(bool isSuccess, UserModelDto? user)> CreateGuestUser(RegistrationModel regModel)
|
||||||
{
|
{
|
||||||
|
|
||||||
bool isSuccess = false;
|
var isSuccess = false;
|
||||||
string result = string.Empty;
|
var result = string.Empty;
|
||||||
UserModelDto? user;
|
UserModelDto? user;
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.CreateGuestUser}";
|
var url = $"{Setting.ApiBaseUrl}/{APIUrls.CreateGuestUser}";
|
||||||
|
|
||||||
var response = await http.PostAsJsonAsync(url, regModel);
|
var response = await _http.PostAsJsonAsync(url, regModel);
|
||||||
|
|
||||||
|
|
||||||
if (response.IsSuccessStatusCode)
|
if (response.IsSuccessStatusCode)
|
||||||
|
|
@ -149,18 +149,18 @@ namespace TIAMMobileApp.Services
|
||||||
|
|
||||||
public async Task<List<UserModelDto>?> GetUsersAsync()
|
public async Task<List<UserModelDto>?> GetUsersAsync()
|
||||||
{
|
{
|
||||||
return await http.GetFromJsonAsync<List<UserModelDto>>(APIUrls.GetUsers);
|
return await _http.GetFromJsonAsync<List<UserModelDto>>(APIUrls.GetUsers);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<List<UserModelDtoDetail>?> GetUsersWithDetailsAsync()
|
public async Task<List<UserModelDtoDetail>?> GetUsersWithDetailsAsync()
|
||||||
{
|
{
|
||||||
return await http.GetFromJsonAsync<List<UserModelDtoDetail>>(APIUrls.GetUsersWithDetails);
|
return await _http.GetFromJsonAsync<List<UserModelDtoDetail>>(APIUrls.GetUsersWithDetails);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<UserModelDto?> GetUserByEmailAsync(string email)
|
public async Task<UserModelDto?> GetUserByEmailAsync(string email)
|
||||||
{
|
{
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserByEmail}";
|
var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserByEmail}";
|
||||||
var response = await http.PostAsJsonAsync(url, email);
|
var response = await _http.PostAsJsonAsync(url, email);
|
||||||
var result = await response.Content.ReadAsStringAsync();
|
var result = await response.Content.ReadAsStringAsync();
|
||||||
var user = JsonConvert.DeserializeObject<UserModelDto>(result);
|
var user = JsonConvert.DeserializeObject<UserModelDto>(result);
|
||||||
return user;
|
return user;
|
||||||
|
|
@ -170,7 +170,7 @@ namespace TIAMMobileApp.Services
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserById}";
|
var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserById}";
|
||||||
//logToBrowserConsole.LogToBC("GetUserByIdAsync url: " + url + ", " + id.ToString());
|
//logToBrowserConsole.LogToBC("GetUserByIdAsync url: " + url + ", " + id.ToString());
|
||||||
|
|
||||||
var response = await http.PostAsJsonAsync(url, id);
|
var response = await _http.PostAsJsonAsync(url, id);
|
||||||
var result = await response.Content.ReadAsStringAsync();
|
var result = await response.Content.ReadAsStringAsync();
|
||||||
var user = JsonConvert.DeserializeObject<UserModelDto>(result);
|
var user = JsonConvert.DeserializeObject<UserModelDto>(result);
|
||||||
|
|
||||||
|
|
@ -179,7 +179,7 @@ namespace TIAMMobileApp.Services
|
||||||
|
|
||||||
public async Task<bool> RefreshToken()
|
public async Task<bool> RefreshToken()
|
||||||
{
|
{
|
||||||
bool isTokenRefreshed = false;
|
var isTokenRefreshed = false;
|
||||||
using (var client = new HttpClient())
|
using (var client = new HttpClient())
|
||||||
{
|
{
|
||||||
var url = APIUrls.RefreshToken;
|
var url = APIUrls.RefreshToken;
|
||||||
|
|
@ -195,7 +195,7 @@ namespace TIAMMobileApp.Services
|
||||||
var response = await client.PostAsync(url, new StringContent(serializedStr, Encoding.UTF8, "application/json"));
|
var response = await client.PostAsync(url, new StringContent(serializedStr, Encoding.UTF8, "application/json"));
|
||||||
if (response.IsSuccessStatusCode)
|
if (response.IsSuccessStatusCode)
|
||||||
{
|
{
|
||||||
string contentStr = await response.Content.ReadAsStringAsync();
|
var contentStr = await response.Content.ReadAsStringAsync();
|
||||||
var mainResponse = JsonConvert.DeserializeObject<MainResponse>(contentStr);
|
var mainResponse = JsonConvert.DeserializeObject<MainResponse>(contentStr);
|
||||||
if (mainResponse.IsSuccess)
|
if (mainResponse.IsSuccess)
|
||||||
{
|
{
|
||||||
|
|
@ -203,15 +203,15 @@ namespace TIAMMobileApp.Services
|
||||||
Setting.UserBasicDetails.AccessToken = tokenDetails.AccessToken;
|
Setting.UserBasicDetails.AccessToken = tokenDetails.AccessToken;
|
||||||
Setting.UserBasicDetails.RefreshToken = tokenDetails.RefreshToken;
|
Setting.UserBasicDetails.RefreshToken = tokenDetails.RefreshToken;
|
||||||
|
|
||||||
string userDetailsStr = JsonConvert.SerializeObject(Setting.UserBasicDetails);
|
var userDetailsStr = JsonConvert.SerializeObject(Setting.UserBasicDetails);
|
||||||
await secureStorageHandler.SaveToSecureStorageAsync(nameof(Setting.UserBasicDetails), userDetailsStr);
|
await _secureStorageHandler.SaveToSecureStorageAsync(nameof(Setting.UserBasicDetails), userDetailsStr);
|
||||||
isTokenRefreshed = true;
|
isTokenRefreshed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
string msg = ex.Message;
|
var msg = ex.Message;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -224,7 +224,7 @@ namespace TIAMMobileApp.Services
|
||||||
{
|
{
|
||||||
//TODO Finish this
|
//TODO Finish this
|
||||||
//get the userModel's roles
|
//get the userModel's roles
|
||||||
int role = userModel.UserRoles;
|
var role = userModel.UserRoles;
|
||||||
|
|
||||||
foreach (var roleType in roleTypes)
|
foreach (var roleType in roleTypes)
|
||||||
{
|
{
|
||||||
|
|
@ -245,7 +245,7 @@ namespace TIAMMobileApp.Services
|
||||||
var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserDetailById}";
|
var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserDetailById}";
|
||||||
|
|
||||||
|
|
||||||
var response = await http.PostAsJsonAsync(url, id);
|
var response = await _http.PostAsJsonAsync(url, id);
|
||||||
var result = await response.Content.ReadAsStringAsync();
|
var result = await response.Content.ReadAsStringAsync();
|
||||||
var user = JsonConvert.DeserializeObject<UserModelDtoDetail>(result);
|
var user = JsonConvert.DeserializeObject<UserModelDtoDetail>(result);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
@page "/user/products"
|
@page "/user/products"
|
||||||
@using AyCode.Models.Messages
|
|
||||||
@using TIAM.Entities.ServiceProviders
|
@using TIAM.Entities.ServiceProviders
|
||||||
@using TIAM.Resources
|
@using TIAM.Resources
|
||||||
@using TIAMSharedUI.Pages.Components
|
@using TIAMSharedUI.Pages.Components
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
@page "/user/transfers"
|
@page "/user/transfers"
|
||||||
@using AyCode.Models.Messages
|
|
||||||
@using BlazorAnimation
|
@using BlazorAnimation
|
||||||
@using TIAM.Core.Enums
|
@using TIAM.Core.Enums
|
||||||
@using TIAM.Entities.ServiceProviders
|
@using TIAM.Entities.ServiceProviders
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
@page "/user/users"
|
@page "/user/users"
|
||||||
@using AyCode.Models.Messages
|
|
||||||
@using BlazorAnimation
|
@using BlazorAnimation
|
||||||
@using TIAM.Core.Enums
|
@using TIAM.Core.Enums
|
||||||
@using TIAM.Entities.Products
|
@using TIAM.Entities.Products
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
@page "/user/destinations"
|
@page "/user/destinations"
|
||||||
@using AyCode.Models.Messages
|
|
||||||
@using BlazorAnimation
|
@using BlazorAnimation
|
||||||
@using TIAM.Entities.ServiceProviders
|
@using TIAM.Entities.ServiceProviders
|
||||||
@using TIAM.Resources
|
@using TIAM.Resources
|
||||||
|
|
|
||||||
|
|
@ -23,11 +23,10 @@ using TIAMWebApp.Server.ModelsTIAMWebApp.Shared.Application.Models;
|
||||||
using TIAMWebApp.Shared.Application.Utility;
|
using TIAMWebApp.Shared.Application.Utility;
|
||||||
using TIAM.Entities.Auctions;
|
using TIAM.Entities.Auctions;
|
||||||
using AyCode.Interfaces.Messages;
|
using AyCode.Interfaces.Messages;
|
||||||
using AyCode.Entities.Messages;
|
|
||||||
using TIAMWebApp.Shared.Application.Models.ClientSide.Messages;
|
using TIAMWebApp.Shared.Application.Models.ClientSide.Messages;
|
||||||
using AyCode.Models.Messages;
|
|
||||||
using AyCode.Models.Enums;
|
using AyCode.Models.Enums;
|
||||||
using TIAM.Database.DataLayers.Admins;
|
using TIAM.Database.DataLayers.Admins;
|
||||||
|
using TIAM.Entities.Emails;
|
||||||
using TIAM.Models.Dtos.Users;
|
using TIAM.Models.Dtos.Users;
|
||||||
|
|
||||||
namespace TIAMWebApp.Server.Controllers
|
namespace TIAMWebApp.Server.Controllers
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ using TIAM.Database.DataLayers.Admins;
|
||||||
using TIAM.Database.DataLayers.Auctions;
|
using TIAM.Database.DataLayers.Auctions;
|
||||||
using TIAM.Database.DataLayers.TransferDestinations;
|
using TIAM.Database.DataLayers.TransferDestinations;
|
||||||
using TIAM.Database.DataLayers.Users;
|
using TIAM.Database.DataLayers.Users;
|
||||||
|
using TIAM.Entities.Emails;
|
||||||
using TIAMWebApp.Server.Services;
|
using TIAMWebApp.Server.Services;
|
||||||
//using TIAM.Database.DataLayers.ServiceProviders;
|
//using TIAM.Database.DataLayers.ServiceProviders;
|
||||||
|
|
||||||
|
|
@ -88,7 +89,7 @@ builder.Services.Configure<FormOptions>(options =>
|
||||||
options.MultipartBodyLengthLimit = 200000000; // Increase the limit to 200MB
|
options.MultipartBodyLengthLimit = 200000000; // Increase the limit to 200MB
|
||||||
});
|
});
|
||||||
|
|
||||||
builder.Services.AddScoped<IMessageSenderService, NoticeSenderService>();
|
builder.Services.AddScoped<IMessageSenderService, MessageSenderService>();
|
||||||
builder.Services.AddScoped<TransferBackendService, TransferBackendService>();
|
builder.Services.AddScoped<TransferBackendService, TransferBackendService>();
|
||||||
builder.Services.AddEndpointsApiExplorer();
|
builder.Services.AddEndpointsApiExplorer();
|
||||||
builder.Services.AddSwaggerGen();
|
builder.Services.AddSwaggerGen();
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,97 @@
|
||||||
|
using System.Net;
|
||||||
|
using AyCode.Interfaces.Messages;
|
||||||
|
using SendGrid;
|
||||||
|
using SendGrid.Helpers.Mail;
|
||||||
|
using AyCode.Models.Enums;
|
||||||
|
using TIAM.Database.DataLayers.Admins;
|
||||||
|
using TIAM.Database.DataLayers.Users;
|
||||||
|
using TIAM.Entities.Emails;
|
||||||
|
using TIAMWebApp.Shared.Application.Models.ClientSide.Messages;
|
||||||
|
|
||||||
|
|
||||||
|
namespace TIAMWebApp.Server.Services
|
||||||
|
{
|
||||||
|
public class MessageSenderService(IConfiguration configuration, AdminDal adminDal) : IMessageSenderService
|
||||||
|
{
|
||||||
|
//public AdminDal AdminDal = adminDal;
|
||||||
|
|
||||||
|
public async Task<string> SendMessageAsync<TEmailMessage>(TEmailMessage message, int messageType) where TEmailMessage : EmailMessage
|
||||||
|
{
|
||||||
|
var result = "";
|
||||||
|
switch (messageType)
|
||||||
|
{
|
||||||
|
case (int)MessageTypesEnum.email:
|
||||||
|
if (message is EmailMessage emailMessage)
|
||||||
|
{
|
||||||
|
Console.WriteLine($@"EmailMessage!!!");
|
||||||
|
// Access DerivedClass properties
|
||||||
|
//var subject = emailMessage.Subject;
|
||||||
|
result = (await SendMailWithSendgrid(emailMessage)).ToString(); //?? HttpStatusCode.BadRequest.ToString();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Access BaseClass properties
|
||||||
|
result = "Invalid 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 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,90 +0,0 @@
|
||||||
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;
|
|
||||||
using TIAMWebApp.Shared.Application.Models.ClientSide.Messages;
|
|
||||||
|
|
||||||
|
|
||||||
namespace TIAMWebApp.Server.Services
|
|
||||||
{
|
|
||||||
public class NoticeSenderService : IMessageSenderService
|
|
||||||
{
|
|
||||||
|
|
||||||
private readonly IConfiguration _configuration;
|
|
||||||
public UserDal _userDal;
|
|
||||||
|
|
||||||
public NoticeSenderService(IConfiguration configuration, UserDal userDal)
|
|
||||||
{
|
|
||||||
|
|
||||||
_configuration = configuration;
|
|
||||||
_userDal = userDal;
|
|
||||||
}
|
|
||||||
public async Task<string> SendMessageAsync<TNotice>(TNotice message, int messageType) where TNotice : class, INoticeBase
|
|
||||||
{
|
|
||||||
string result = "";
|
|
||||||
switch (messageType)
|
|
||||||
{
|
|
||||||
case (int)MessageTypesEnum.email:
|
|
||||||
if (message is MessageSenderModel<EmailMessage> emailMessage)
|
|
||||||
{
|
|
||||||
Console.WriteLine($@"EmailMessage!!!");
|
|
||||||
// Access DerivedClass properties
|
|
||||||
var _subject = emailMessage.Message.Subject;
|
|
||||||
result = await SendMailWithSendgrid(emailMessage.Message);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Access BaseClass properties
|
|
||||||
result = "Invalid 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 result;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<string> SendMailWithSendgrid(EmailMessage message)
|
|
||||||
{
|
|
||||||
Console.WriteLine($@"Sender: {message.SenderId}");
|
|
||||||
Console.WriteLine($@"Message: {message.Message}");
|
|
||||||
//resolve user!!!
|
|
||||||
var senderUser = _userDal.Context.Users.FirstOrDefault(x => x.Id == message.SenderId);
|
|
||||||
var receiverUser = _userDal.Context.Users.FirstOrDefault(x => x.Id == message.ReceiverId);
|
|
||||||
string apiKey = _configuration["SendGrid:Key"];
|
|
||||||
var _client = new SendGridClient(apiKey);
|
|
||||||
var _from = new EmailAddress("", "");
|
|
||||||
if (message.SenderId == Guid.Empty)
|
|
||||||
{
|
|
||||||
_from = new EmailAddress("noreply@tiam.com", "TourIAm mailservice");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_from = new EmailAddress(senderUser.EmailAddress, senderUser.EmailAddress);
|
|
||||||
}
|
|
||||||
var _subject = message.Subject;
|
|
||||||
var _to = new EmailAddress(receiverUser.EmailAddress, receiverUser.EmailAddress);
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,17 +1,16 @@
|
||||||
using AyCode.Entities.Messages;
|
using AyCode.Interfaces.Messages;
|
||||||
using AyCode.Interfaces.Messages;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using AyCode.Models.Enums;
|
using AyCode.Models.Enums;
|
||||||
using AyCode.Models.Messages;
|
using TIAM.Entities.Emails;
|
||||||
|
|
||||||
namespace TIAMWebApp.Shared.Application.Models.ClientSide.Messages
|
namespace TIAMWebApp.Shared.Application.Models.ClientSide.Messages
|
||||||
{
|
{
|
||||||
|
|
||||||
public class MessageSenderModel<TMessageType> where TMessageType : NoticeBase
|
public class MessageSenderModel<TMessageType> where TMessageType : EmailMessage
|
||||||
{
|
{
|
||||||
public TMessageType Message { get; set; }
|
public TMessageType Message { get; set; }
|
||||||
//public NoticeBase? Message { get; set; }
|
//public NoticeBase? Message { get; set; }
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,4 @@
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using AyCode.Models.Messages;
|
|
||||||
using Microsoft.IdentityModel.Tokens;
|
using Microsoft.IdentityModel.Tokens;
|
||||||
using TIAM.Entities.Users;
|
using TIAM.Entities.Users;
|
||||||
using TIAM.Models.Dtos.Users;
|
using TIAM.Models.Dtos.Users;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue