diff --git a/TIAM.Database.Test/AdminDalTest.cs b/TIAM.Database.Test/AdminDalTest.cs
index da2fcdf6..856a9049 100644
--- a/TIAM.Database.Test/AdminDalTest.cs
+++ b/TIAM.Database.Test/AdminDalTest.cs
@@ -5,7 +5,9 @@ using TIAM.Core;
using TIAM.Core.Enums;
using TIAM.Database.DataLayers.Admins;
using TIAM.Database.DbContexts.Admins;
+using TIAM.Database.DbSets.Emails;
using TIAM.Entities.Drivers;
+using TIAM.Entities.Emails;
using TIAM.Entities.Products;
using TIAM.Entities.Users;
using TIAM.Models.Dtos.Users;
@@ -371,7 +373,85 @@ namespace TIAM.Database.Test
Assert.IsNull(transfer); //a korábbi törlés miatt NULL kell legyen - J.
}
- #endregion Trnsfer
+ #endregion Transfer
+
+ #region EmailMessage
+ [DataTestMethod]
+ [DataRow("f6ec3eed-5e00-47db-a6cf-804699515aa2")]
+ public async Task GetEmailMessageById_ReturnsEmailMessage_WhenHasEmailMessage(string emailMessageIdString)
+ {
+ var emailMessageId = Guid.Parse(emailMessageIdString);
+ var emailMessage = await Dal.GetEmailMessageByIdAsync(emailMessageId);
+
+ Assert.IsNotNull(emailMessage);
+
+ Assert.IsTrue(emailMessage.Recipients?.Count > 0);
+ Assert.IsTrue(emailMessage.Id == emailMessageId, "emailMessage.Id != emailMessageId");
+ }
+
+ [DataTestMethod]
+ [DataRow(["4CBAED43-2465-4D99-84F1-C8BC6B7025F7", "71392cfd-fb9c-45c1-9540-7be3782cf26a"])]
+ public async Task GetMyEmailMessagesByUserProductMappingId_ReturnsEmailMessages_WhenHasEmailMessageAndAllRecipientIsValid(string[] userIdUserProductMappingIdString)
+ {
+ var userId = Guid.Parse(userIdUserProductMappingIdString[0]);
+ var userProductMappingId = Guid.Parse(userIdUserProductMappingIdString[1]);
+
+ var emailMessages = await Dal.GetEmailMessagesAsync(userId, userProductMappingId);
+
+ Assert.IsNotNull(emailMessages);
+
+ Assert.IsTrue(emailMessages.Count > 0);
+ Assert.IsTrue(emailMessages.All(x => x.Recipients.Any(recipient => recipient.RecipientId == userId || recipient.RecipientId == userProductMappingId)));
+ }
+
+ [DataTestMethod]
+ [DataRow(["718b04ef-47a7-444e-8527-54460a7f1ea3", "71392cfd-fb9c-45c1-9540-7be3782cf26a", "6216f9fb-1dda-44bd-9d85-431f3cb09fde", "test@tiam.hu", "AC612AA8-863B-4B4F-9D63-F5D261B5C5F9"])]
+ public async Task EmailMessageCrudTest(string[] emailIdSenderIdContextIdSenderEmailRecipientIdStrings)
+ {
+ var emailMessageId = Guid.Parse(emailIdSenderIdContextIdSenderEmailRecipientIdStrings[0]);
+ var senderId = Guid.Parse(emailIdSenderIdContextIdSenderEmailRecipientIdStrings[1]);
+ var contextId = Guid.Parse(emailIdSenderIdContextIdSenderEmailRecipientIdStrings[2]);
+ var senderEmail = emailIdSenderIdContextIdSenderEmailRecipientIdStrings[3];
+ var recipientId = Guid.Parse(emailIdSenderIdContextIdSenderEmailRecipientIdStrings[4]);
+
+ var subject = "Transfer - Budapest, Liszt Ferenc tér";
+ var text = "1211 Budapest, Kossuth Lajos utca 145";
+
+ await Dal.RemoveEmailMessageAsync(emailMessageId); //kitöröljük a szemetet, ha korábbról bentmaradt - J.
+
+ var emailMessage = new EmailMessage(emailMessageId, senderId, contextId, subject, text, senderEmail);
+ emailMessage.Recipients.Add(new EmailRecipient(id: Guid.NewGuid(), recipientId, emailMessageId));
+
+
+ Assert.IsTrue(await Dal.AddEmailMessageAsync(emailMessage));
+ Assert.IsNotNull(emailMessage);
+
+ emailMessage = await Dal.GetEmailMessageByIdAsync(emailMessageId);
+
+ Assert.IsNotNull(emailMessage);
+ Assert.IsTrue(emailMessage.Recipients?.Count > 0);
+
+ var modifiedText = "modifiedText";
+ emailMessage.Text = modifiedText;
+
+
+ Assert.IsTrue(await Dal.UpdateEmailMessageAsync(emailMessage));
+
+ emailMessage = await Dal.GetEmailMessageByIdAsync(emailMessageId);
+
+ Assert.IsNotNull(emailMessage);
+ Assert.IsTrue(emailMessage.Recipients?.Count > 0);
+
+ Assert.IsTrue(emailMessage.Text == modifiedText);
+ Assert.IsTrue(emailMessage.Id == emailMessageId, "emailMessage.Id != emailMessageId");
+
+ Assert.IsTrue(await Dal.RemoveEmailMessageAsync(emailMessageId)); //mielőbb kitöröljük, h ne maradjon szemét a db-ben - J.
+
+ emailMessage = await Dal.GetEmailMessageByIdAsync(emailMessageId);
+ Assert.IsNull(emailMessage); //a korábbi törlés miatt NULL kell legyen - J.
+ }
+
+ #endregion EmailMessage
}
}
\ No newline at end of file
diff --git a/TIAM.Database.Test/TIAM.Database.Test.csproj b/TIAM.Database.Test/TIAM.Database.Test.csproj
index fa7c56fa..bfb33943 100644
--- a/TIAM.Database.Test/TIAM.Database.Test.csproj
+++ b/TIAM.Database.Test/TIAM.Database.Test.csproj
@@ -10,10 +10,10 @@
-
-
-
-
+
+
+
+
diff --git a/TIAM.Database/DataLayers/Admins/AdminDal.cs b/TIAM.Database/DataLayers/Admins/AdminDal.cs
index c722f39b..e62d38df 100644
--- a/TIAM.Database/DataLayers/Admins/AdminDal.cs
+++ b/TIAM.Database/DataLayers/Admins/AdminDal.cs
@@ -6,11 +6,13 @@ using Microsoft.Extensions.DependencyInjection;
using TIAM.Core;
//using TIAM.Database.DataLayers.ServiceProviders;
using TIAM.Database.DbContexts.Admins;
+using TIAM.Database.DbSets.Emails;
using TIAM.Database.DbSets.Permissions;
using TIAM.Database.DbSets.Products;
using TIAM.Database.DbSets.Transfers;
using TIAM.Database.DbSets.Users;
using TIAM.Entities.Drivers;
+using TIAM.Entities.Emails;
using TIAM.Entities.Permissions;
using TIAM.Entities.Products;
using TIAM.Entities.ServiceProviders;
@@ -78,7 +80,7 @@ namespace TIAM.Database.DataLayers.Admins
#region UserProductMapping
public Task AddUserProductMappingAsync(UserProductMapping userProductMapping)
- => TransactionAsync(ctx => ctx.AddUserProductMapping(userProductMapping) && ctx.SaveChanges() == 1);
+ => TransactionAsync(ctx => ctx.AddUserProductMapping(userProductMapping) && ctx.SaveChanges() > 0);
public async Task AddUserProductMappingAsync(Guid userProductMappingId, Guid userId, Guid productId, int permissions = 1, UserProductJsonDetailModel? userProductToCars = null)
{
@@ -88,7 +90,7 @@ namespace TIAM.Database.DataLayers.Admins
{
userProductMapping = ctx.AddUserProductMapping(userProductMappingId, userId, productId, permissions, userProductToCars);
- return userProductMapping != null && ctx.SaveChanges() == 1;
+ return userProductMapping != null && ctx.SaveChanges() > 0;
});
return isSucces ? userProductMapping : null;
@@ -105,20 +107,40 @@ namespace TIAM.Database.DataLayers.Admins
{
userProductMapping = ctx.UpdateUserProductMapping(userProductMappingId, permissions, userProductToCars);
- return userProductMapping != null && ctx.SaveChanges() == 1;
+ return userProductMapping != null && ctx.SaveChanges() > 0;
});
return isSucces ? userProductMapping : null;
}
public Task RemoveUserProductMappingAsync(Guid userProductMappingId)
- => TransactionAsync(ctx => ctx.RemoveUserProductMapping(userProductMappingId) && ctx.SaveChanges() == 1);
+ => TransactionAsync(ctx => ctx.RemoveUserProductMapping(userProductMappingId) && ctx.SaveChanges() > 0);
public Task RemoveUserProductMappingAsync(Guid userId, Guid productId)
- => TransactionAsync(ctx => ctx.RemoveUserProductMapping(userId, productId) && ctx.SaveChanges() == 1);
+ => TransactionAsync(ctx => ctx.RemoveUserProductMapping(userId, productId) && ctx.SaveChanges() > 0);
#endregion UserProductMapping
+ #region EmailMessage
+ public Task GetEmailMessageByIdAsync(Guid emailMessageId) => SessionAsync(ctx => ctx.GetEmailMessageById(emailMessageId));
+ public Task> GetEmailMessagesByContextIdAsync(Guid contextId) => SessionAsync(ctx => ctx.GetEmailMessagesByContextId(contextId).ToList());
+ public Task> GetEmailMessagesBySenderIdAsync(Guid senderId) => SessionAsync(ctx => ctx.GetEmailMessagesBySenderId(senderId).ToList());
+ public Task> GetEmailMessagesBySenderEmailAddressAsync(string emailAddress) => SessionAsync(ctx => ctx.GetEmailMessagesBySenderEmailAddress(emailAddress).ToList());
+ public Task> GetEmailMessagesAsync(Guid userId, Guid userProductMappingId) => SessionAsync(ctx => ctx.GetEmailMessages(userId, userProductMappingId).ToList());
+ public Task> GetEmailMessagesAsync(Guid contextId, Guid userId, Guid userProductMappingId) => SessionAsync(ctx => ctx.GetEmailMessages(contextId, userId, userProductMappingId).ToList());
+
+
+ public Task AddEmailMessageAsync(EmailMessage emailMessage)
+ => TransactionAsync(ctx => ctx.AddEmailMessage(emailMessage) && ctx.SaveChanges() > 0);
+
+ public Task UpdateEmailMessageAsync(EmailMessage emailMessage)
+ => TransactionAsync(ctx => ctx.UpdateEmailMessage(emailMessage) && ctx.SaveChanges() > 0);
+
+ public Task RemoveEmailMessageAsync(Guid emailMessageId)
+ => TransactionAsync(ctx => ctx.RemoveEmailMessage(emailMessageId) && ctx.SaveChanges() > 0);
+
+ #endregion EmailMessage
+
//15. (IServiceProviderDataService) Create service provider
public Task CreateServiceProviderAsync(TiamServiceProvider serviceProvider)
{
diff --git a/TIAM.Database/DbContexts/Admins/AdminDbContext.cs b/TIAM.Database/DbContexts/Admins/AdminDbContext.cs
index 7bc5e156..2ec3af26 100644
--- a/TIAM.Database/DbContexts/Admins/AdminDbContext.cs
+++ b/TIAM.Database/DbContexts/Admins/AdminDbContext.cs
@@ -5,11 +5,13 @@ using System.Text;
using System.Threading.Tasks;
using AyCode.Database.DbContexts;
using Microsoft.EntityFrameworkCore;
+using TIAM.Database.ModelBuilders.Emails;
using TIAM.Database.ModelBuilders.Products;
using TIAM.Database.ModelBuilders.Transfers;
using TIAM.Database.ModelBuilders.Users;
using TIAM.Entities.Addresses;
using TIAM.Entities.Drivers;
+using TIAM.Entities.Emails;
using TIAM.Entities.Permissions;
using TIAM.Entities.Products;
using TIAM.Entities.ServiceProviders;
@@ -32,6 +34,9 @@ namespace TIAM.Database.DbContexts.Admins
public DbSet PermissionGroupUserMappings { get; set; }
public DbSet PermissionContextMappings { get; set; }
public DbSet PermissionsTypes { get; set; }
+
+ public DbSet EmailMessages { get; set; }
+
public DbSet Addresses { get; set; }
public AdminDbContext() //: this(string.Empty)
@@ -63,6 +68,7 @@ namespace TIAM.Database.DbContexts.Admins
new TransferEntityTypeDefaultConfigurations().Configure(modelBuilder.Entity());
modelBuilder.Entity().Navigation(e => e.Address).AutoInclude(true);
+ new EmailMessageEntityTypeDefaultConfigurations().Configure(modelBuilder.Entity());
//modelBuilder.Entity().Ignore(x => x.Id);
//modelBuilder.Entity().Ignore(x => x.Id);
diff --git a/TIAM.Database/DbContexts/Admins/IAdminDbContext.cs b/TIAM.Database/DbContexts/Admins/IAdminDbContext.cs
index c6f0b79d..269a8e01 100644
--- a/TIAM.Database/DbContexts/Admins/IAdminDbContext.cs
+++ b/TIAM.Database/DbContexts/Admins/IAdminDbContext.cs
@@ -1,4 +1,5 @@
using TIAM.Database.DbSets.Addresses;
+using TIAM.Database.DbSets.Emails;
using TIAM.Database.DbSets.Permissions;
using TIAM.Database.DbSets.Products;
using TIAM.Database.DbSets.ServiceProvider;
@@ -7,6 +8,7 @@ using TIAM.Database.DbSets.Users;
namespace TIAM.Database.DbContexts.Admins;
-public interface IAdminDbContext : IServiceProviderDbSet, IProductDbSet, IUserProductMappingDbSet, IUserDbSet, IPermissionsDbSetContext, IAddressDbSet, ITransferDestinationDbSet, ITransferDbSet
+public interface IAdminDbContext :
+ IServiceProviderDbSet, IProductDbSet, IUserProductMappingDbSet, IUserDbSet, IPermissionsDbSetContext, IAddressDbSet, ITransferDestinationDbSet, ITransferDbSet, IEmailMessageDbSet
{
}
\ No newline at end of file
diff --git a/TIAM.Database/DbContexts/Users/IUserDbContext.cs b/TIAM.Database/DbContexts/Users/IUserDbContext.cs
index 0b35dec0..d59e1269 100644
--- a/TIAM.Database/DbContexts/Users/IUserDbContext.cs
+++ b/TIAM.Database/DbContexts/Users/IUserDbContext.cs
@@ -1,6 +1,7 @@
using AyCode.Database.DbContexts.Users;
using AyCode.Entities.Users;
using TIAM.Database.DbSets.Addresses;
+using TIAM.Database.DbSets.Emails;
using TIAM.Database.DbSets.Transfers;
using TIAM.Database.DbSets.Users;
using TIAM.Entities.Addresses;
@@ -10,6 +11,6 @@ using TIAM.Entities.Users;
namespace TIAM.Database.DbContexts.Users;
-public interface IUserDbContext : IAcUserDbContextBase, IUserDbSet, IAddressDbSet, ITransferDestinationDbSet
-{
-}
\ No newline at end of file
+public interface IUserDbContext :
+ IAcUserDbContextBase, IUserDbSet, IAddressDbSet, ITransferDestinationDbSet, ITransferDbSet, IEmailMessageDbSet
+{ }
\ No newline at end of file
diff --git a/TIAM.Database/DbContexts/Users/UserDbContext.cs b/TIAM.Database/DbContexts/Users/UserDbContext.cs
index 681d9f9b..faee1b2b 100644
--- a/TIAM.Database/DbContexts/Users/UserDbContext.cs
+++ b/TIAM.Database/DbContexts/Users/UserDbContext.cs
@@ -11,12 +11,16 @@ using AyCode.Entities.Users;
using AyCode.Interfaces.Users;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Options;
+using TIAM.Database.ModelBuilders.Emails;
using TIAM.Database.ModelBuilders.Products;
+using TIAM.Database.ModelBuilders.Transfers;
using TIAM.Database.ModelBuilders.Users;
using TIAM.Entities.Addresses;
+using TIAM.Entities.Emails;
using TIAM.Entities.Permissions;
using TIAM.Entities.Products;
using TIAM.Entities.TransferDestinations;
+using TIAM.Entities.Transfers;
using TIAM.Entities.Users;
namespace TIAM.Database.DbContexts.Users
@@ -27,7 +31,11 @@ namespace TIAM.Database.DbContexts.Users
public DbSet UserTokens { get; set; }
public DbSet Addresses { get; set; }
- public DbSet TransferDestinations { get; }
+
+ public DbSet Transfers { get; set; }
+ public DbSet EmailMessages { get; set; }
+
+ public DbSet TransferDestinations { get; set; }
public UserDbContext() //: this(string.Empty)
{
@@ -59,8 +67,12 @@ namespace TIAM.Database.DbContexts.Users
new UserEntityTypeDefaultConfiguration().Configure(modelBuilder.Entity());
new ProductEntityTypeDefaultConfiguration().Configure(modelBuilder.Entity());
+ new TransferEntityTypeDefaultConfigurations().Configure(modelBuilder.Entity());
modelBuilder.Entity().Navigation(e => e.Address).AutoInclude(true);
+ new EmailMessageEntityTypeDefaultConfigurations().Configure(modelBuilder.Entity());
+
+
//modelBuilder.Entity().BuildProductToServiceProviderRelation();
//new UserProductMappingEntityTypeDefaultConfiguration().Configure(modelBuilder.Entity());
diff --git a/TIAM.Database/DbSets/Emails/EmailMessageDbSetExtension.cs b/TIAM.Database/DbSets/Emails/EmailMessageDbSetExtension.cs
new file mode 100644
index 00000000..c2dd8385
--- /dev/null
+++ b/TIAM.Database/DbSets/Emails/EmailMessageDbSetExtension.cs
@@ -0,0 +1,50 @@
+using Microsoft.EntityFrameworkCore;
+using TIAM.Entities.Emails;
+using TIAM.Entities.Products;
+
+namespace TIAM.Database.DbSets.Emails;
+
+public static class EmailMessageDbSetExtension
+{
+ public static EmailMessage? GetEmailMessageById(this IEmailMessageDbSet ctx, Guid emailMessageId)
+ => ctx.EmailMessages.FirstOrDefault(x => x.Id == emailMessageId);
+
+ public static IQueryable GetEmailMessagesByContextId(this IEmailMessageDbSet ctx, Guid contextId)
+ => ctx.EmailMessages.Where(x => x.ContextId == contextId);
+
+ public static IQueryable GetEmailMessagesBySenderId(this IEmailMessageDbSet ctx, Guid senderId)
+ => ctx.EmailMessages.Where(x => x.SenderId == senderId);
+
+ public static IQueryable GetEmailMessagesBySenderEmailAddress(this IEmailMessageDbSet ctx, string senderEmailAddress)
+ => ctx.EmailMessages.Where(x => x.SenderEmailAddress == senderEmailAddress);
+
+ private static IQueryable GetEmailMessages(this IQueryable queryableEmails, Guid userId, Guid userProductMappingId)
+ => queryableEmails.Where(x => x.SenderId == userId || x.SenderId == userProductMappingId || x.Recipients.Any(recipient => recipient.RecipientId == userId || recipient.RecipientId == userProductMappingId));
+
+ public static IQueryable GetEmailMessages(this IEmailMessageDbSet ctx, Guid userId, Guid userProductMappingId)
+ => ctx.EmailMessages.GetEmailMessages(userId, userProductMappingId);
+
+ public static IQueryable GetEmailMessages(this IEmailMessageDbSet ctx, Guid contextId, Guid userId, Guid userProductMappingId)
+ => ctx.GetEmailMessagesByContextId(contextId).GetEmailMessages(userId, userProductMappingId);
+
+ #region Add, Update, Remove
+
+ public static bool AddEmailMessage(this IEmailMessageDbSet ctx, EmailMessage emailMessage)
+ => ctx.EmailMessages.Add(emailMessage).State == EntityState.Added;
+
+ public static bool UpdateEmailMessage(this IEmailMessageDbSet ctx, EmailMessage emailMessage)
+ => ctx.EmailMessages.Update(emailMessage).State == EntityState.Modified;
+
+ public static bool RemoveEmailMessage(this IEmailMessageDbSet ctx, Guid emailMessageId)
+ {
+ var emailMessage = ctx.GetEmailMessageById(emailMessageId);
+
+ return emailMessage == null || ctx.RemoveEmailMessage(emailMessage);
+ }
+
+ public static bool RemoveEmailMessage(this IEmailMessageDbSet ctx, EmailMessage emailMessage)
+ => ctx.EmailMessages.Remove(emailMessage).State == EntityState.Deleted;
+
+ #endregion Add, Update, Remove
+
+}
\ No newline at end of file
diff --git a/TIAM.Database/DbSets/Emails/IEmailMessageDbSet.cs b/TIAM.Database/DbSets/Emails/IEmailMessageDbSet.cs
new file mode 100644
index 00000000..f174e4f5
--- /dev/null
+++ b/TIAM.Database/DbSets/Emails/IEmailMessageDbSet.cs
@@ -0,0 +1,10 @@
+using Microsoft.EntityFrameworkCore;
+using TIAM.Entities.Emails;
+using TIAM.Entities.Permissions;
+
+namespace TIAM.Database.DbSets.Emails;
+
+public interface IEmailMessageDbSet
+{
+ public DbSet EmailMessages { get; set; }
+}
\ No newline at end of file
diff --git a/TIAM.Database/DbSets/Products/ProductDbSetExtensins.cs b/TIAM.Database/DbSets/Products/ProductDbSetExtensions.cs
similarity index 97%
rename from TIAM.Database/DbSets/Products/ProductDbSetExtensins.cs
rename to TIAM.Database/DbSets/Products/ProductDbSetExtensions.cs
index 097a11b2..6331e364 100644
--- a/TIAM.Database/DbSets/Products/ProductDbSetExtensins.cs
+++ b/TIAM.Database/DbSets/Products/ProductDbSetExtensions.cs
@@ -4,7 +4,7 @@ using TIAM.Entities.Products;
namespace TIAM.Database.DbSets.Products;
-public static class ProductDbSetExtensins
+public static class ProductDbSetExtensions
{
#region Add, Update, Remove
diff --git a/TIAM.Database/DbSets/Transfers/ITransferDbSet.cs b/TIAM.Database/DbSets/Transfers/ITransferDbSet.cs
index fb9ceeb8..72981e4f 100644
--- a/TIAM.Database/DbSets/Transfers/ITransferDbSet.cs
+++ b/TIAM.Database/DbSets/Transfers/ITransferDbSet.cs
@@ -6,5 +6,5 @@ namespace TIAM.Database.DbSets.Transfers;
public interface ITransferDbSet
{
- public DbSet Transfers { get; }
+ public DbSet Transfers { get; set; }
}
\ No newline at end of file
diff --git a/TIAM.Database/DbSets/Transfers/ITransferDestinationDbSet.cs b/TIAM.Database/DbSets/Transfers/ITransferDestinationDbSet.cs
index ef7fd126..bb4c1f12 100644
--- a/TIAM.Database/DbSets/Transfers/ITransferDestinationDbSet.cs
+++ b/TIAM.Database/DbSets/Transfers/ITransferDestinationDbSet.cs
@@ -6,5 +6,5 @@ namespace TIAM.Database.DbSets.Transfers;
public interface ITransferDestinationDbSet
{
- public DbSet TransferDestinations { get; }
+ public DbSet TransferDestinations { get; set; }
}
\ No newline at end of file
diff --git a/TIAM.Database/ModelBuilders/Emails/EmailMessageEntityTypeBuilderExtensions.cs b/TIAM.Database/ModelBuilders/Emails/EmailMessageEntityTypeBuilderExtensions.cs
new file mode 100644
index 00000000..881f178a
--- /dev/null
+++ b/TIAM.Database/ModelBuilders/Emails/EmailMessageEntityTypeBuilderExtensions.cs
@@ -0,0 +1,16 @@
+using Microsoft.EntityFrameworkCore.Metadata.Builders;
+using TIAM.Entities.Emails;
+
+namespace TIAM.Database.ModelBuilders.Emails;
+
+public static class EmailMessageEntityTypeBuilderExtensions
+{
+ public static void BuildEmailMessageToRecipientRelation(this EntityTypeBuilder modelBuilder, bool autoInclude = true)
+ {
+ modelBuilder
+ .HasMany(x => x.Recipients)
+ .WithOne(x => x.EmailMessage);
+
+ modelBuilder.Navigation(e => e.Recipients).AutoInclude(autoInclude);
+ }
+}
\ No newline at end of file
diff --git a/TIAM.Database/ModelBuilders/Emails/EmailMessageEntityTypeConfigurations.cs b/TIAM.Database/ModelBuilders/Emails/EmailMessageEntityTypeConfigurations.cs
new file mode 100644
index 00000000..34884170
--- /dev/null
+++ b/TIAM.Database/ModelBuilders/Emails/EmailMessageEntityTypeConfigurations.cs
@@ -0,0 +1,15 @@
+using AyCode.Database.DbContexts;
+using Microsoft.EntityFrameworkCore.Metadata.Builders;
+using TIAM.Database.ModelBuilders.Products;
+using TIAM.Entities.Emails;
+using TIAM.Entities.Products;
+
+namespace TIAM.Database.ModelBuilders.Emails;
+
+public class EmailMessageEntityTypeDefaultConfigurations : IAcEntityTypeConfiguration
+{
+ public void Configure(EntityTypeBuilder builder)
+ {
+ builder.BuildEmailMessageToRecipientRelation();
+ }
+}
diff --git a/TIAM.Database/TIAM.Database.csproj b/TIAM.Database/TIAM.Database.csproj
index 7c051c0f..96dc3336 100644
--- a/TIAM.Database/TIAM.Database.csproj
+++ b/TIAM.Database/TIAM.Database.csproj
@@ -7,9 +7,9 @@
-
-
-
+
+
+
@@ -20,6 +20,7 @@
+
diff --git a/TIAM.Entities/Emails/EmailMessage.cs b/TIAM.Entities/Emails/EmailMessage.cs
index 20e21553..c608825a 100644
--- a/TIAM.Entities/Emails/EmailMessage.cs
+++ b/TIAM.Entities/Emails/EmailMessage.cs
@@ -7,21 +7,35 @@ using AyCode.Interfaces.TimeStampInfo;
namespace TIAM.Entities.Emails;
[Table(nameof(EmailMessage))]
-public class EmailMessage : IEntityGuid, ITimeStampInfo
+public class EmailMessage : IEntityGuid, ITimeStampInfo, IEmailRecipientsRelation
{
+ public EmailMessage()
+ {
+ }
+
+ public EmailMessage(Guid id, Guid? senderId, Guid contextId, string subject, string? text, string senderEmailAddress) : this()
+ {
+ Id = id;
+ SenderId = senderId;
+ ContextId = contextId;
+ Subject = subject;
+ Text = text;
+ SenderEmailAddress = senderEmailAddress;
+ }
+
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public Guid Id { get; set; }
- public Guid ForeignKey { get; set; }
- public Guid UserProductMappingId { get; set; }
- public Guid UserId { get; set; }
+ public Guid ContextId { get; set; }
+ public Guid? SenderId { get; set; }
+
+ public virtual List Recipients { get; set; } = [];
- public bool SentToUser { get; set; }
[MaxLength(150)]
- public string EmailAddress { get; set; }
+ public string SenderEmailAddress { get; set; }
[MaxLength(100)]
public string Subject { get; set; }
- public string Text { get; set; }
+ public string? Text { get; set; }
public DateTime Created { get; set; }
public DateTime Modified { get; set; }
diff --git a/TIAM.Entities/Emails/EmailRecipient.cs b/TIAM.Entities/Emails/EmailRecipient.cs
new file mode 100644
index 00000000..69df9925
--- /dev/null
+++ b/TIAM.Entities/Emails/EmailRecipient.cs
@@ -0,0 +1,31 @@
+using AyCode.Interfaces.Entities;
+using AyCode.Interfaces.TimeStampInfo;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.ComponentModel.DataAnnotations;
+
+namespace TIAM.Entities.Emails;
+
+//Update efcore, aspnetcore to 8.0.1; Implement EmailMessage, EmailRecipient; refactoring, improvments, fixes, etc...
+public class EmailRecipient : IEntityGuid, ITimeStampInfo, IEmailMessageRelation
+{
+ public EmailRecipient()
+ {
+ }
+
+ public EmailRecipient(Guid id, Guid recipientId, Guid emailMessageId) : this()
+ {
+ Id = id;
+ RecipientId = recipientId;
+ EmailMessageId = emailMessageId;
+ }
+
+ [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
+ public Guid Id { get; set; }
+
+ public Guid RecipientId { get; set; }
+ public Guid EmailMessageId { get; set; }
+ public virtual EmailMessage EmailMessage { get; set; }
+
+ public DateTime Created { get; set; }
+ public DateTime Modified { get; set; }
+}
\ No newline at end of file
diff --git a/TIAM.Entities/Emails/IEmailMessageForeignKey.cs b/TIAM.Entities/Emails/IEmailMessageForeignKey.cs
new file mode 100644
index 00000000..8b2108bc
--- /dev/null
+++ b/TIAM.Entities/Emails/IEmailMessageForeignKey.cs
@@ -0,0 +1,9 @@
+namespace TIAM.Entities.Emails;
+
+public interface IEmailMessageForeignKey
+{
+ public T EmailMessageId { get; set; }
+}
+
+public interface IEmailMessageForeignKey : IEmailMessageForeignKey
+{ }
diff --git a/TIAM.Entities/Emails/IEmailMessageRelation.cs b/TIAM.Entities/Emails/IEmailMessageRelation.cs
new file mode 100644
index 00000000..96f9c292
--- /dev/null
+++ b/TIAM.Entities/Emails/IEmailMessageRelation.cs
@@ -0,0 +1,6 @@
+namespace TIAM.Entities.Emails;
+
+public interface IEmailMessageRelation : IEmailMessageForeignKey
+{
+ public EmailMessage EmailMessage{ get; set; }
+}
\ No newline at end of file
diff --git a/TIAM.Entities/Emails/IEmailRecipientsRelation.cs b/TIAM.Entities/Emails/IEmailRecipientsRelation.cs
new file mode 100644
index 00000000..d7da77d4
--- /dev/null
+++ b/TIAM.Entities/Emails/IEmailRecipientsRelation.cs
@@ -0,0 +1,6 @@
+namespace TIAM.Entities.Emails;
+
+public interface IEmailRecipientsRelation
+{
+ public List Recipients { get; set; }
+}
\ No newline at end of file
diff --git a/TIAM.Entities/Products/IProductForeignKey.cs b/TIAM.Entities/Products/IProductForeignKey.cs
index 930da46e..ccfac5d5 100644
--- a/TIAM.Entities/Products/IProductForeignKey.cs
+++ b/TIAM.Entities/Products/IProductForeignKey.cs
@@ -1,9 +1,9 @@
namespace TIAM.Entities.Products;
-public interface IProductForeignKey
+public interface IEmailMessageForeignKey
{
public T ProductId { get; set; }
}
-public interface IProductForeignKey : IProductForeignKey
+public interface IProductForeignKey : IEmailMessageForeignKey
{ }
diff --git a/TIAM.Entities/Products/IProductRelation.cs b/TIAM.Entities/Products/IProductRelation.cs
index bf605a9a..1bc50fb8 100644
--- a/TIAM.Entities/Products/IProductRelation.cs
+++ b/TIAM.Entities/Products/IProductRelation.cs
@@ -1,12 +1,6 @@
-using AyCode.Interfaces.ServiceProviders;
-using AyCode.Interfaces.Users;
-using TIAM.Entities.Users;
+namespace TIAM.Entities.Products;
-namespace TIAM.Entities.Products;
-
-public interface IProductRelation
+public interface IProductRelation : IProductForeignKey
{
- public List UserProductMappings { get; set; }
- public List Products { get; set; }
-
+ public Product Product { get; set; }
}
\ No newline at end of file
diff --git a/TIAM.Entities/Products/IProductsRelation.cs b/TIAM.Entities/Products/IProductsRelation.cs
new file mode 100644
index 00000000..a056a5a2
--- /dev/null
+++ b/TIAM.Entities/Products/IProductsRelation.cs
@@ -0,0 +1,11 @@
+using AyCode.Interfaces.ServiceProviders;
+using AyCode.Interfaces.Users;
+using TIAM.Entities.Users;
+
+namespace TIAM.Entities.Products;
+
+public interface IProductsRelation
+{
+ public List UserProductMappings { get; set; }
+ public List Products { get; set; }
+}
\ No newline at end of file
diff --git a/TIAM.Entities/Profiles/IProfileForeignKey.cs b/TIAM.Entities/Profiles/IProfileForeignKey.cs
new file mode 100644
index 00000000..94c0e5b8
--- /dev/null
+++ b/TIAM.Entities/Profiles/IProfileForeignKey.cs
@@ -0,0 +1,7 @@
+using AyCode.Interfaces.Profiles;
+
+namespace TIAM.Entities.Profiles;
+
+public interface IProfileForeignKey : IAcProfileForeignKey
+{
+}
\ No newline at end of file
diff --git a/TIAM.Entities/Profiles/IProfileRelation.cs b/TIAM.Entities/Profiles/IProfileRelation.cs
index 9029287e..aa1267f2 100644
--- a/TIAM.Entities/Profiles/IProfileRelation.cs
+++ b/TIAM.Entities/Profiles/IProfileRelation.cs
@@ -2,6 +2,6 @@
namespace TIAM.Entities.Profiles;
-public interface IProfileRelation : IAcProfileRelation
+public interface IProfileRelation : IAcProfileRelation, IProfileForeignKey
{
}
\ No newline at end of file
diff --git a/TIAM.Entities/TIAM.Entities.csproj b/TIAM.Entities/TIAM.Entities.csproj
index 911cb6fb..200c753e 100644
--- a/TIAM.Entities/TIAM.Entities.csproj
+++ b/TIAM.Entities/TIAM.Entities.csproj
@@ -32,11 +32,7 @@
-
-
-
-
-
+
diff --git a/TIAM.Entities/Transfers/Transfer.cs b/TIAM.Entities/Transfers/Transfer.cs
index f6687d06..2f8b3c84 100644
--- a/TIAM.Entities/Transfers/Transfer.cs
+++ b/TIAM.Entities/Transfers/Transfer.cs
@@ -11,7 +11,7 @@ using TIAM.Entities.Users;
namespace TIAM.Entities.Transfers;
[Table(nameof(Transfer))]
-public class Transfer: IEntityGuid, ITimeStampInfo, IProductForeignKey, IUserProductMappingForeignKey
+public class Transfer: IEntityGuid, ITimeStampInfo, IProductForeignKey, IUserProductMappingRelation
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public Guid Id { get; set; }
diff --git a/TIAM.Entities/Users/IUserForeignKey.cs b/TIAM.Entities/Users/IUserForeignKey.cs
new file mode 100644
index 00000000..42f2d26e
--- /dev/null
+++ b/TIAM.Entities/Users/IUserForeignKey.cs
@@ -0,0 +1,15 @@
+using AyCode.Interfaces.Users;
+
+namespace TIAM.Entities.Users;
+
+public interface IUserForeignKey : IAcUserForeignKey
+{
+}
+
+public interface IUserRelation : IAcUserRelation, IUserForeignKey
+{
+}
+
+public interface IUsersRelation : IAcUsersRelation
+{
+}
\ No newline at end of file
diff --git a/TIAM.Entities/Users/IUserProductMappingForeignKey.cs b/TIAM.Entities/Users/IUserProductMappingForeignKey.cs
index 969d38ee..f15b8e51 100644
--- a/TIAM.Entities/Users/IUserProductMappingForeignKey.cs
+++ b/TIAM.Entities/Users/IUserProductMappingForeignKey.cs
@@ -1,4 +1,6 @@
-namespace TIAM.Entities.Users;
+using System.Runtime;
+
+namespace TIAM.Entities.Users;
public interface IUserProductMappingForeignKey
{
diff --git a/TIAM.Entities/Users/IUserProductMappingRelation.cs b/TIAM.Entities/Users/IUserProductMappingRelation.cs
new file mode 100644
index 00000000..1227a42a
--- /dev/null
+++ b/TIAM.Entities/Users/IUserProductMappingRelation.cs
@@ -0,0 +1,9 @@
+namespace TIAM.Entities.Users;
+
+public interface IUserProductMappingRelation : IUserProductMappingForeignKey
+{
+ public UserProductMapping UserProductMapping { get; set; }
+}
+
+public interface IUserProductMappingsRelation : IUserProductMappingRelation
+{ }
\ No newline at end of file
diff --git a/TIAM.Entities/Users/UserProductMapping.cs b/TIAM.Entities/Users/UserProductMapping.cs
index b910a778..6fd2dbb3 100644
--- a/TIAM.Entities/Users/UserProductMapping.cs
+++ b/TIAM.Entities/Users/UserProductMapping.cs
@@ -12,7 +12,7 @@ using TIAM.Entities.Transfers;
namespace TIAM.Entities.Users;
[Table("UserProductMapping")]
-public class UserProductMapping : IEntityGuid, IUserForeignKey, IProductForeignKey, ITimeStampInfo
+public class UserProductMapping : IEntityGuid, IUserRelation, IProductRelation, ITimeStampInfo
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
diff --git a/TIAM.Models/Dtos/Users/UserModelDto.cs b/TIAM.Models/Dtos/Users/UserModelDto.cs
index 6a69f5f4..891af110 100644
--- a/TIAM.Models/Dtos/Users/UserModelDto.cs
+++ b/TIAM.Models/Dtos/Users/UserModelDto.cs
@@ -9,7 +9,7 @@ using TIAM.Models.Dtos.Profiles;
namespace TIAM.Models.Dtos.Users;
-public class UserModelDto : AcUserModelDtoBase, IProductRelation
+public class UserModelDto : AcUserModelDtoBase, IProductsRelation
{
public List UserProductMappings { get; set; }
public List Products { get; set; }
diff --git a/TIAMMobileApp/TIAMMobileApp.csproj b/TIAMMobileApp/TIAMMobileApp.csproj
index 1a49aa23..0324338b 100644
--- a/TIAMMobileApp/TIAMMobileApp.csproj
+++ b/TIAMMobileApp/TIAMMobileApp.csproj
@@ -79,4 +79,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/TIAMSharedUI/TIAMSharedUI.csproj b/TIAMSharedUI/TIAMSharedUI.csproj
index 4456870e..5195e945 100644
--- a/TIAMSharedUI/TIAMSharedUI.csproj
+++ b/TIAMSharedUI/TIAMSharedUI.csproj
@@ -15,8 +15,8 @@
-
-
+
+
diff --git a/TIAMWebApp/Client/TIAMWebApp.Client.csproj b/TIAMWebApp/Client/TIAMWebApp.Client.csproj
index b34d50e2..1d15f37a 100644
--- a/TIAMWebApp/Client/TIAMWebApp.Client.csproj
+++ b/TIAMWebApp/Client/TIAMWebApp.Client.csproj
@@ -8,8 +8,8 @@
-
-
+
+
diff --git a/TIAMWebApp/Server/TIAMWebApp.Server.csproj b/TIAMWebApp/Server/TIAMWebApp.Server.csproj
index 96468957..885b057a 100644
--- a/TIAMWebApp/Server/TIAMWebApp.Server.csproj
+++ b/TIAMWebApp/Server/TIAMWebApp.Server.csproj
@@ -7,13 +7,13 @@
-
-
-
-
-
+
+
+
+
+
-
+
diff --git a/TIAMWebApp/Shared/Models/ClientSide/Messages/EmaiMessageSenderModel.cs b/TIAMWebApp/Shared/Models/ClientSide/Messages/EmaiMessageSenderModel.cs
index 1a48ea29..4e9ab9b3 100644
--- a/TIAMWebApp/Shared/Models/ClientSide/Messages/EmaiMessageSenderModel.cs
+++ b/TIAMWebApp/Shared/Models/ClientSide/Messages/EmaiMessageSenderModel.cs
@@ -1,10 +1,10 @@
using AyCode.Models.Enums;
-using AyCode.Models.Messages;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using AyCode.Models.Messages;
namespace TIAMWebApp.Shared.Application.Models.ClientSide.Messages
{
diff --git a/TIAMWebApp/Shared/TIAMWebApp.Shared.Application.csproj b/TIAMWebApp/Shared/TIAMWebApp.Shared.Application.csproj
index adf6b751..318f652b 100644
--- a/TIAMWebApp/Shared/TIAMWebApp.Shared.Application.csproj
+++ b/TIAMWebApp/Shared/TIAMWebApp.Shared.Application.csproj
@@ -17,8 +17,8 @@
-
-
+
+