EmailMessage fixes;

This commit is contained in:
jozsef.b@aycode.com 2024-04-24 19:34:02 +02:00
parent a8e835b252
commit ae741bc6a7
12 changed files with 136 additions and 130 deletions

View File

@ -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<string> SendMessageAsync<TEmailMessage>(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()
{

View File

@ -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<int, string> 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<UserSessionModel> 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<string> TestUserApi(int Param)
public async Task<string> 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<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()
{
return await http.GetFromJsonAsync<List<UserModelDtoDetail>>(APIUrls.GetUsersWithDetails);
return await _http.GetFromJsonAsync<List<UserModelDtoDetail>>(APIUrls.GetUsersWithDetails);
}
public async Task<UserModelDto?> 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<UserModelDto>(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<UserModelDto>(result);
@ -179,7 +179,7 @@ namespace TIAMMobileApp.Services
public async Task<bool> 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<MainResponse>(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<UserModelDtoDetail>(result);

View File

@ -1,5 +1,4 @@
@page "/user/products"
@using AyCode.Models.Messages
@using TIAM.Entities.ServiceProviders
@using TIAM.Resources
@using TIAMSharedUI.Pages.Components

View File

@ -1,5 +1,4 @@
@page "/user/transfers"
@using AyCode.Models.Messages
@using BlazorAnimation
@using TIAM.Core.Enums
@using TIAM.Entities.ServiceProviders

View File

@ -1,5 +1,4 @@
@page "/user/users"
@using AyCode.Models.Messages
@using BlazorAnimation
@using TIAM.Core.Enums
@using TIAM.Entities.Products

View File

@ -1,5 +1,4 @@
@page "/user/destinations"
@using AyCode.Models.Messages
@using BlazorAnimation
@using TIAM.Entities.ServiceProviders
@using TIAM.Resources

View File

@ -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

View File

@ -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<FormOptions>(options =>
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.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

View File

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

View File

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

View File

@ -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<TMessageType> where TMessageType : NoticeBase
public class MessageSenderModel<TMessageType> where TMessageType : EmailMessage
{
public TMessageType Message { get; set; }
//public NoticeBase? Message { get; set; }

View File

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