Impelement ServicProvider and Mapping to AcUserModel; refactoring, improvements, fixes, etc...

This commit is contained in:
jozsef.b@aycode.com 2023-12-22 06:13:21 +01:00
parent 02a4c197b4
commit 4be03c3998
26 changed files with 249 additions and 61 deletions

View File

@ -7,16 +7,16 @@ using AyCode.Interfaces.Users;
namespace AyCode.Database.Tests.Users namespace AyCode.Database.Tests.Users
{ {
public abstract class AcUserDalTestBase<TDal, TDbContext, TUser, TProfile, TUserToken, TServiceProvider> : AcDatabaseTestModelBase<TDal, TDbContext> public abstract class AcUserDalTestBase<TDal, TDbContext, TUser, TProfile, TUserToken, TServiceProvider, TUserToServiceProvider> : AcDatabaseTestModelBase<TDal, TDbContext>
where TDal : AcUserDalBase<TDbContext, TUser, TProfile, TUserToken, TServiceProvider> where TDal : AcUserDalBase<TDbContext, TUser, TProfile, TUserToken, TServiceProvider, TUserToServiceProvider>
where TDbContext : AcDbContextBase, IAcUserDbContextBase<TUser, TProfile, TUserToken,TServiceProvider> where TDbContext : AcDbContextBase, IAcUserDbContextBase<TUser, TProfile, TUserToken,TServiceProvider, TUserToServiceProvider>
where TUser : class, IAcUser<TProfile, TServiceProvider> where TUser : class, IAcUser<TProfile, TServiceProvider, TUserToServiceProvider>
where TProfile : class, IAcProfile where TProfile : class, IAcProfile
where TUserToken : class, IAcUserTokenBase where TUserToken : class, IAcUserTokenBase
where TServiceProvider : class, IAcServiceProvider where TServiceProvider : class, IAcServiceProviderBase
where TUserToServiceProvider : class, IAcUserToServiceProviderBase
{ {
[TestMethod] protected TUser AcBase_GetUserById_ReturnsUser_WhenUserExists(string userIdString)
public virtual void GetUserById_ReturnsUser_WhenUserExists(string userIdString)
{ {
var userId = Guid.Parse(userIdString); var userId = Guid.Parse(userIdString);
var user = Dal.GetUserById(userId); var user = Dal.GetUserById(userId);
@ -25,10 +25,11 @@ namespace AyCode.Database.Tests.Users
Assert.IsNotNull(user.Profile, "Profile is null"); Assert.IsNotNull(user.Profile, "Profile is null");
Assert.AreEqual(userId, user.Id); Assert.AreEqual(userId, user.Id);
return user;
} }
[TestMethod] protected TUser AcBase_GetUserByEmail_ReturnsUser_WhenUserExists(string email)
public virtual void GetUserByEmail_ReturnsUser_WhenUserExists(string email)
{ {
var user = Dal.GetUserByEmail(email); var user = Dal.GetUserByEmail(email);
@ -36,10 +37,11 @@ namespace AyCode.Database.Tests.Users
Assert.IsNotNull(user.Profile, "Profile is null"); Assert.IsNotNull(user.Profile, "Profile is null");
Assert.AreEqual(email, user.EmailAddress); Assert.AreEqual(email, user.EmailAddress);
return user;
} }
[TestMethod] protected async Task<TUser> AcBase_GetUserByEmailAsync_ReturnsUser_WhenUserExists(string email)
public virtual async Task GetUserByEmailAsync_ReturnsUser_WhenUserExists(string email)
{ {
TUser? user = null; TUser? user = null;
@ -56,6 +58,8 @@ namespace AyCode.Database.Tests.Users
Assert.IsNotNull(user.Profile, "Profile is null"); Assert.IsNotNull(user.Profile, "Profile is null");
Assert.AreEqual(email, user.EmailAddress); Assert.AreEqual(email, user.EmailAddress);
return user;
} }
} }
} }

View File

@ -16,12 +16,13 @@ using AyCode.Interfaces.ServiceProviders;
namespace AyCode.Database.DataLayers.Users namespace AyCode.Database.DataLayers.Users
{ {
public abstract class AcUserDalBase<TDbContext, TUser, TProfile, TUserToken, TServiceProvider> : AcDalBase<TDbContext> public abstract class AcUserDalBase<TDbContext, TUser, TProfile, TUserToken, TServiceProvider, TUserToServiceProvider> : AcDalBase<TDbContext>
where TDbContext : AcDbContextBase, IAcUserDbContextBase<TUser, TProfile, TUserToken, TServiceProvider> where TDbContext : AcDbContextBase, IAcUserDbContextBase<TUser, TProfile, TUserToken, TServiceProvider, TUserToServiceProvider>
where TUser : class, IAcUser<TProfile, TServiceProvider> where TUser : class, IAcUser<TProfile, TServiceProvider, TUserToServiceProvider>
where TProfile : class, IAcProfile where TProfile : class, IAcProfile
where TUserToken : class, IAcUserTokenBase 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 TUser? GetUserById(Guid userId) => Session(x => x.GetUserById(userId));
public Task<TUser?> GetUserByIdAsync(Guid userId) => SessionAsync(x => x.GetUserById(userId)); public Task<TUser?> GetUserByIdAsync(Guid userId) => SessionAsync(x => x.GetUserById(userId));

View File

@ -10,11 +10,12 @@ using Microsoft.EntityFrameworkCore;
namespace AyCode.Database.DbContexts.Users namespace AyCode.Database.DbContexts.Users
{ {
public abstract class AcUserDbContextBase<TUser, TProfile, TUserToken, TServiceProvider> : AcDbContextBase, IAcUserDbContextBase<TUser, TProfile, TUserToken, TServiceProvider> public abstract class AcUserDbContextBase<TUser, TProfile, TUserToken, TServiceProvider, TUserToServiceProvider> : AcDbContextBase, IAcUserDbContextBase<TUser, TProfile, TUserToken, TServiceProvider, TUserToServiceProvider>
where TUser : class, IAcUser<TProfile, TServiceProvider> where TUser : class, IAcUser<TProfile, TServiceProvider, TUserToServiceProvider>
where TProfile : class, IAcProfile where TProfile : class, IAcProfile
where TUserToken : class, IAcUserTokenBase where TUserToken : class, IAcUserTokenBase
where TServiceProvider : class, IAcServiceProvider where TServiceProvider : class, IAcServiceProviderBase
where TUserToServiceProvider : class, IAcUserToServiceProviderBase
{ {
public required DbSet<TUser> Users { get; set; } public required DbSet<TUser> Users { get; set; }
public required DbSet<TUserToken> UserTokens { get; set; } public required DbSet<TUserToken> UserTokens { get; set; }

View File

@ -6,10 +6,11 @@ using Microsoft.EntityFrameworkCore;
namespace AyCode.Database.DbContexts.Users; namespace AyCode.Database.DbContexts.Users;
public interface IAcUserDbContextBase<TUser, TProfile, TUserToken, TServiceProvider> : IAcUserDbSet<TUser, TProfile, TServiceProvider>, IAcUserTokenDbSet<TUserToken> public interface IAcUserDbContextBase<TUser, TProfile, TUserToken, TServiceProvider, TUserToServiceProvider> : IAcUserDbSet<TUser, TProfile, TServiceProvider, TUserToServiceProvider>, IAcUserTokenDbSet<TUserToken>
where TUser : class, IAcUser<TProfile, TServiceProvider> where TUser : class, IAcUser<TProfile, TServiceProvider, TUserToServiceProvider>
where TProfile : class, IAcProfile where TProfile : class, IAcProfile
where TUserToken : class, IAcUserTokenBase where TUserToken : class, IAcUserTokenBase
where TServiceProvider : class, IAcServiceProvider where TServiceProvider : class, IAcServiceProviderBase
where TUserToServiceProvider : class, IAcUserToServiceProviderBase
{ {
} }

View File

@ -5,8 +5,9 @@ using AyCode.Interfaces.Users;
namespace AyCode.Database.DbSets.Users; namespace AyCode.Database.DbSets.Users;
public interface IAcUserDbSet<TUser, TProfile, TServiceProvider> : IAcUserDbSetBase<TUser> public interface IAcUserDbSet<TUser, TProfile, TServiceProvider, TUserToServiceProvider> : IAcUserDbSetBase<TUser>
where TUser : class, IAcUser<TProfile, TServiceProvider> where TUser : class, IAcUser<TProfile, TServiceProvider, TUserToServiceProvider>
where TProfile : class, IAcProfile where TProfile : class, IAcProfile
where TServiceProvider : class, IAcServiceProvider where TServiceProvider : class, IAcServiceProviderBase
where TUserToServiceProvider : class, IAcUserToServiceProviderBase
{ } { }

View File

@ -8,16 +8,38 @@ namespace AyCode.Database.ModelBuilders.Users;
public static class AcUserEntityTypeBuilderExtensions public static class AcUserEntityTypeBuilderExtensions
{ {
public static void BuildEntityToProfileRelation<TProfileRelation, TProfile>(this EntityTypeBuilder<TProfileRelation> modelBuilder, bool autoInclude = true) where TProfileRelation : class, IAcProfileRelation<TProfile> where TProfile : class, IAcProfile public static void BuildEntityToProfileRelation<TProfileRelation, TProfile>(this EntityTypeBuilder<TProfileRelation> modelBuilder, bool autoInclude = true)
where TProfileRelation : class, IAcProfileRelation<TProfile>
where TProfile : class, IAcProfile
{ {
modelBuilder.Navigation(e => e.Profile).AutoInclude(autoInclude); modelBuilder.Navigation(e => e.Profile).AutoInclude(autoInclude);
} }
public static void BuildEntityToServiceProviderRelation<TServiceProviderRelation, TServiceProvider>(this EntityTypeBuilder<TServiceProviderRelation> modelBuilder, bool autoInclude = true) where TServiceProviderRelation : class, IAcServiceProviderRelation<TServiceProvider> where TServiceProvider : class, IAcServiceProvider public static void BuildEntityToServiceProviderRelation<TServiceProviderRelation, TServiceProvider, TUserToServiceProvider>(this EntityTypeBuilder<TServiceProviderRelation> modelBuilder, bool autoInclude = true)
where TServiceProviderRelation : class, IAcUserBase, IAcServiceProviderRelation<TServiceProvider, TUserToServiceProvider>
where TServiceProvider : class, IAcServiceProvider<TServiceProviderRelation, TUserToServiceProvider>
where TUserToServiceProvider : class, IAcUserToServiceProviderBase
{ {
modelBuilder
.HasMany(e => e.ServiceProviders)
.WithMany(e => e.Users)
.UsingEntity<TUserToServiceProvider>();
//l => l.HasOne<Product>().WithMany(x=>x.UserProductMappings).HasForeignKey(e => e.ProductId),
//r => r.HasOne<User>().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<UserProductMapping>.HasForeignKey(x => x.UserId);
modelBuilder.Navigation(e => e.ServiceProviders).AutoInclude(autoInclude);
modelBuilder.Navigation(e => e.UserToServiceProviders).AutoInclude(autoInclude);
} }
public static void BuildEntityToAddressRelation<TProfileRelation, TProfile>(this EntityTypeBuilder<TProfileRelation> modelBuilder) where TProfileRelation : class, IAcProfileRelation<TProfile> where TProfile : class, IAcProfile public static void BuildEntityToAddressRelation<TProfileRelation, TProfile>(this EntityTypeBuilder<TProfileRelation> modelBuilder)
where TProfileRelation : class, IAcProfileRelation<TProfile>
where TProfile : class, IAcProfile
{ {
//throw new NotImplementedException(); //throw new NotImplementedException();
} }

View File

@ -6,15 +6,16 @@ using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace AyCode.Database.ModelBuilders.Users; namespace AyCode.Database.ModelBuilders.Users;
public abstract class AcUserEntityTypeDefaultConfiguration<TUser, TProfile, TServiceProvider> : IAcEntityTypeConfiguration<TUser> public abstract class AcUserEntityTypeDefaultConfiguration<TUser, TProfile, TServiceProvider, TUserToServiceProvider> : IAcEntityTypeConfiguration<TUser>
where TUser : class, IAcUser<TProfile, TServiceProvider> where TUser : class, IAcUser<TProfile, TServiceProvider, TUserToServiceProvider>
where TProfile : class, IAcProfile where TProfile : class, IAcProfile
where TServiceProvider : class, IAcServiceProvider where TServiceProvider : class, IAcServiceProvider<TUser, TUserToServiceProvider>
where TUserToServiceProvider : class, IAcUserToServiceProviderBase
{ {
public virtual void Configure(EntityTypeBuilder<TUser> modelBuilder) public virtual void Configure(EntityTypeBuilder<TUser> modelBuilder)
{ {
modelBuilder.BuildEntityToProfileRelation<TUser, TProfile>(); modelBuilder.BuildEntityToProfileRelation<TUser, TProfile>();
modelBuilder.BuildEntityToAddressRelation<TUser, TProfile>(); modelBuilder.BuildEntityToAddressRelation<TUser, TProfile>();
modelBuilder.BuildEntityToServiceProviderRelation<TUser, TServiceProvider>(); modelBuilder.BuildEntityToServiceProviderRelation<TUser, TServiceProvider, TUserToServiceProvider>();
} }
} }

View File

@ -2,17 +2,23 @@
using System.ComponentModel.DataAnnotations.Schema; using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations;
using AyCode.Interfaces.ServiceProviders; using AyCode.Interfaces.ServiceProviders;
using AyCode.Interfaces.Users;
namespace AyCode.Entities.ServiceProviders namespace AyCode.Entities.ServiceProviders
{ {
[Table("ServiceProviders")] [Table("ServiceProviders")]
public abstract class AcServiceProvider : IAcServiceProvider public abstract class AcServiceProvider<TUser, TUserToServiceProvider> : IAcServiceProvider<TUser, TUserToServiceProvider>
where TUser : class, IAcUserBase
where TUserToServiceProvider : class, IAcUserToServiceProviderBase
{ {
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)] [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public Guid Id { get; set; } public Guid Id { get; set; }
public string Name { get; set; } public string Name { get; set; }
public Guid OwnerId { get; set; } public Guid OwnerId { get; set; }
public virtual List<TUser> Users { get; set; }
public virtual List<TUserToServiceProvider> UserToServiceProviders { get; set; }
public DateTime Created { get; set; } public DateTime Created { get; set; }
public DateTime Modified { get; set; } public DateTime Modified { get; set; }

View File

@ -10,10 +10,16 @@ using AyCode.Interfaces.Users;
using AyCode.Entities.ServiceProviders; using AyCode.Entities.ServiceProviders;
using AyCode.Interfaces.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 namespace AyCode.Entities.Users
{ {
[Table("Users")] [Table("Users")]
public abstract class AcUser<TProfile, TServiceProvider> : IAcUser<TProfile, TServiceProvider> where TProfile : class, IAcProfile where TServiceProvider : class, IAcServiceProvider public abstract class AcUser<TProfile, TServiceProvider, TUserToServiceProvider> : IAcUser<TProfile, TServiceProvider, TUserToServiceProvider>
where TProfile : class, IAcProfile
where TServiceProvider : class, IAcServiceProviderBase
where TUserToServiceProvider : class, IAcUserToServiceProviderBase
{ {
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)] [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public Guid Id { get; set; } public Guid Id { get; set; }
@ -26,12 +32,13 @@ namespace AyCode.Entities.Users
public bool EmailConfirmed { get; set; } public bool EmailConfirmed { get; set; }
public Guid ProfileId { get; } public Guid ProfileId { get; set; }
[ForeignKey(nameof(ProfileId))] [ForeignKey(nameof(ProfileId))]
public virtual TProfile Profile { get; set; } public virtual TProfile Profile { get; set; }
//[NotMapped] //[NotMapped]
public virtual List<TServiceProvider> ServiceProviders { get; set; } public virtual List<TServiceProvider> ServiceProviders { get; set; }
public virtual List<TUserToServiceProvider> UserToServiceProviders { get; set; }
public DateTime Created { get; set; } public DateTime Created { get; set; }
public DateTime Modified { get; set; } public DateTime Modified { get; set; }

View File

@ -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<TUser, TServiceProvider> : IAcUserToServiceProvider<TUser, TServiceProvider>
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; }
}

View File

@ -0,0 +1,6 @@
namespace AyCode.Interfaces.Profiles;
public interface IProfileForeignKey
{
public Guid ProfileId { get; set; }
}

View File

@ -1,12 +1,8 @@
 using AyCode.Interfaces.Users;
using AyCode.Interfaces.Entities;
using AyCode.Interfaces.Profiles;
using AyCode.Interfaces.TimeStampInfo;
using System;
namespace AyCode.Interfaces.ServiceProviders; namespace AyCode.Interfaces.ServiceProviders;
public interface IAcServiceProvider : IEntityGuid, ITimeStampInfo, IOwnerId public interface IAcServiceProvider<TUser, TUserToServiceProvider> : IAcServiceProviderBase, IAcUserListRelation<TUser, TUserToServiceProvider>
{ where TUser : class, IAcUserBase
string Name { get; } where TUserToServiceProvider : class, IAcUserToServiceProviderBase
} {}

View File

@ -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; }
}

View File

@ -1,6 +1,11 @@
namespace AyCode.Interfaces.ServiceProviders; using AyCode.Interfaces.Users;
public interface IAcServiceProviderRelation<TServiceProvider> where TServiceProvider : class, IAcServiceProvider namespace AyCode.Interfaces.ServiceProviders;
public interface IAcServiceProviderRelation<TServiceProvider, TUserToServiceProvider>
where TServiceProvider : class, IAcServiceProviderBase
where TUserToServiceProvider : class, IAcUserToServiceProviderBase
{ {
public List<TServiceProvider> ServiceProviders { get; set; } public List<TServiceProvider> ServiceProviders { get; set; }
public List<TUserToServiceProvider> UserToServiceProviders { get; set; }
} }

View File

@ -0,0 +1,6 @@
namespace AyCode.Interfaces.ServiceProviders;
public interface IServiceProviderForeignKey
{
public Guid ServiceProviderId { get; set; }
}

View File

@ -4,8 +4,9 @@ using AyCode.Interfaces.ServiceProviders;
namespace AyCode.Interfaces.Users.Dtos; namespace AyCode.Interfaces.Users.Dtos;
public interface IAcUserDtoBase<TProfile, TServiceProvider> : IAcUserDtoMinBase<TProfile>, IAcServiceProviderRelation<TServiceProvider> public interface IAcUserDtoBase<TProfile, TServiceProvider, TUserToServiceProvider> : IAcUserDtoMinBase<TProfile>, IAcServiceProviderRelation<TServiceProvider, TUserToServiceProvider>
where TProfile : class, IAcProfile where TProfile : class, IAcProfile
where TServiceProvider : class, IAcServiceProvider where TServiceProvider : class, IAcServiceProviderBase
where TUserToServiceProvider : class, IAcUserToServiceProviderBase
{ {
} }

View File

@ -4,8 +4,9 @@ using AyCode.Interfaces.ServiceProviders;
namespace AyCode.Interfaces.Users.Dtos; namespace AyCode.Interfaces.Users.Dtos;
public interface IAcUserDtoDetailBase<TProfile, TServiceProvider> : IAcUserBase, IAcUserDtoBase<TProfile, TServiceProvider> public interface IAcUserDtoDetailBase<TProfile, TServiceProvider, TUserToServiceProvider> : IAcUserBase, IAcUserDtoBase<TProfile, TServiceProvider, TUserToServiceProvider>
where TProfile : class, IAcProfile where TProfile : class, IAcProfile
where TServiceProvider : class, IAcServiceProvider where TServiceProvider : class, IAcServiceProviderBase
where TUserToServiceProvider : class, IAcUserToServiceProviderBase
{ {
} }

View File

@ -6,7 +6,8 @@ using AyCode.Interfaces.Users.Dtos;
namespace AyCode.Interfaces.Users; namespace AyCode.Interfaces.Users;
public interface IAcUser<TProfile, TServiceProvider> : IAcUserDtoDetailBase<TProfile, TServiceProvider> public interface IAcUser<TProfile, TServiceProvider, TUserToServiceProvider> : IAcUserDtoDetailBase<TProfile, TServiceProvider, TUserToServiceProvider>
where TProfile : class, IAcProfile where TProfile : class, IAcProfile
where TServiceProvider : class, IAcServiceProvider where TServiceProvider : class, IAcServiceProviderBase
where TUserToServiceProvider : class, IAcUserToServiceProviderBase
{ } { }

View File

@ -1,10 +1,11 @@
using AyCode.Interfaces.Entities; using AyCode.Interfaces.Entities;
using AyCode.Interfaces.Profiles;
using AyCode.Interfaces.TimeStampInfo; using AyCode.Interfaces.TimeStampInfo;
using AyCode.Interfaces.Users.Dtos; using AyCode.Interfaces.Users.Dtos;
namespace AyCode.Interfaces.Users; 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 PhoneNumber { get; set; }
public string? RefreshToken { get; set; } public string? RefreshToken { get; set; }

View File

@ -0,0 +1,18 @@
using AyCode.Interfaces.Profiles;
using AyCode.Interfaces.ServiceProviders;
namespace AyCode.Interfaces.Users;
public interface IAcUserListRelation<TUser, TUserToServiceProvider>
where TUser : class, IAcUserBase
where TUserToServiceProvider : class, IAcUserToServiceProviderBase
{
public List<TUser> Users { get; set; }
public List<TUserToServiceProvider> UserToServiceProviders { get; set; }
}
public interface IAcUserRelation<TUser> where TUser : class, IAcUserBase
{
public Guid UserId { get; }
public TUser User { get; set; }
}

View File

@ -0,0 +1,13 @@
using AyCode.Interfaces.Entities;
using AyCode.Interfaces.ServiceProviders;
using AyCode.Interfaces.TimeStampInfo;
namespace AyCode.Interfaces.Users;
public interface IAcUserToServiceProvider<TUser, TServiceProvider> : IAcUserToServiceProviderBase
where TUser : class, IAcUserBase
where TServiceProvider : class, IAcServiceProviderBase
{
public TUser User { get; set; }
public TServiceProvider ServiceProvider { get; set; }
}

View File

@ -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
{
}

View File

@ -0,0 +1,12 @@
using AyCode.Interfaces.ServiceProviders;
namespace AyCode.Interfaces.Users;
public interface IAcUserToServiceProviderRelation<TUser, TServiceProvider, TUserToServiceProvider>
where TUser : class, IAcUserBase, IAcServiceProviderRelation<TServiceProvider, TUserToServiceProvider>
where TServiceProvider : class, IAcServiceProviderBase
where TUserToServiceProvider : class, IAcUserToServiceProviderBase
{
public TUser User { get; set; }
public TServiceProvider ServiceProvider { get; set; }
}

View File

@ -0,0 +1,6 @@
namespace AyCode.Interfaces.Users;
public interface IUserForeignKey
{
Guid UserId { get; set; }
}

View File

@ -6,17 +6,49 @@ using AyCode.Interfaces.Users.Dtos;
namespace AyCode.Models.Users; namespace AyCode.Models.Users;
public abstract class AcUserModelDtoBase<TUserDto, TProfile, TProfileDto, TServiceProvider> : AcUserModelDtoMinBase<TUserDto, TProfile, TProfileDto>, IAcServiceProviderRelation<TServiceProvider> public abstract class AcUserModelDtoBase<TUserDto, TProfile, TProfileDto, TServiceProvider, TUserToServiceProvider> : AcUserModelDtoMinBase<TUserDto, TProfile, TProfileDto>, IAcServiceProviderRelation<TServiceProvider, TUserToServiceProvider>
where TUserDto : class, IAcUserDtoBase<TProfile, TServiceProvider> where TUserDto : class, IAcUserDtoBase<TProfile, TServiceProvider, TUserToServiceProvider>
where TProfile : class, IAcProfile where TProfile : class, IAcProfile
where TProfileDto : class, IAcProfileDtoBase where TProfileDto : class, IAcProfileDtoBase
where TServiceProvider : class, IAcServiceProvider where TServiceProvider : class, IAcServiceProviderBase
where TUserToServiceProvider : class, IAcUserToServiceProviderBase
{ {
public List<TServiceProvider> ServiceProviders { get; set; } public List<TServiceProvider> ServiceProviders { get; set; }
public List<TUserToServiceProvider> UserToServiceProviders { get; set; }
protected AcUserModelDtoBase() {} protected AcUserModelDtoBase() {}
protected AcUserModelDtoBase(IAcUserDtoBase<TProfile, TServiceProvider> user) : base(user) protected AcUserModelDtoBase(IAcUserDtoBase<TProfile, TServiceProvider, TUserToServiceProvider> user) : base(user)
{ {
//ServiceProvider... if (user.ServiceProviders.Count == 0) return;
//így proxy error lesz... - J.
//ServiceProviders = new List<TServiceProvider>(user.ServiceProviders);
//UserToServiceProviders = new List<TUserToServiceProvider>(user.UserToServiceProviders);
ServiceProviders = new List<TServiceProvider>(user.ServiceProviders.Count);
UserToServiceProviders = new List<TUserToServiceProvider>(user.UserToServiceProviders.Count);
foreach (var serviceProvider in user.ServiceProviders)
{
var newProvider = Activator.CreateInstance<TServiceProvider>();
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<TUserToServiceProvider>();
newUserToProvider.Id = userToServiceProvider.Id;
newUserToProvider.UserId = userToServiceProvider.UserId;
newUserToProvider.ServiceProviderId = userToServiceProvider.ServiceProviderId;
UserToServiceProviders.Add(newUserToProvider);
}
} }
} }

View File

@ -6,14 +6,15 @@ using AyCode.Interfaces.Users.Dtos;
namespace AyCode.Models.Users; namespace AyCode.Models.Users;
public abstract class AcUserModelDtoDetailBase<TUserDtoDetail, TProfile, TProfileDto, TServiceProvider> : AcUserModelDtoBase<TUserDtoDetail, TProfile, TProfileDto, TServiceProvider> public abstract class AcUserModelDtoDetailBase<TUserDtoDetail, TProfile, TProfileDto, TServiceProvider, TUserToServiceProvider> : AcUserModelDtoBase<TUserDtoDetail, TProfile, TProfileDto, TServiceProvider, TUserToServiceProvider>
where TUserDtoDetail : class, IAcUserDtoDetailBase<TProfile, TServiceProvider> where TUserDtoDetail : class, IAcUserDtoDetailBase<TProfile, TServiceProvider, TUserToServiceProvider>
where TProfile : class, IAcProfile where TProfile : class, IAcProfile
where TProfileDto : class, IAcProfileDtoBase where TProfileDto : class, IAcProfileDtoBase
where TServiceProvider : class, IAcServiceProvider where TServiceProvider : class, IAcServiceProviderBase
where TUserToServiceProvider : class, IAcUserToServiceProviderBase
{ {
protected AcUserModelDtoDetailBase() {} protected AcUserModelDtoDetailBase() {}
protected AcUserModelDtoDetailBase(IAcUserDtoDetailBase<TProfile, TServiceProvider> user) : base(user) protected AcUserModelDtoDetailBase(IAcUserDtoDetailBase<TProfile, TServiceProvider, TUserToServiceProvider> user) : base(user)
{ {
} }
} }