diff --git a/TIAM.Entities/Emails/EmailMessage.cs b/TIAM.Entities/Emails/EmailMessage.cs index 43fe9321..35aa73b1 100644 --- a/TIAM.Entities/Emails/EmailMessage.cs +++ b/TIAM.Entities/Emails/EmailMessage.cs @@ -1,15 +1,20 @@ using System.Collections.Specialized; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; -using AyCode.Entities.Messages; using AyCode.Interfaces.Entities; using AyCode.Interfaces.TimeStampInfo; using AyCode.Interfaces.Users; namespace TIAM.Entities.Emails; +public interface IMessageSenderService +{ + public Task SendMessageAsync(TEmailMessage message, int messageType) where TEmailMessage : EmailMessage; +} + + [Table(nameof(EmailMessage))] -public class EmailMessage : NoticeBase, IEntityGuid, ITimeStampInfo, IEmailRecipientsRelation, IEmailAddress +public class EmailMessage : IEntityGuid, ITimeStampInfo, IEmailRecipientsRelation, IEmailAddress { public EmailMessage() { diff --git a/TIAMMobileApp/Services/UserDataServiceMobile.cs b/TIAMMobileApp/Services/UserDataServiceMobile.cs index 85c7cb81..d2870530 100644 --- a/TIAMMobileApp/Services/UserDataServiceMobile.cs +++ b/TIAMMobileApp/Services/UserDataServiceMobile.cs @@ -14,16 +14,16 @@ namespace TIAMMobileApp.Services { public class UserDataServiceMobile : IUserDataService { - private readonly HttpClient http; - private readonly ISecureStorageHandler secureStorageHandler; + private readonly HttpClient _http; + private readonly ISecureStorageHandler _secureStorageHandler; private readonly IServiceProviderDataService _serviceProviderDataService; public Dictionary userRoleTypes { get => throw new NotImplementedException(); set => throw new NotImplementedException(); } public UserDataServiceMobile(HttpClient http, ISecureStorageHandler secureStorageHandler, IServiceProviderDataService serviceProviderDataService) { - this.http = http; - this.secureStorageHandler = secureStorageHandler; + this._http = http; + this._secureStorageHandler = secureStorageHandler; _serviceProviderDataService = serviceProviderDataService; } @@ -45,7 +45,7 @@ namespace TIAMMobileApp.Services public async Task IsLoggedInAsync(Guid id) { - var userModelDto = await GetUserByIdAsync(id); + var userModelDto = await GetUserDetailByIdAsync(id); if (userModelDto != null) { @@ -62,10 +62,10 @@ namespace TIAMMobileApp.Services } } - public async Task TestUserApi(int Param) + public async Task TestUserApi(int param) { var url = APIUrls.UserTest; - var response = await http.PostAsJsonAsync(url, Param); + var response = await _http.PostAsJsonAsync(url, param); var result = await response.Content.ReadAsStringAsync(); return result; } @@ -75,10 +75,10 @@ namespace TIAMMobileApp.Services - string result = string.Empty; + var result = string.Empty; var url = APIUrls.AuthenticateUser; - var response = await http.PostAsJsonAsync(url, loginModel); + var response = await _http.PostAsJsonAsync(url, loginModel); if (response.IsSuccessStatusCode) { @@ -98,11 +98,11 @@ namespace TIAMMobileApp.Services public async Task<(bool isSuccess, string ErrorMessage)> CreateUser(RegistrationModel regModel) { - bool isSuccess = true; - string result = string.Empty; + var isSuccess = true; + var result = string.Empty; var url = APIUrls.CreateUser; - var response = await http.PostAsJsonAsync(url, regModel); + var response = await _http.PostAsJsonAsync(url, regModel); result = await response.Content.ReadAsStringAsync(); /*if (response.IsSuccessStatusCode) { @@ -122,12 +122,12 @@ namespace TIAMMobileApp.Services public async Task<(bool isSuccess, UserModelDto? user)> CreateGuestUser(RegistrationModel regModel) { - bool isSuccess = false; - string result = string.Empty; + var isSuccess = false; + var result = string.Empty; UserModelDto? user; var url = $"{Setting.ApiBaseUrl}/{APIUrls.CreateGuestUser}"; - var response = await http.PostAsJsonAsync(url, regModel); + var response = await _http.PostAsJsonAsync(url, regModel); if (response.IsSuccessStatusCode) @@ -149,18 +149,18 @@ namespace TIAMMobileApp.Services public async Task?> GetUsersAsync() { - return await http.GetFromJsonAsync>(APIUrls.GetUsers); + return await _http.GetFromJsonAsync>(APIUrls.GetUsers); } public async Task?> GetUsersWithDetailsAsync() { - return await http.GetFromJsonAsync>(APIUrls.GetUsersWithDetails); + return await _http.GetFromJsonAsync>(APIUrls.GetUsersWithDetails); } public async Task GetUserByEmailAsync(string email) { 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 user = JsonConvert.DeserializeObject(result); return user; @@ -170,7 +170,7 @@ namespace TIAMMobileApp.Services var url = $"{Setting.ApiBaseUrl}/{APIUrls.GetUserById}"; //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 user = JsonConvert.DeserializeObject(result); @@ -179,7 +179,7 @@ namespace TIAMMobileApp.Services public async Task RefreshToken() { - bool isTokenRefreshed = false; + var isTokenRefreshed = false; using (var client = new HttpClient()) { var url = APIUrls.RefreshToken; @@ -195,7 +195,7 @@ namespace TIAMMobileApp.Services var response = await client.PostAsync(url, new StringContent(serializedStr, Encoding.UTF8, "application/json")); if (response.IsSuccessStatusCode) { - string contentStr = await response.Content.ReadAsStringAsync(); + var contentStr = await response.Content.ReadAsStringAsync(); var mainResponse = JsonConvert.DeserializeObject(contentStr); if (mainResponse.IsSuccess) { @@ -203,15 +203,15 @@ namespace TIAMMobileApp.Services Setting.UserBasicDetails.AccessToken = tokenDetails.AccessToken; Setting.UserBasicDetails.RefreshToken = tokenDetails.RefreshToken; - string userDetailsStr = JsonConvert.SerializeObject(Setting.UserBasicDetails); - await secureStorageHandler.SaveToSecureStorageAsync(nameof(Setting.UserBasicDetails), userDetailsStr); + var userDetailsStr = JsonConvert.SerializeObject(Setting.UserBasicDetails); + await _secureStorageHandler.SaveToSecureStorageAsync(nameof(Setting.UserBasicDetails), userDetailsStr); isTokenRefreshed = true; } } } catch (Exception ex) { - string msg = ex.Message; + var msg = ex.Message; } @@ -224,7 +224,7 @@ namespace TIAMMobileApp.Services { //TODO Finish this //get the userModel's roles - int role = userModel.UserRoles; + var role = userModel.UserRoles; foreach (var roleType in roleTypes) { @@ -245,7 +245,7 @@ namespace TIAMMobileApp.Services 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 user = JsonConvert.DeserializeObject(result); diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageProducts.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageProducts.razor index 42e8227d..9d27b7c5 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ManageProducts.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageProducts.razor @@ -1,5 +1,4 @@ @page "/user/products" -@using AyCode.Models.Messages @using TIAM.Entities.ServiceProviders @using TIAM.Resources @using TIAMSharedUI.Pages.Components diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor index ec49909e..4bf1f937 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageTransfers.razor @@ -1,5 +1,4 @@ @page "/user/transfers" -@using AyCode.Models.Messages @using BlazorAnimation @using TIAM.Core.Enums @using TIAM.Entities.ServiceProviders diff --git a/TIAMSharedUI/Pages/User/SysAdmins/ManageUsers.razor b/TIAMSharedUI/Pages/User/SysAdmins/ManageUsers.razor index 67ddf023..0e4d7ffa 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/ManageUsers.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/ManageUsers.razor @@ -1,5 +1,4 @@ @page "/user/users" -@using AyCode.Models.Messages @using BlazorAnimation @using TIAM.Core.Enums @using TIAM.Entities.Products diff --git a/TIAMSharedUI/Pages/User/SysAdmins/TransferDestinations.razor b/TIAMSharedUI/Pages/User/SysAdmins/TransferDestinations.razor index 14df84f3..d50494bc 100644 --- a/TIAMSharedUI/Pages/User/SysAdmins/TransferDestinations.razor +++ b/TIAMSharedUI/Pages/User/SysAdmins/TransferDestinations.razor @@ -1,5 +1,4 @@ @page "/user/destinations" -@using AyCode.Models.Messages @using BlazorAnimation @using TIAM.Entities.ServiceProviders @using TIAM.Resources diff --git a/TIAMWebApp/Server/Controllers/MessageAPIController.cs b/TIAMWebApp/Server/Controllers/MessageAPIController.cs index 0d27248a..b328600e 100644 --- a/TIAMWebApp/Server/Controllers/MessageAPIController.cs +++ b/TIAMWebApp/Server/Controllers/MessageAPIController.cs @@ -23,11 +23,10 @@ using TIAMWebApp.Server.ModelsTIAMWebApp.Shared.Application.Models; using TIAMWebApp.Shared.Application.Utility; using TIAM.Entities.Auctions; using AyCode.Interfaces.Messages; -using AyCode.Entities.Messages; using TIAMWebApp.Shared.Application.Models.ClientSide.Messages; -using AyCode.Models.Messages; using AyCode.Models.Enums; using TIAM.Database.DataLayers.Admins; +using TIAM.Entities.Emails; using TIAM.Models.Dtos.Users; namespace TIAMWebApp.Server.Controllers diff --git a/TIAMWebApp/Server/Program.cs b/TIAMWebApp/Server/Program.cs index c487a7ff..c41924a3 100644 --- a/TIAMWebApp/Server/Program.cs +++ b/TIAMWebApp/Server/Program.cs @@ -8,6 +8,7 @@ using TIAM.Database.DataLayers.Admins; using TIAM.Database.DataLayers.Auctions; using TIAM.Database.DataLayers.TransferDestinations; using TIAM.Database.DataLayers.Users; +using TIAM.Entities.Emails; using TIAMWebApp.Server.Services; //using TIAM.Database.DataLayers.ServiceProviders; @@ -88,7 +89,7 @@ builder.Services.Configure(options => options.MultipartBodyLengthLimit = 200000000; // Increase the limit to 200MB }); -builder.Services.AddScoped(); +builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); diff --git a/TIAMWebApp/Server/Services/MessageSenderService.cs b/TIAMWebApp/Server/Services/MessageSenderService.cs new file mode 100644 index 00000000..7a2fe8f5 --- /dev/null +++ b/TIAMWebApp/Server/Services/MessageSenderService.cs @@ -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 SendMessageAsync(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 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; + } + + } +} diff --git a/TIAMWebApp/Server/Services/NoticeSenderService.cs b/TIAMWebApp/Server/Services/NoticeSenderService.cs deleted file mode 100644 index 740e491f..00000000 --- a/TIAMWebApp/Server/Services/NoticeSenderService.cs +++ /dev/null @@ -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 SendMessageAsync(TNotice message, int messageType) where TNotice : class, INoticeBase - { - string result = ""; - switch (messageType) - { - case (int)MessageTypesEnum.email: - if (message is MessageSenderModel 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 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(); - } - - } -} diff --git a/TIAMWebApp/Shared/Models/ClientSide/Messages/MessageSenderModel.cs b/TIAMWebApp/Shared/Models/ClientSide/Messages/MessageSenderModel.cs index 114c99e2..4a984ed7 100644 --- a/TIAMWebApp/Shared/Models/ClientSide/Messages/MessageSenderModel.cs +++ b/TIAMWebApp/Shared/Models/ClientSide/Messages/MessageSenderModel.cs @@ -1,17 +1,16 @@ -using AyCode.Entities.Messages; -using AyCode.Interfaces.Messages; +using AyCode.Interfaces.Messages; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using AyCode.Models.Enums; -using AyCode.Models.Messages; +using TIAM.Entities.Emails; namespace TIAMWebApp.Shared.Application.Models.ClientSide.Messages { - public class MessageSenderModel where TMessageType : NoticeBase + public class MessageSenderModel where TMessageType : EmailMessage { public TMessageType Message { get; set; } //public NoticeBase? Message { get; set; } diff --git a/TIAMWebApp/Shared/Models/UserSessionModel.cs b/TIAMWebApp/Shared/Models/UserSessionModel.cs index 31368bf8..545fda70 100644 --- a/TIAMWebApp/Shared/Models/UserSessionModel.cs +++ b/TIAMWebApp/Shared/Models/UserSessionModel.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using AyCode.Models.Messages; using Microsoft.IdentityModel.Tokens; using TIAM.Entities.Users; using TIAM.Models.Dtos.Users;