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}");
}