Refactoring EmailMessage, EmailRecipient, MessageSenderService, etc...

This commit is contained in:
jozsef.b@aycode.com 2024-04-27 19:08:58 +02:00
parent ae741bc6a7
commit 4026ebae5f
15 changed files with 55 additions and 83 deletions

View File

@ -7,7 +7,7 @@ using TIAM.Database.DbContexts.Users;
namespace TIAM.Database.Test namespace TIAM.Database.Test
{ {
[TestClass] [TestClass]
public class DatabaseTest : AcDatabaseTestBase<DbContextBase> public class DatabaseTestBase : AcDatabaseTestBase<DbContextBase>
{ {
[TestInitialize] [TestInitialize]
public void Setup() public void Setup()

View File

@ -59,12 +59,6 @@
<Reference Include="AyCode.Models.Server"> <Reference Include="AyCode.Models.Server">
<HintPath>..\..\AyCode.Core\AyCode.Services.Server\bin\Debug\net8.0\AyCode.Models.Server.dll</HintPath> <HintPath>..\..\AyCode.Core\AyCode.Services.Server\bin\Debug\net8.0\AyCode.Models.Server.dll</HintPath>
</Reference> </Reference>
<Reference Include="AyCode.Services">
<HintPath>..\..\AyCode.Core\AyCode.Services.Server\bin\Debug\net8.0\AyCode.Services.dll</HintPath>
</Reference>
<Reference Include="AyCode.Services.Server">
<HintPath>..\..\AyCode.Core\AyCode.Services.Server\bin\Debug\net8.0\AyCode.Services.Server.dll</HintPath>
</Reference>
<Reference Include="AyCode.Utils"> <Reference Include="AyCode.Utils">
<HintPath>..\..\AyCode.Core\AyCode.Services.Server\bin\Debug\net8.0\AyCode.Utils.dll</HintPath> <HintPath>..\..\AyCode.Core\AyCode.Services.Server\bin\Debug\net8.0\AyCode.Utils.dll</HintPath>
</Reference> </Reference>

View File

@ -1,49 +1,21 @@
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 : IEntityGuid, ITimeStampInfo, IEmailRecipientsRelation, IEmailAddress public class EmailMessage : AcEmailMessage<EmailRecipient> //IEntityGuid, ITimeStampInfo, IEmailRecipientsRelation, IEmailAddress
{ {
public EmailMessage() public EmailMessage()
{ {
} }
public EmailMessage(Guid id, Guid? senderId, Guid contextId, string subject, string? text, string emailAddress) : this() public EmailMessage(Guid id, Guid? senderId, Guid contextId, string subject, string? text, string emailAddress) : base(id, senderId, contextId, subject, text, emailAddress)
{ {
Id = id;
SenderId = senderId;
ContextId = contextId;
Subject = subject;
Text = text;
EmailAddress = emailAddress;
} }
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public Guid Id { get; set; }
public Guid ContextId { get; set; }
public Guid? SenderId { get; set; }
public virtual List<EmailRecipient> Recipients { get; set; } = [];
[MaxLength(150)]
public string EmailAddress { get; set; }
[MaxLength(100)]
public string Subject { get; set; }
public string? Text { get; set; }
public DateTime Created { get; set; }
public DateTime Modified { get; set; }
} }

View File

@ -2,35 +2,20 @@
using AyCode.Interfaces.TimeStampInfo; using AyCode.Interfaces.TimeStampInfo;
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using AyCode.Entities.Messages;
using AyCode.Interfaces.Users; using AyCode.Interfaces.Users;
namespace TIAM.Entities.Emails; namespace TIAM.Entities.Emails;
//Update efcore, aspnetcore to 8.0.1; Implement EmailMessage, EmailRecipient; refactoring, improvments, fixes, etc... //Update efcore, aspnetcore to 8.0.1; Implement EmailMessage, EmailRecipient; refactoring, improvments, fixes, etc...
public class EmailRecipient : IEntityGuid, ITimeStampInfo, IEmailMessageRelation, IEmailAddress [Table(nameof(EmailRecipient))]
public class EmailRecipient : AcEmailRecipient<EmailMessage> //IEntityGuid, ITimeStampInfo, IEmailMessageRelation, IEmailAddress
{ {
public EmailRecipient() public EmailRecipient()
{ {
} }
public EmailRecipient(Guid id, Guid recipientId, Guid emailMessageId, string emailAddress) : this() public EmailRecipient(Guid id, Guid recipientId, Guid emailMessageId, string emailAddress) : base(id, recipientId, emailMessageId, emailAddress)
{ {
Id = id;
RecipientId = recipientId;
EmailMessageId = emailMessageId;
EmailAddress = emailAddress;
} }
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public Guid Id { get; set; }
public Guid RecipientId { get; set; }
public Guid EmailMessageId { get; set; }
public string EmailAddress { get; set; }
public virtual EmailMessage EmailMessage { get; set; }
public DateTime Created { get; set; }
public DateTime Modified { get; set; }
} }

View File

@ -0,0 +1,8 @@
using AyCode.Interfaces.Messages;
namespace TIAM.Entities.Emails;
public interface IEmailMessage : IAcEmailMessage<IEmailRecipientBase>, IEmailMessageBase
{
}

View File

@ -0,0 +1,8 @@
using AyCode.Interfaces.Messages;
namespace TIAM.Entities.Emails;
public interface IEmailMessageBase : IAcEmailMessageBase
{
}

View File

@ -0,0 +1,8 @@
using AyCode.Interfaces.Messages;
namespace TIAM.Entities.Emails;
public interface IEmailRecipient : IAcEmailRecipient<IEmailMessage>, IEmailRecipientBase
{
}

View File

@ -0,0 +1,8 @@
using AyCode.Interfaces.Messages;
namespace TIAM.Entities.Emails;
public interface IEmailRecipientBase : IAcEmailRecipientBase
{
}

View File

@ -0,0 +1,7 @@
using AyCode.Interfaces.Messages;
namespace TIAM.Entities.Emails;
public interface IMessageSenderService : IAcMessageSenderService<EmailMessage, EmailRecipient>
{
}

View File

@ -1,5 +1,4 @@
using AyCode.Interfaces.Enums; using AyCode.Interfaces.Enums;
using AyCode.Interfaces.Messages;
using System.Diagnostics; using System.Diagnostics;
using TIAM.Entities.Transfers; using TIAM.Entities.Transfers;
using TIAM.Entities.Emails; using TIAM.Entities.Emails;

View File

@ -22,7 +22,6 @@ using TIAM.Entities.Users;
using TIAMWebApp.Server.ModelsTIAMWebApp.Shared.Application.Models; 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 TIAMWebApp.Shared.Application.Models.ClientSide.Messages; using TIAMWebApp.Shared.Application.Models.ClientSide.Messages;
using AyCode.Models.Enums; using AyCode.Models.Enums;
using TIAM.Database.DataLayers.Admins; using TIAM.Database.DataLayers.Admins;

View File

@ -1,4 +1,3 @@
using AyCode.Interfaces.Messages;
using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Http.Features;
using Microsoft.IdentityModel.Tokens; using Microsoft.IdentityModel.Tokens;

View File

@ -1,5 +1,4 @@
using System.Net; using System.Net;
using AyCode.Interfaces.Messages;
using SendGrid; using SendGrid;
using SendGrid.Helpers.Mail; using SendGrid.Helpers.Mail;
using AyCode.Models.Enums; using AyCode.Models.Enums;
@ -13,27 +12,16 @@ namespace TIAMWebApp.Server.Services
{ {
public class MessageSenderService(IConfiguration configuration, AdminDal adminDal) : IMessageSenderService public class MessageSenderService(IConfiguration configuration, AdminDal adminDal) : IMessageSenderService
{ {
//public AdminDal AdminDal = adminDal; public async Task<string> SendMessageAsync(EmailMessage message, int messageType)
public async Task<string> SendMessageAsync<TEmailMessage>(TEmailMessage message, int messageType) where TEmailMessage : EmailMessage
{ {
var result = ""; var result = "";
switch (messageType) switch (messageType)
{ {
case (int)MessageTypesEnum.email: case (int)MessageTypesEnum.email:
if (message is EmailMessage emailMessage) Console.WriteLine($@"EmailMessage!!!");
{ // Access DerivedClass properties
Console.WriteLine($@"EmailMessage!!!"); //var subject = emailMessage.Subject;
// Access DerivedClass properties result = (await SendMailWithSendgrid(message)).ToString(); //?? HttpStatusCode.BadRequest.ToString();
//var subject = emailMessage.Subject;
result = (await SendMailWithSendgrid(emailMessage)).ToString(); //?? HttpStatusCode.BadRequest.ToString();
}
else
{
// Access BaseClass properties
result = "Invalid message";
}
break; break;
case (int)MessageTypesEnum.sms: case (int)MessageTypesEnum.sms:
//await SendSmsWithTwilio(message.Message); //await SendSmsWithTwilio(message.Message);
@ -44,12 +32,11 @@ namespace TIAMWebApp.Server.Services
case (int)MessageTypesEnum.chat: case (int)MessageTypesEnum.chat:
//await SendChatWithSignalR(message.Message); //await SendChatWithSignalR(message.Message);
default: default:
break; break;
} }
return result; return result;
} }
public async Task<HttpStatusCode> SendMailWithSendgrid(EmailMessage message) public async Task<HttpStatusCode> SendMailWithSendgrid(EmailMessage message)

View File

@ -1,5 +1,4 @@
using AyCode.Interfaces.Messages; using TIAM.Entities.Emails;
using TIAM.Entities.Emails;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;

View File

@ -1,5 +1,4 @@
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;