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