From 4be03c39981788b068dad73c209b6c85bb0e3e87 Mon Sep 17 00:00:00 2001 From: "jozsef.b@aycode.com" <9Rj@D}fVwBaN> Date: Fri, 22 Dec 2023 06:13:21 +0100 Subject: [PATCH] Impelement ServicProvider and Mapping to AcUserModel; refactoring, improvements, fixes, etc... --- .../Users/AcUserDalTestBase.cs | 26 +++++++----- .../DataLayers/Users/AcUserDalBase.cs | 9 ++-- .../DbContexts/Users/AcUserDbContextBase.cs | 7 ++-- .../DbContexts/Users/IAcUserDbContextBase.cs | 7 ++-- AyCode.Database/DbSets/Users/IAcUserDbSet.cs | 7 ++-- .../AcUserEntityTypeBuilderExtensions.cs | 28 +++++++++++-- .../Users/AcUserEntityTypeConfigurations.cs | 9 ++-- .../ServiceProviders/AcServiceProvider.cs | 8 +++- AyCode.Entities/Users/AcUser.cs | 11 ++++- .../Users/AcUserToServiceProvider.cs | 24 +++++++++++ .../Profiles/IProfileForeignKey.cs | 6 +++ .../ServiceProviders/IAcServiceProvider.cs | 14 +++---- .../IAcServiceProviderBase.cs | 12 ++++++ .../IAcServiceProviderRelation.cs | 9 +++- .../IServiceProviderForeignKey.cs | 6 +++ .../Users/Dtos/IAcUserDtoBase.cs | 5 ++- .../Users/Dtos/IAcUserDtoDetailBase.cs | 5 ++- AyCode.Interfaces/Users/IAcUser.cs | 5 ++- AyCode.Interfaces/Users/IAcUserBase.cs | 3 +- AyCode.Interfaces/Users/IAcUserRelation.cs | 18 ++++++++ .../Users/IAcUserToServiceProvider.cs | 13 ++++++ .../Users/IAcUserToServiceProviderBase.cs | 9 ++++ .../Users/IAcUserToServiceProviderRelation.cs | 12 ++++++ AyCode.Interfaces/Users/IUserForeignKey.cs | 6 +++ AyCode.Models/Users/AcUserModelDtoBase.cs | 42 ++++++++++++++++--- .../Users/AcUserModelDtoDetailBase.cs | 9 ++-- 26 files changed, 249 insertions(+), 61 deletions(-) create mode 100644 AyCode.Entities/Users/AcUserToServiceProvider.cs create mode 100644 AyCode.Interfaces/Profiles/IProfileForeignKey.cs create mode 100644 AyCode.Interfaces/ServiceProviders/IAcServiceProviderBase.cs create mode 100644 AyCode.Interfaces/ServiceProviders/IServiceProviderForeignKey.cs create mode 100644 AyCode.Interfaces/Users/IAcUserRelation.cs create mode 100644 AyCode.Interfaces/Users/IAcUserToServiceProvider.cs create mode 100644 AyCode.Interfaces/Users/IAcUserToServiceProviderBase.cs create mode 100644 AyCode.Interfaces/Users/IAcUserToServiceProviderRelation.cs create mode 100644 AyCode.Interfaces/Users/IUserForeignKey.cs diff --git a/AyCode.Database.Tests/Users/AcUserDalTestBase.cs b/AyCode.Database.Tests/Users/AcUserDalTestBase.cs index eb7f88d..0959b96 100644 --- a/AyCode.Database.Tests/Users/AcUserDalTestBase.cs +++ b/AyCode.Database.Tests/Users/AcUserDalTestBase.cs @@ -7,16 +7,16 @@ using AyCode.Interfaces.Users; namespace AyCode.Database.Tests.Users { - public abstract class AcUserDalTestBase : AcDatabaseTestModelBase - where TDal : AcUserDalBase - where TDbContext : AcDbContextBase, IAcUserDbContextBase - where TUser : class, IAcUser + public abstract class AcUserDalTestBase : AcDatabaseTestModelBase + where TDal : AcUserDalBase + where TDbContext : AcDbContextBase, IAcUserDbContextBase + where TUser : class, IAcUser where TProfile : class, IAcProfile where TUserToken : class, IAcUserTokenBase - where TServiceProvider : class, IAcServiceProvider + where TServiceProvider : class, IAcServiceProviderBase + where TUserToServiceProvider : class, IAcUserToServiceProviderBase { - [TestMethod] - public virtual void GetUserById_ReturnsUser_WhenUserExists(string userIdString) + protected TUser AcBase_GetUserById_ReturnsUser_WhenUserExists(string userIdString) { var userId = Guid.Parse(userIdString); var user = Dal.GetUserById(userId); @@ -25,10 +25,11 @@ namespace AyCode.Database.Tests.Users Assert.IsNotNull(user.Profile, "Profile is null"); Assert.AreEqual(userId, user.Id); + + return user; } - [TestMethod] - public virtual void GetUserByEmail_ReturnsUser_WhenUserExists(string email) + protected TUser AcBase_GetUserByEmail_ReturnsUser_WhenUserExists(string email) { var user = Dal.GetUserByEmail(email); @@ -36,10 +37,11 @@ namespace AyCode.Database.Tests.Users Assert.IsNotNull(user.Profile, "Profile is null"); Assert.AreEqual(email, user.EmailAddress); + + return user; } - [TestMethod] - public virtual async Task GetUserByEmailAsync_ReturnsUser_WhenUserExists(string email) + protected async Task AcBase_GetUserByEmailAsync_ReturnsUser_WhenUserExists(string email) { TUser? user = null; @@ -56,6 +58,8 @@ namespace AyCode.Database.Tests.Users Assert.IsNotNull(user.Profile, "Profile is null"); Assert.AreEqual(email, user.EmailAddress); + + return user; } } } diff --git a/AyCode.Database/DataLayers/Users/AcUserDalBase.cs b/AyCode.Database/DataLayers/Users/AcUserDalBase.cs index 2c8f3e9..b22631c 100644 --- a/AyCode.Database/DataLayers/Users/AcUserDalBase.cs +++ b/AyCode.Database/DataLayers/Users/AcUserDalBase.cs @@ -16,12 +16,13 @@ using AyCode.Interfaces.ServiceProviders; namespace AyCode.Database.DataLayers.Users { - public abstract class AcUserDalBase : AcDalBase - where TDbContext : AcDbContextBase, IAcUserDbContextBase - where TUser : class, IAcUser + public abstract class AcUserDalBase : AcDalBase + where TDbContext : AcDbContextBase, IAcUserDbContextBase + where TUser : class, IAcUser where TProfile : class, IAcProfile where TUserToken : class, IAcUserTokenBase - where TServiceProvider : class, IAcServiceProvider + where TServiceProvider : class, IAcServiceProviderBase + where TUserToServiceProvider : class, IAcUserToServiceProviderBase { public TUser? GetUserById(Guid userId) => Session(x => x.GetUserById(userId)); public Task GetUserByIdAsync(Guid userId) => SessionAsync(x => x.GetUserById(userId)); diff --git a/AyCode.Database/DbContexts/Users/AcUserDbContextBase.cs b/AyCode.Database/DbContexts/Users/AcUserDbContextBase.cs index ac1ef83..0328297 100644 --- a/AyCode.Database/DbContexts/Users/AcUserDbContextBase.cs +++ b/AyCode.Database/DbContexts/Users/AcUserDbContextBase.cs @@ -10,11 +10,12 @@ using Microsoft.EntityFrameworkCore; namespace AyCode.Database.DbContexts.Users { - public abstract class AcUserDbContextBase : AcDbContextBase, IAcUserDbContextBase - where TUser : class, IAcUser + public abstract class AcUserDbContextBase : AcDbContextBase, IAcUserDbContextBase + where TUser : class, IAcUser where TProfile : class, IAcProfile where TUserToken : class, IAcUserTokenBase - where TServiceProvider : class, IAcServiceProvider + where TServiceProvider : class, IAcServiceProviderBase + where TUserToServiceProvider : class, IAcUserToServiceProviderBase { public required DbSet Users { get; set; } public required DbSet UserTokens { get; set; } diff --git a/AyCode.Database/DbContexts/Users/IAcUserDbContextBase.cs b/AyCode.Database/DbContexts/Users/IAcUserDbContextBase.cs index b2773be..d410d19 100644 --- a/AyCode.Database/DbContexts/Users/IAcUserDbContextBase.cs +++ b/AyCode.Database/DbContexts/Users/IAcUserDbContextBase.cs @@ -6,10 +6,11 @@ using Microsoft.EntityFrameworkCore; namespace AyCode.Database.DbContexts.Users; -public interface IAcUserDbContextBase : IAcUserDbSet, IAcUserTokenDbSet - where TUser : class, IAcUser +public interface IAcUserDbContextBase : IAcUserDbSet, IAcUserTokenDbSet + where TUser : class, IAcUser where TProfile : class, IAcProfile where TUserToken : class, IAcUserTokenBase - where TServiceProvider : class, IAcServiceProvider + where TServiceProvider : class, IAcServiceProviderBase + where TUserToServiceProvider : class, IAcUserToServiceProviderBase { } \ No newline at end of file diff --git a/AyCode.Database/DbSets/Users/IAcUserDbSet.cs b/AyCode.Database/DbSets/Users/IAcUserDbSet.cs index c16e2f6..dfebde9 100644 --- a/AyCode.Database/DbSets/Users/IAcUserDbSet.cs +++ b/AyCode.Database/DbSets/Users/IAcUserDbSet.cs @@ -5,8 +5,9 @@ using AyCode.Interfaces.Users; namespace AyCode.Database.DbSets.Users; -public interface IAcUserDbSet : IAcUserDbSetBase - where TUser : class, IAcUser +public interface IAcUserDbSet : IAcUserDbSetBase + where TUser : class, IAcUser where TProfile : class, IAcProfile - where TServiceProvider : class, IAcServiceProvider + where TServiceProvider : class, IAcServiceProviderBase + where TUserToServiceProvider : class, IAcUserToServiceProviderBase { } \ No newline at end of file diff --git a/AyCode.Database/ModelBuilders/Users/AcUserEntityTypeBuilderExtensions.cs b/AyCode.Database/ModelBuilders/Users/AcUserEntityTypeBuilderExtensions.cs index 5f3bb1f..0414be2 100644 --- a/AyCode.Database/ModelBuilders/Users/AcUserEntityTypeBuilderExtensions.cs +++ b/AyCode.Database/ModelBuilders/Users/AcUserEntityTypeBuilderExtensions.cs @@ -8,16 +8,38 @@ namespace AyCode.Database.ModelBuilders.Users; public static class AcUserEntityTypeBuilderExtensions { - public static void BuildEntityToProfileRelation(this EntityTypeBuilder modelBuilder, bool autoInclude = true) where TProfileRelation : class, IAcProfileRelation where TProfile : class, IAcProfile + public static void BuildEntityToProfileRelation(this EntityTypeBuilder modelBuilder, bool autoInclude = true) + where TProfileRelation : class, IAcProfileRelation + where TProfile : class, IAcProfile { modelBuilder.Navigation(e => e.Profile).AutoInclude(autoInclude); } - public static void BuildEntityToServiceProviderRelation(this EntityTypeBuilder modelBuilder, bool autoInclude = true) where TServiceProviderRelation : class, IAcServiceProviderRelation where TServiceProvider : class, IAcServiceProvider + public static void BuildEntityToServiceProviderRelation(this EntityTypeBuilder modelBuilder, bool autoInclude = true) + where TServiceProviderRelation : class, IAcUserBase, IAcServiceProviderRelation + where TServiceProvider : class, IAcServiceProvider + where TUserToServiceProvider : class, IAcUserToServiceProviderBase { + modelBuilder + .HasMany(e => e.ServiceProviders) + .WithMany(e => e.Users) + .UsingEntity(); + //l => l.HasOne().WithMany(x=>x.UserProductMappings).HasForeignKey(e => e.ProductId), + //r => r.HasOne().WithMany(x=>x.UserProductMappings).HasForeignKey(e => e.UserId)); + + //modelBuilder + // .HasMany(e => e.UserProductMappings) + // .WithOne(e => e.User).HasForeignKey(x => x.UserId); + // //.WithMany(e => e.User). + // //.UsingEntity.HasForeignKey(x => x.UserId); + + modelBuilder.Navigation(e => e.ServiceProviders).AutoInclude(autoInclude); + modelBuilder.Navigation(e => e.UserToServiceProviders).AutoInclude(autoInclude); } - public static void BuildEntityToAddressRelation(this EntityTypeBuilder modelBuilder) where TProfileRelation : class, IAcProfileRelation where TProfile : class, IAcProfile + public static void BuildEntityToAddressRelation(this EntityTypeBuilder modelBuilder) + where TProfileRelation : class, IAcProfileRelation + where TProfile : class, IAcProfile { //throw new NotImplementedException(); } diff --git a/AyCode.Database/ModelBuilders/Users/AcUserEntityTypeConfigurations.cs b/AyCode.Database/ModelBuilders/Users/AcUserEntityTypeConfigurations.cs index f0261bb..712d2d9 100644 --- a/AyCode.Database/ModelBuilders/Users/AcUserEntityTypeConfigurations.cs +++ b/AyCode.Database/ModelBuilders/Users/AcUserEntityTypeConfigurations.cs @@ -6,15 +6,16 @@ using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace AyCode.Database.ModelBuilders.Users; -public abstract class AcUserEntityTypeDefaultConfiguration : IAcEntityTypeConfiguration - where TUser : class, IAcUser +public abstract class AcUserEntityTypeDefaultConfiguration : IAcEntityTypeConfiguration + where TUser : class, IAcUser where TProfile : class, IAcProfile - where TServiceProvider : class, IAcServiceProvider + where TServiceProvider : class, IAcServiceProvider + where TUserToServiceProvider : class, IAcUserToServiceProviderBase { public virtual void Configure(EntityTypeBuilder modelBuilder) { modelBuilder.BuildEntityToProfileRelation(); modelBuilder.BuildEntityToAddressRelation(); - modelBuilder.BuildEntityToServiceProviderRelation(); + modelBuilder.BuildEntityToServiceProviderRelation(); } } diff --git a/AyCode.Entities/ServiceProviders/AcServiceProvider.cs b/AyCode.Entities/ServiceProviders/AcServiceProvider.cs index 9ca4701..d2cb208 100644 --- a/AyCode.Entities/ServiceProviders/AcServiceProvider.cs +++ b/AyCode.Entities/ServiceProviders/AcServiceProvider.cs @@ -2,17 +2,23 @@ using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations; using AyCode.Interfaces.ServiceProviders; +using AyCode.Interfaces.Users; namespace AyCode.Entities.ServiceProviders { [Table("ServiceProviders")] - public abstract class AcServiceProvider : IAcServiceProvider + public abstract class AcServiceProvider : IAcServiceProvider + where TUser : class, IAcUserBase + where TUserToServiceProvider : class, IAcUserToServiceProviderBase { [Key, DatabaseGenerated(DatabaseGeneratedOption.None)] public Guid Id { get; set; } public string Name { get; set; } public Guid OwnerId { get; set; } + public virtual List Users { get; set; } + public virtual List UserToServiceProviders { get; set; } + public DateTime Created { get; set; } public DateTime Modified { get; set; } diff --git a/AyCode.Entities/Users/AcUser.cs b/AyCode.Entities/Users/AcUser.cs index 22eb674..4ccf29b 100644 --- a/AyCode.Entities/Users/AcUser.cs +++ b/AyCode.Entities/Users/AcUser.cs @@ -10,10 +10,16 @@ using AyCode.Interfaces.Users; using AyCode.Entities.ServiceProviders; using AyCode.Interfaces.ServiceProviders; +//- szétszedni az UserToServiceProvider és UserToProduct mapping list-eket külön interface-re +//- külön interface-ek az entity foreignId -khoz! pl: IUserForeignKey, IProductForeignKey, stb... +//- ModelDto Initialize(...) namespace AyCode.Entities.Users { [Table("Users")] - public abstract class AcUser : IAcUser where TProfile : class, IAcProfile where TServiceProvider : class, IAcServiceProvider + public abstract class AcUser : IAcUser + where TProfile : class, IAcProfile + where TServiceProvider : class, IAcServiceProviderBase + where TUserToServiceProvider : class, IAcUserToServiceProviderBase { [Key, DatabaseGenerated(DatabaseGeneratedOption.None)] public Guid Id { get; set; } @@ -26,12 +32,13 @@ namespace AyCode.Entities.Users public bool EmailConfirmed { get; set; } - public Guid ProfileId { get; } + public Guid ProfileId { get; set; } [ForeignKey(nameof(ProfileId))] public virtual TProfile Profile { get; set; } //[NotMapped] public virtual List ServiceProviders { get; set; } + public virtual List UserToServiceProviders { get; set; } public DateTime Created { get; set; } public DateTime Modified { get; set; } diff --git a/AyCode.Entities/Users/AcUserToServiceProvider.cs b/AyCode.Entities/Users/AcUserToServiceProvider.cs new file mode 100644 index 0000000..8713c95 --- /dev/null +++ b/AyCode.Entities/Users/AcUserToServiceProvider.cs @@ -0,0 +1,24 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; +using AyCode.Interfaces.ServiceProviders; +using AyCode.Interfaces.Users; + +namespace AyCode.Entities.Users; + +[Table("UserToServiceProvider")] +public abstract class AcUserToServiceProvider : IAcUserToServiceProvider + where TUser : class, IAcUserBase + where TServiceProvider : class, IAcServiceProviderBase +{ + [Key, DatabaseGenerated(DatabaseGeneratedOption.None)] + public Guid Id { get; set; } + + public Guid UserId { get; set; } + public Guid ServiceProviderId { get; set; } + + public virtual TUser User { get; set; } + public virtual TServiceProvider ServiceProvider { get; set; } + + public DateTime Created { get; set; } + public DateTime Modified { get; set; } +} \ No newline at end of file diff --git a/AyCode.Interfaces/Profiles/IProfileForeignKey.cs b/AyCode.Interfaces/Profiles/IProfileForeignKey.cs new file mode 100644 index 0000000..4d817c7 --- /dev/null +++ b/AyCode.Interfaces/Profiles/IProfileForeignKey.cs @@ -0,0 +1,6 @@ +namespace AyCode.Interfaces.Profiles; + +public interface IProfileForeignKey +{ + public Guid ProfileId { get; set; } +} \ No newline at end of file diff --git a/AyCode.Interfaces/ServiceProviders/IAcServiceProvider.cs b/AyCode.Interfaces/ServiceProviders/IAcServiceProvider.cs index 3d72796..1d491d3 100644 --- a/AyCode.Interfaces/ServiceProviders/IAcServiceProvider.cs +++ b/AyCode.Interfaces/ServiceProviders/IAcServiceProvider.cs @@ -1,12 +1,8 @@ - -using AyCode.Interfaces.Entities; -using AyCode.Interfaces.Profiles; -using AyCode.Interfaces.TimeStampInfo; -using System; +using AyCode.Interfaces.Users; namespace AyCode.Interfaces.ServiceProviders; -public interface IAcServiceProvider : IEntityGuid, ITimeStampInfo, IOwnerId -{ - string Name { get; } -} \ No newline at end of file +public interface IAcServiceProvider : IAcServiceProviderBase, IAcUserListRelation + where TUser : class, IAcUserBase + where TUserToServiceProvider : class, IAcUserToServiceProviderBase +{} \ No newline at end of file diff --git a/AyCode.Interfaces/ServiceProviders/IAcServiceProviderBase.cs b/AyCode.Interfaces/ServiceProviders/IAcServiceProviderBase.cs new file mode 100644 index 0000000..4edffd6 --- /dev/null +++ b/AyCode.Interfaces/ServiceProviders/IAcServiceProviderBase.cs @@ -0,0 +1,12 @@ + +using AyCode.Interfaces.Entities; +using AyCode.Interfaces.Profiles; +using AyCode.Interfaces.TimeStampInfo; +using System; + +namespace AyCode.Interfaces.ServiceProviders; + +public interface IAcServiceProviderBase : IEntityGuid, ITimeStampInfo, IOwnerId +{ + string Name { get; set; } +} \ No newline at end of file diff --git a/AyCode.Interfaces/ServiceProviders/IAcServiceProviderRelation.cs b/AyCode.Interfaces/ServiceProviders/IAcServiceProviderRelation.cs index 0940968..16ebc57 100644 --- a/AyCode.Interfaces/ServiceProviders/IAcServiceProviderRelation.cs +++ b/AyCode.Interfaces/ServiceProviders/IAcServiceProviderRelation.cs @@ -1,6 +1,11 @@ -namespace AyCode.Interfaces.ServiceProviders; +using AyCode.Interfaces.Users; -public interface IAcServiceProviderRelation where TServiceProvider : class, IAcServiceProvider +namespace AyCode.Interfaces.ServiceProviders; + +public interface IAcServiceProviderRelation + where TServiceProvider : class, IAcServiceProviderBase + where TUserToServiceProvider : class, IAcUserToServiceProviderBase { public List ServiceProviders { get; set; } + public List UserToServiceProviders { get; set; } } \ No newline at end of file diff --git a/AyCode.Interfaces/ServiceProviders/IServiceProviderForeignKey.cs b/AyCode.Interfaces/ServiceProviders/IServiceProviderForeignKey.cs new file mode 100644 index 0000000..fc41cf7 --- /dev/null +++ b/AyCode.Interfaces/ServiceProviders/IServiceProviderForeignKey.cs @@ -0,0 +1,6 @@ +namespace AyCode.Interfaces.ServiceProviders; + +public interface IServiceProviderForeignKey +{ + public Guid ServiceProviderId { get; set; } +} \ No newline at end of file diff --git a/AyCode.Interfaces/Users/Dtos/IAcUserDtoBase.cs b/AyCode.Interfaces/Users/Dtos/IAcUserDtoBase.cs index a6043e9..dc386c1 100644 --- a/AyCode.Interfaces/Users/Dtos/IAcUserDtoBase.cs +++ b/AyCode.Interfaces/Users/Dtos/IAcUserDtoBase.cs @@ -4,8 +4,9 @@ using AyCode.Interfaces.ServiceProviders; namespace AyCode.Interfaces.Users.Dtos; -public interface IAcUserDtoBase : IAcUserDtoMinBase, IAcServiceProviderRelation +public interface IAcUserDtoBase : IAcUserDtoMinBase, IAcServiceProviderRelation where TProfile : class, IAcProfile - where TServiceProvider : class, IAcServiceProvider + where TServiceProvider : class, IAcServiceProviderBase + where TUserToServiceProvider : class, IAcUserToServiceProviderBase { } \ No newline at end of file diff --git a/AyCode.Interfaces/Users/Dtos/IAcUserDtoDetailBase.cs b/AyCode.Interfaces/Users/Dtos/IAcUserDtoDetailBase.cs index 6d893b4..73e337c 100644 --- a/AyCode.Interfaces/Users/Dtos/IAcUserDtoDetailBase.cs +++ b/AyCode.Interfaces/Users/Dtos/IAcUserDtoDetailBase.cs @@ -4,8 +4,9 @@ using AyCode.Interfaces.ServiceProviders; namespace AyCode.Interfaces.Users.Dtos; -public interface IAcUserDtoDetailBase : IAcUserBase, IAcUserDtoBase +public interface IAcUserDtoDetailBase : IAcUserBase, IAcUserDtoBase where TProfile : class, IAcProfile - where TServiceProvider : class, IAcServiceProvider + where TServiceProvider : class, IAcServiceProviderBase + where TUserToServiceProvider : class, IAcUserToServiceProviderBase { } \ No newline at end of file diff --git a/AyCode.Interfaces/Users/IAcUser.cs b/AyCode.Interfaces/Users/IAcUser.cs index 3a67825..8f8cccf 100644 --- a/AyCode.Interfaces/Users/IAcUser.cs +++ b/AyCode.Interfaces/Users/IAcUser.cs @@ -6,7 +6,8 @@ using AyCode.Interfaces.Users.Dtos; namespace AyCode.Interfaces.Users; -public interface IAcUser : IAcUserDtoDetailBase +public interface IAcUser : IAcUserDtoDetailBase where TProfile : class, IAcProfile - where TServiceProvider : class, IAcServiceProvider + where TServiceProvider : class, IAcServiceProviderBase + where TUserToServiceProvider : class, IAcUserToServiceProviderBase { } \ No newline at end of file diff --git a/AyCode.Interfaces/Users/IAcUserBase.cs b/AyCode.Interfaces/Users/IAcUserBase.cs index 3768255..69e1a8d 100644 --- a/AyCode.Interfaces/Users/IAcUserBase.cs +++ b/AyCode.Interfaces/Users/IAcUserBase.cs @@ -1,10 +1,11 @@ using AyCode.Interfaces.Entities; +using AyCode.Interfaces.Profiles; using AyCode.Interfaces.TimeStampInfo; using AyCode.Interfaces.Users.Dtos; namespace AyCode.Interfaces.Users; -public interface IAcUserBase : IEntityGuid, IEmailAddress, IPassword, ITimeStampInfo +public interface IAcUserBase : IEntityGuid, IProfileForeignKey, IEmailAddress, IPassword, ITimeStampInfo { public string PhoneNumber { get; set; } public string? RefreshToken { get; set; } diff --git a/AyCode.Interfaces/Users/IAcUserRelation.cs b/AyCode.Interfaces/Users/IAcUserRelation.cs new file mode 100644 index 0000000..069fcd1 --- /dev/null +++ b/AyCode.Interfaces/Users/IAcUserRelation.cs @@ -0,0 +1,18 @@ +using AyCode.Interfaces.Profiles; +using AyCode.Interfaces.ServiceProviders; + +namespace AyCode.Interfaces.Users; + +public interface IAcUserListRelation + where TUser : class, IAcUserBase + where TUserToServiceProvider : class, IAcUserToServiceProviderBase +{ + public List Users { get; set; } + public List UserToServiceProviders { get; set; } +} + +public interface IAcUserRelation where TUser : class, IAcUserBase +{ + public Guid UserId { get; } + public TUser User { get; set; } +} \ No newline at end of file diff --git a/AyCode.Interfaces/Users/IAcUserToServiceProvider.cs b/AyCode.Interfaces/Users/IAcUserToServiceProvider.cs new file mode 100644 index 0000000..caf2861 --- /dev/null +++ b/AyCode.Interfaces/Users/IAcUserToServiceProvider.cs @@ -0,0 +1,13 @@ +using AyCode.Interfaces.Entities; +using AyCode.Interfaces.ServiceProviders; +using AyCode.Interfaces.TimeStampInfo; + +namespace AyCode.Interfaces.Users; + +public interface IAcUserToServiceProvider : IAcUserToServiceProviderBase + where TUser : class, IAcUserBase + where TServiceProvider : class, IAcServiceProviderBase +{ + public TUser User { get; set; } + public TServiceProvider ServiceProvider { get; set; } +} \ No newline at end of file diff --git a/AyCode.Interfaces/Users/IAcUserToServiceProviderBase.cs b/AyCode.Interfaces/Users/IAcUserToServiceProviderBase.cs new file mode 100644 index 0000000..706f5f7 --- /dev/null +++ b/AyCode.Interfaces/Users/IAcUserToServiceProviderBase.cs @@ -0,0 +1,9 @@ +using AyCode.Interfaces.Entities; +using AyCode.Interfaces.ServiceProviders; +using AyCode.Interfaces.TimeStampInfo; + +namespace AyCode.Interfaces.Users; + +public interface IAcUserToServiceProviderBase : IEntityGuid, IUserForeignKey, IServiceProviderForeignKey, ITimeStampInfo +{ +} \ No newline at end of file diff --git a/AyCode.Interfaces/Users/IAcUserToServiceProviderRelation.cs b/AyCode.Interfaces/Users/IAcUserToServiceProviderRelation.cs new file mode 100644 index 0000000..e0a72ea --- /dev/null +++ b/AyCode.Interfaces/Users/IAcUserToServiceProviderRelation.cs @@ -0,0 +1,12 @@ +using AyCode.Interfaces.ServiceProviders; + +namespace AyCode.Interfaces.Users; + +public interface IAcUserToServiceProviderRelation + where TUser : class, IAcUserBase, IAcServiceProviderRelation + where TServiceProvider : class, IAcServiceProviderBase + where TUserToServiceProvider : class, IAcUserToServiceProviderBase +{ + public TUser User { get; set; } + public TServiceProvider ServiceProvider { get; set; } +} \ No newline at end of file diff --git a/AyCode.Interfaces/Users/IUserForeignKey.cs b/AyCode.Interfaces/Users/IUserForeignKey.cs new file mode 100644 index 0000000..b48f7cd --- /dev/null +++ b/AyCode.Interfaces/Users/IUserForeignKey.cs @@ -0,0 +1,6 @@ +namespace AyCode.Interfaces.Users; + +public interface IUserForeignKey +{ + Guid UserId { get; set; } +} \ No newline at end of file diff --git a/AyCode.Models/Users/AcUserModelDtoBase.cs b/AyCode.Models/Users/AcUserModelDtoBase.cs index ae7bdbf..abdf04a 100644 --- a/AyCode.Models/Users/AcUserModelDtoBase.cs +++ b/AyCode.Models/Users/AcUserModelDtoBase.cs @@ -6,17 +6,49 @@ using AyCode.Interfaces.Users.Dtos; namespace AyCode.Models.Users; -public abstract class AcUserModelDtoBase : AcUserModelDtoMinBase, IAcServiceProviderRelation - where TUserDto : class, IAcUserDtoBase +public abstract class AcUserModelDtoBase : AcUserModelDtoMinBase, IAcServiceProviderRelation + where TUserDto : class, IAcUserDtoBase where TProfile : class, IAcProfile where TProfileDto : class, IAcProfileDtoBase - where TServiceProvider : class, IAcServiceProvider + where TServiceProvider : class, IAcServiceProviderBase + where TUserToServiceProvider : class, IAcUserToServiceProviderBase { public List ServiceProviders { get; set; } + public List UserToServiceProviders { get; set; } + protected AcUserModelDtoBase() {} - protected AcUserModelDtoBase(IAcUserDtoBase user) : base(user) + protected AcUserModelDtoBase(IAcUserDtoBase user) : base(user) { - //ServiceProvider... + if (user.ServiceProviders.Count == 0) return; + + //így proxy error lesz... - J. + //ServiceProviders = new List(user.ServiceProviders); + //UserToServiceProviders = new List(user.UserToServiceProviders); + + ServiceProviders = new List(user.ServiceProviders.Count); + UserToServiceProviders = new List(user.UserToServiceProviders.Count); + + foreach (var serviceProvider in user.ServiceProviders) + { + var newProvider = Activator.CreateInstance(); + + newProvider.Id = serviceProvider.Id; + newProvider.Name = serviceProvider.Name; + newProvider.OwnerId = serviceProvider.OwnerId; + + ServiceProviders.Add(newProvider); + } + + foreach (var userToServiceProvider in user.UserToServiceProviders) + { + var newUserToProvider = Activator.CreateInstance(); + + newUserToProvider.Id = userToServiceProvider.Id; + newUserToProvider.UserId = userToServiceProvider.UserId; + newUserToProvider.ServiceProviderId = userToServiceProvider.ServiceProviderId; + + UserToServiceProviders.Add(newUserToProvider); + } } } \ No newline at end of file diff --git a/AyCode.Models/Users/AcUserModelDtoDetailBase.cs b/AyCode.Models/Users/AcUserModelDtoDetailBase.cs index 2b7c7a0..83d8d29 100644 --- a/AyCode.Models/Users/AcUserModelDtoDetailBase.cs +++ b/AyCode.Models/Users/AcUserModelDtoDetailBase.cs @@ -6,14 +6,15 @@ using AyCode.Interfaces.Users.Dtos; namespace AyCode.Models.Users; -public abstract class AcUserModelDtoDetailBase : AcUserModelDtoBase - where TUserDtoDetail : class, IAcUserDtoDetailBase +public abstract class AcUserModelDtoDetailBase : AcUserModelDtoBase + where TUserDtoDetail : class, IAcUserDtoDetailBase where TProfile : class, IAcProfile where TProfileDto : class, IAcProfileDtoBase - where TServiceProvider : class, IAcServiceProvider + where TServiceProvider : class, IAcServiceProviderBase + where TUserToServiceProvider : class, IAcUserToServiceProviderBase { protected AcUserModelDtoDetailBase() {} - protected AcUserModelDtoDetailBase(IAcUserDtoDetailBase user) : base(user) + protected AcUserModelDtoDetailBase(IAcUserDtoDetailBase user) : base(user) { } } \ No newline at end of file