From a05153b2677deb479e3b815ccabdccf9b53e8e98 Mon Sep 17 00:00:00 2001 From: "jozsef.b@aycode.com" <9Rj@D}fVwBaN> Date: Sat, 27 Apr 2024 19:06:15 +0200 Subject: [PATCH] Refactoring EmailMessage, EmailRecipient, MessageSenderService, etc... --- AyCode.Entities/AyCode.Entities.csproj | 4 ++ AyCode.Entities/Messages/AcEmailMessage.cs | 41 +++++++++++++++++++ AyCode.Entities/Messages/AcEmailRecipient.cs | 35 ++++++++++++++++ AyCode.Entities/Messages/NoticeBase.cs | 37 ----------------- AyCode.Interfaces/Messages/IAcEmailMessage.cs | 7 ++++ .../Messages/IAcEmailMessageBase.cs | 15 +++++++ .../Messages/IAcEmailMessageRelation.cs | 6 +++ .../Messages/IAcEmailRecipient.cs | 9 ++++ .../Messages/IAcEmailRecipientBase.cs | 11 +++++ .../Messages/IAcEmailRecipientsRelation.cs | 6 +++ .../Messages/IAcMessageSenderService.cs | 8 ++++ .../Messages/IMessageParticipants.cs | 8 ---- .../Messages/IMessageReceiver.cs | 9 ---- AyCode.Interfaces/Messages/IMessageSender.cs | 10 ----- .../Messages/IMessageSenderService.cs | 9 ---- AyCode.Interfaces/Messages/INoticeBase.cs | 12 ------ .../{IEmailAddress.cs => IAcEmailAddress.cs} | 2 +- AyCode.Interfaces/Users/IAcUserBase.cs | 2 +- .../Emails/AcEmailServiceServer.cs | 6 +-- 19 files changed, 146 insertions(+), 91 deletions(-) create mode 100644 AyCode.Entities/Messages/AcEmailMessage.cs create mode 100644 AyCode.Entities/Messages/AcEmailRecipient.cs delete mode 100644 AyCode.Entities/Messages/NoticeBase.cs create mode 100644 AyCode.Interfaces/Messages/IAcEmailMessage.cs create mode 100644 AyCode.Interfaces/Messages/IAcEmailMessageBase.cs create mode 100644 AyCode.Interfaces/Messages/IAcEmailMessageRelation.cs create mode 100644 AyCode.Interfaces/Messages/IAcEmailRecipient.cs create mode 100644 AyCode.Interfaces/Messages/IAcEmailRecipientBase.cs create mode 100644 AyCode.Interfaces/Messages/IAcEmailRecipientsRelation.cs create mode 100644 AyCode.Interfaces/Messages/IAcMessageSenderService.cs delete mode 100644 AyCode.Interfaces/Messages/IMessageParticipants.cs delete mode 100644 AyCode.Interfaces/Messages/IMessageReceiver.cs delete mode 100644 AyCode.Interfaces/Messages/IMessageSender.cs delete mode 100644 AyCode.Interfaces/Messages/IMessageSenderService.cs delete mode 100644 AyCode.Interfaces/Messages/INoticeBase.cs rename AyCode.Interfaces/Users/{IEmailAddress.cs => IAcEmailAddress.cs} (91%) diff --git a/AyCode.Entities/AyCode.Entities.csproj b/AyCode.Entities/AyCode.Entities.csproj index c3047fd..1437f67 100644 --- a/AyCode.Entities/AyCode.Entities.csproj +++ b/AyCode.Entities/AyCode.Entities.csproj @@ -10,4 +10,8 @@ + + + + diff --git a/AyCode.Entities/Messages/AcEmailMessage.cs b/AyCode.Entities/Messages/AcEmailMessage.cs new file mode 100644 index 0000000..adc3473 --- /dev/null +++ b/AyCode.Entities/Messages/AcEmailMessage.cs @@ -0,0 +1,41 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Net.Mail; +using AyCode.Interfaces.Messages; + +namespace AyCode.Entities.Messages; + +[Table("EmailMessage")] +public abstract class AcEmailMessage : IAcEmailMessage where TEmailRecipient : IAcEmailRecipientBase +{ + protected AcEmailMessage() + { + } + + protected AcEmailMessage(Guid id, Guid? senderId, Guid contextId, string subject, string? text, string emailAddress) : this() + { + 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 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; } +} \ No newline at end of file diff --git a/AyCode.Entities/Messages/AcEmailRecipient.cs b/AyCode.Entities/Messages/AcEmailRecipient.cs new file mode 100644 index 0000000..8e9cdad --- /dev/null +++ b/AyCode.Entities/Messages/AcEmailRecipient.cs @@ -0,0 +1,35 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using System.Net.Mail; +using AyCode.Interfaces.Messages; + +namespace AyCode.Entities.Messages; + +[Table("EmailRecipient")] +public abstract class AcEmailRecipient : IAcEmailRecipient where TEmailMessage : IAcEmailMessageBase +{ + protected AcEmailRecipient() + { + } + + protected AcEmailRecipient(Guid id, Guid recipientId, Guid emailMessageId, string emailAddress) : this() + { + 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 TEmailMessage EmailMessage { get; set; } + + public DateTime Created { get; set; } + public DateTime Modified { get; set; } +} \ No newline at end of file diff --git a/AyCode.Entities/Messages/NoticeBase.cs b/AyCode.Entities/Messages/NoticeBase.cs deleted file mode 100644 index 8a1274f..0000000 --- a/AyCode.Entities/Messages/NoticeBase.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations.Schema; -using System.ComponentModel.DataAnnotations; -using AyCode.Interfaces.Messages; - -namespace AyCode.Entities.Messages -{ - //[Table("Notices")] - //public class NoticeBase : INoticeBase - //{ - - // public NoticeBase() { } - - // public NoticeBase(Guid senderId, Guid receiverId, string message) : this(Guid.NewGuid(), senderId, receiverId, message) { } - // public NoticeBase(Guid id, Guid senderId, Guid receiverId, string message) : this() - // { - // Id = id; - // SenderId = senderId; - // ReceiverId = receiverId; - // Message = message; - // } - - - // [Key, DatabaseGenerated(DatabaseGeneratedOption.None)] - // public Guid Id { get; set; } - // public Guid SenderId { get; set; } - - // public Guid ReceiverId { get; set; } - - // public string Message { get; set; } - - // public DateTime Created { get; set; } - // public DateTime Modified { get; set; } - - //} -} diff --git a/AyCode.Interfaces/Messages/IAcEmailMessage.cs b/AyCode.Interfaces/Messages/IAcEmailMessage.cs new file mode 100644 index 0000000..1214ad1 --- /dev/null +++ b/AyCode.Interfaces/Messages/IAcEmailMessage.cs @@ -0,0 +1,7 @@ +namespace AyCode.Interfaces.Messages; + +public interface IAcEmailMessage : IAcEmailMessageBase, IAcEmailRecipientsRelation + where TEmailRecipient : IAcEmailRecipientBase +{ + +} \ No newline at end of file diff --git a/AyCode.Interfaces/Messages/IAcEmailMessageBase.cs b/AyCode.Interfaces/Messages/IAcEmailMessageBase.cs new file mode 100644 index 0000000..6e27e67 --- /dev/null +++ b/AyCode.Interfaces/Messages/IAcEmailMessageBase.cs @@ -0,0 +1,15 @@ +using AyCode.Interfaces.Entities; +using AyCode.Interfaces.TimeStampInfo; +using AyCode.Interfaces.Users; + +namespace AyCode.Interfaces.Messages; + +public interface IAcEmailMessageBase : IEntityGuid, ITimeStampInfo, IAcEmailAddress +{ + + public Guid ContextId { get; set; } + public Guid? SenderId { get; set; } + + public string Subject { get; set; } + public string? Text { get; set; } +} \ No newline at end of file diff --git a/AyCode.Interfaces/Messages/IAcEmailMessageRelation.cs b/AyCode.Interfaces/Messages/IAcEmailMessageRelation.cs new file mode 100644 index 0000000..be94223 --- /dev/null +++ b/AyCode.Interfaces/Messages/IAcEmailMessageRelation.cs @@ -0,0 +1,6 @@ +namespace AyCode.Interfaces.Messages; + +public interface IAcEmailMessageRelation where TEmailMessage : IAcEmailMessageBase +{ + TEmailMessage EmailMessage { get; } +} \ No newline at end of file diff --git a/AyCode.Interfaces/Messages/IAcEmailRecipient.cs b/AyCode.Interfaces/Messages/IAcEmailRecipient.cs new file mode 100644 index 0000000..a986163 --- /dev/null +++ b/AyCode.Interfaces/Messages/IAcEmailRecipient.cs @@ -0,0 +1,9 @@ +using System.Net.Mail; + +namespace AyCode.Interfaces.Messages; + +public interface IAcEmailRecipient : IAcEmailRecipientBase, IAcEmailMessageRelation + where TEmailMessage : IAcEmailMessageBase +{ + +} \ No newline at end of file diff --git a/AyCode.Interfaces/Messages/IAcEmailRecipientBase.cs b/AyCode.Interfaces/Messages/IAcEmailRecipientBase.cs new file mode 100644 index 0000000..c7c9080 --- /dev/null +++ b/AyCode.Interfaces/Messages/IAcEmailRecipientBase.cs @@ -0,0 +1,11 @@ +using AyCode.Interfaces.Entities; +using AyCode.Interfaces.TimeStampInfo; +using AyCode.Interfaces.Users; + +namespace AyCode.Interfaces.Messages; + +public interface IAcEmailRecipientBase : IEntityGuid, ITimeStampInfo, IAcEmailAddress +{ + public Guid RecipientId { get; set; } + public Guid EmailMessageId { get; set; } +} \ No newline at end of file diff --git a/AyCode.Interfaces/Messages/IAcEmailRecipientsRelation.cs b/AyCode.Interfaces/Messages/IAcEmailRecipientsRelation.cs new file mode 100644 index 0000000..33e874b --- /dev/null +++ b/AyCode.Interfaces/Messages/IAcEmailRecipientsRelation.cs @@ -0,0 +1,6 @@ +namespace AyCode.Interfaces.Messages; + +public interface IAcEmailRecipientsRelation +{ + public List Recipients { get; set; } +} \ No newline at end of file diff --git a/AyCode.Interfaces/Messages/IAcMessageSenderService.cs b/AyCode.Interfaces/Messages/IAcMessageSenderService.cs new file mode 100644 index 0000000..da66e76 --- /dev/null +++ b/AyCode.Interfaces/Messages/IAcMessageSenderService.cs @@ -0,0 +1,8 @@ +namespace AyCode.Interfaces.Messages; + +public interface IAcMessageSenderService + where TEmailMessage : IAcEmailMessage + where TEmailRecipient : IAcEmailRecipientBase +{ + public Task SendMessageAsync(TEmailMessage message, int messageType); +} diff --git a/AyCode.Interfaces/Messages/IMessageParticipants.cs b/AyCode.Interfaces/Messages/IMessageParticipants.cs deleted file mode 100644 index 87adb98..0000000 --- a/AyCode.Interfaces/Messages/IMessageParticipants.cs +++ /dev/null @@ -1,8 +0,0 @@ - -namespace AyCode.Interfaces.Messages -{ - public interface IMessageParticipants : IMessageSender, IMessageReceiver - { - - } -} diff --git a/AyCode.Interfaces/Messages/IMessageReceiver.cs b/AyCode.Interfaces/Messages/IMessageReceiver.cs deleted file mode 100644 index 4cf12cd..0000000 --- a/AyCode.Interfaces/Messages/IMessageReceiver.cs +++ /dev/null @@ -1,9 +0,0 @@ -using AyCode.Interfaces.Entities; - -namespace AyCode.Interfaces.Messages -{ - public interface IMessageReceiver : IEntityGuid - { - - } -} diff --git a/AyCode.Interfaces/Messages/IMessageSender.cs b/AyCode.Interfaces/Messages/IMessageSender.cs deleted file mode 100644 index cee9407..0000000 --- a/AyCode.Interfaces/Messages/IMessageSender.cs +++ /dev/null @@ -1,10 +0,0 @@ - -using AyCode.Interfaces.Entities; - -namespace AyCode.Interfaces.Messages -{ - public interface IMessageSender : IEntityGuid - { - - } -} diff --git a/AyCode.Interfaces/Messages/IMessageSenderService.cs b/AyCode.Interfaces/Messages/IMessageSenderService.cs deleted file mode 100644 index f97cd5e..0000000 --- a/AyCode.Interfaces/Messages/IMessageSenderService.cs +++ /dev/null @@ -1,9 +0,0 @@ -using AyCode.Interfaces.Enums; - -namespace AyCode.Interfaces.Messages -{ - //public interface IMessageSenderService - //{ - // public Task SendMessageAsync(TNotice message, int messageType) where TNotice : class, ; - //} -} diff --git a/AyCode.Interfaces/Messages/INoticeBase.cs b/AyCode.Interfaces/Messages/INoticeBase.cs deleted file mode 100644 index f909ebd..0000000 --- a/AyCode.Interfaces/Messages/INoticeBase.cs +++ /dev/null @@ -1,12 +0,0 @@ - -using AyCode.Interfaces.Entities; -using AyCode.Interfaces.Enums; -using AyCode.Interfaces.TimeStampInfo; - -namespace AyCode.Interfaces.Messages -{ - //public interface INoticeBase : IEntityGuid, ITimeStampInfo, IMessageParticipants - //{ - // string Message { get; } - //} -} diff --git a/AyCode.Interfaces/Users/IEmailAddress.cs b/AyCode.Interfaces/Users/IAcEmailAddress.cs similarity index 91% rename from AyCode.Interfaces/Users/IEmailAddress.cs rename to AyCode.Interfaces/Users/IAcEmailAddress.cs index ffbdf3a..fe95262 100644 --- a/AyCode.Interfaces/Users/IEmailAddress.cs +++ b/AyCode.Interfaces/Users/IAcEmailAddress.cs @@ -6,7 +6,7 @@ using System.IO; namespace AyCode.Interfaces.Users; -public interface IEmailAddress +public interface IAcEmailAddress { [MaxLength(150)] string EmailAddress { get; set; } diff --git a/AyCode.Interfaces/Users/IAcUserBase.cs b/AyCode.Interfaces/Users/IAcUserBase.cs index 4cd9d96..cd67990 100644 --- a/AyCode.Interfaces/Users/IAcUserBase.cs +++ b/AyCode.Interfaces/Users/IAcUserBase.cs @@ -4,7 +4,7 @@ using AyCode.Interfaces.TimeStampInfo; namespace AyCode.Interfaces.Users; -public interface IAcUserBase : IEntityGuid, IAcProfileForeignKey, IEmailAddress, IEmailConfirmed, IPassword, ITimeStampInfo +public interface IAcUserBase : IEntityGuid, IAcProfileForeignKey, IAcEmailAddress, IEmailConfirmed, IPassword, ITimeStampInfo { public string? PhoneNumber { get; set; } public string? RefreshToken { get; set; } diff --git a/AyCode.Services.Server/Emails/AcEmailServiceServer.cs b/AyCode.Services.Server/Emails/AcEmailServiceServer.cs index e1ca784..1951686 100644 --- a/AyCode.Services.Server/Emails/AcEmailServiceServer.cs +++ b/AyCode.Services.Server/Emails/AcEmailServiceServer.cs @@ -11,15 +11,13 @@ public interface IAcEmailServiceServer } public class AcEmailServiceServer() : IAcEmailServiceServer { - private IConfiguration _configuration; private readonly SendGridClient _sendGridClient; private readonly EmailAddress _fromEmailAddress; public AcEmailServiceServer(IConfiguration configuration) : this() { - _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration)); - //_sendGridClient = new SendGridClient(_configuration.ServerUserName); - //_fromEmailAddress = new EmailAddress(_configuration.FromEmail, _configuration.FromName); + _sendGridClient = new SendGridClient(configuration["SendGrid:Key"]); + _fromEmailAddress = new EmailAddress(configuration["SendGrid:FromEmail"], configuration["SendGrid:FromName"]); //Console.WriteLine($"{config.ServerUserName}; {config.FromEmail}; {config.FromName}"); }