From 02a4c197b42168c14465b282b21ad243c41447a3 Mon Sep 17 00:00:00 2001 From: "jozsef.b@aycode.com" <9Rj@D}fVwBaN> Date: Wed, 20 Dec 2023 02:51:05 +0100 Subject: [PATCH] refactoring, improvements, fixes, etc... --- .../Users/AcUserDalTestBase.cs | 14 ++++++---- .../DataLayers/Users/AcUserDalBase.cs | 12 ++++---- .../DataLayers/Users/AcUserDalExtension.cs | 8 +++--- .../DbContexts/Users/AcUserDbContextBase.cs | 10 ++++--- .../DbContexts/Users/IAcUserDbContextBase.cs | 10 ++++--- .../Users/IAcUserTokenDbContextBase.cs | 2 +- .../DbSets/Users/AcUserDbSetExtensions.cs | 8 +++--- .../Users/AcUserTokenDbSetExtensions.cs | 21 +++++++------- .../Users/IAcUserChangePasswordDbSet.cs | 10 +++++++ AyCode.Database/DbSets/Users/IAcUserDbSet.cs | 13 ++++----- .../DbSets/Users/IAcUserDbSetBase.cs | 9 ++++++ .../DbSets/Users/IAcUserTokenDbSet.cs | 2 +- .../AcUserEntityTypeBuilderExtensions.cs | 12 ++++++-- .../Users/AcUserEntityTypeConfigurations.cs | 11 ++++++-- .../{AcProfileBase.cs => AcProfile.cs} | 6 ++-- ...ceProviderBase.cs => AcServiceProvider.cs} | 28 +++++++++---------- .../Users/{UserBase.cs => AcUser.cs} | 23 +++++++++------ .../{UserTokenBase.cs => AcUserTokenBase.cs} | 2 +- AyCode.Interfaces/Profiles/AcProfile.cs | 2 +- .../{IAcProfileBase.cs => IAcProfile.cs} | 2 +- .../Profiles/IAcProfileRelation.cs | 11 ++++++++ ...eProviderBase.cs => IAcServiceProvider.cs} | 5 ++-- .../IAcServiceProviderRelation.cs | 6 ++++ .../Users/Dtos/IAcUserDtoBase.cs | 11 ++++++-- .../Users/Dtos/IAcUserDtoDetailBase.cs | 9 +++--- .../Users/Dtos/IAcUserDtoMinBase.cs | 3 +- AyCode.Interfaces/Users/IAcUser.cs | 12 ++++++++ AyCode.Interfaces/Users/IAcUserBase.cs | 11 ++++++++ ...{IUserTokenBase.cs => IAcUserTokenBase.cs} | 2 +- AyCode.Interfaces/Users/IUserBase.cs | 13 --------- AyCode.Models/Users/AcUserModelDtoBase.cs | 12 +++++--- .../Users/AcUserModelDtoDetailBase.cs | 10 ++++--- AyCode.Models/Users/AcUserModelDtoMinBase.cs | 6 ++-- 33 files changed, 198 insertions(+), 118 deletions(-) create mode 100644 AyCode.Database/DbSets/Users/IAcUserChangePasswordDbSet.cs create mode 100644 AyCode.Database/DbSets/Users/IAcUserDbSetBase.cs rename AyCode.Entities/Profiles/{AcProfileBase.cs => AcProfile.cs} (83%) rename AyCode.Entities/ServiceProviders/{ServiceProviderBase.cs => AcServiceProvider.cs} (65%) rename AyCode.Entities/Users/{UserBase.cs => AcUser.cs} (50%) rename AyCode.Entities/Users/{UserTokenBase.cs => AcUserTokenBase.cs} (91%) rename AyCode.Interfaces/Profiles/{IAcProfileBase.cs => IAcProfile.cs} (76%) create mode 100644 AyCode.Interfaces/Profiles/IAcProfileRelation.cs rename AyCode.Interfaces/ServiceProviders/{IServiceProviderBase.cs => IAcServiceProvider.cs} (55%) create mode 100644 AyCode.Interfaces/ServiceProviders/IAcServiceProviderRelation.cs create mode 100644 AyCode.Interfaces/Users/IAcUser.cs create mode 100644 AyCode.Interfaces/Users/IAcUserBase.cs rename AyCode.Interfaces/Users/{IUserTokenBase.cs => IAcUserTokenBase.cs} (86%) delete mode 100644 AyCode.Interfaces/Users/IUserBase.cs diff --git a/AyCode.Database.Tests/Users/AcUserDalTestBase.cs b/AyCode.Database.Tests/Users/AcUserDalTestBase.cs index 287ee05..eb7f88d 100644 --- a/AyCode.Database.Tests/Users/AcUserDalTestBase.cs +++ b/AyCode.Database.Tests/Users/AcUserDalTestBase.cs @@ -2,16 +2,18 @@ using AyCode.Database.DbContexts; using AyCode.Database.DbContexts.Users; using AyCode.Interfaces.Profiles; +using AyCode.Interfaces.ServiceProviders; using AyCode.Interfaces.Users; namespace AyCode.Database.Tests.Users { - public abstract class AcUserDalTestBase : AcDatabaseTestModelBase - where TDal : AcUserDalBase - where TDbContext : AcDbContextBase, IAcUserDbContextBase - where TUser : class, IUserBase - where TProfile : class, IAcProfileBase - where TUserToken : class, IUserTokenBase + 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 { [TestMethod] public virtual void GetUserById_ReturnsUser_WhenUserExists(string userIdString) diff --git a/AyCode.Database/DataLayers/Users/AcUserDalBase.cs b/AyCode.Database/DataLayers/Users/AcUserDalBase.cs index 815a817..2c8f3e9 100644 --- a/AyCode.Database/DataLayers/Users/AcUserDalBase.cs +++ b/AyCode.Database/DataLayers/Users/AcUserDalBase.cs @@ -12,14 +12,16 @@ using AyCode.Database.Extensions; using AyCode.Core.Consts; using AyCode.Database.DbSets.Users; using AyCode.Interfaces.Profiles; +using AyCode.Interfaces.ServiceProviders; namespace AyCode.Database.DataLayers.Users { - public abstract class AcUserDalBase : AcDalBase - where TDbContext : AcDbContextBase, IAcUserDbContextBase - where TUser : class, IUserBase - where TProfile : class, IAcProfileBase - where TUserToken : class, IUserTokenBase + 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 { 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/DataLayers/Users/AcUserDalExtension.cs b/AyCode.Database/DataLayers/Users/AcUserDalExtension.cs index 5dbda8a..a83ce30 100644 --- a/AyCode.Database/DataLayers/Users/AcUserDalExtension.cs +++ b/AyCode.Database/DataLayers/Users/AcUserDalExtension.cs @@ -11,7 +11,7 @@ namespace AyCode.Database.DataLayers.Users { public static class AcUserDalExtension { - //public static bool DeleteUser(this IAcUserDbContextBase ctx, IUserBase user) + //public static bool DeleteUser(this IAcUserDbContextBase ctx, IAcUser user) //{ // if (user == null) return false; @@ -48,7 +48,7 @@ namespace AyCode.Database.DataLayers.Users // return ctx.SetUserConsentsToAccepted(user); //} - //public static bool SetUserConsentsToAccepted(this AcUserDbContextBase ctx, IUserBase? user) + //public static bool SetUserConsentsToAccepted(this AcUserDbContextBase ctx, IAcUser? user) //{ // if (!user.EmailConfirmed) return false; //Ez nem kéne ide... - J. @@ -76,7 +76,7 @@ namespace AyCode.Database.DataLayers.Users //public static void UsernameAndEmailAvailable(this IUserDal userDal, string username, string email, Action callback) //{ - // IUserBase notConfirmedUser = null; + // IAcUser notConfirmedUser = null; // var lowerEmail = email.ToLower(); // var lowerUserName = username.ToLower(); @@ -106,7 +106,7 @@ namespace AyCode.Database.DataLayers.Users //} - //public static void AddNewUser(this IUserDal userDal, IUserBase newUser, Action callback) + //public static void AddNewUser(this IUserDal userDal, IAcUser newUser, Action callback) //{ // userDal.Add(newUser); // callback(newUser); diff --git a/AyCode.Database/DbContexts/Users/AcUserDbContextBase.cs b/AyCode.Database/DbContexts/Users/AcUserDbContextBase.cs index 3f77677..ac1ef83 100644 --- a/AyCode.Database/DbContexts/Users/AcUserDbContextBase.cs +++ b/AyCode.Database/DbContexts/Users/AcUserDbContextBase.cs @@ -4,15 +4,17 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using AyCode.Interfaces.Profiles; +using AyCode.Interfaces.ServiceProviders; using AyCode.Interfaces.Users; using Microsoft.EntityFrameworkCore; namespace AyCode.Database.DbContexts.Users { - public abstract class AcUserDbContextBase : AcDbContextBase, IAcUserDbContextBase - where TUser : class, IUserBase - where TProfile : class, IAcProfileBase - where TUserToken : class, IUserTokenBase + public abstract class AcUserDbContextBase : AcDbContextBase, IAcUserDbContextBase + where TUser : class, IAcUser + where TProfile : class, IAcProfile + where TUserToken : class, IAcUserTokenBase + where TServiceProvider : class, IAcServiceProvider { 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 c6e6966..b2773be 100644 --- a/AyCode.Database/DbContexts/Users/IAcUserDbContextBase.cs +++ b/AyCode.Database/DbContexts/Users/IAcUserDbContextBase.cs @@ -1,13 +1,15 @@ using AyCode.Database.DbSets.Users; using AyCode.Interfaces.Profiles; +using AyCode.Interfaces.ServiceProviders; using AyCode.Interfaces.Users; using Microsoft.EntityFrameworkCore; namespace AyCode.Database.DbContexts.Users; -public interface IAcUserDbContextBase : IAcUserDbSet, IAcUserTokenDbSet - where TUser : class, IUserBase - where TProfile : class, IAcProfileBase - where TUserToken : class, IUserTokenBase +public interface IAcUserDbContextBase : IAcUserDbSet, IAcUserTokenDbSet + where TUser : class, IAcUser + where TProfile : class, IAcProfile + where TUserToken : class, IAcUserTokenBase + where TServiceProvider : class, IAcServiceProvider { } \ No newline at end of file diff --git a/AyCode.Database/DbContexts/Users/IAcUserTokenDbContextBase.cs b/AyCode.Database/DbContexts/Users/IAcUserTokenDbContextBase.cs index af10621..c326c5d 100644 --- a/AyCode.Database/DbContexts/Users/IAcUserTokenDbContextBase.cs +++ b/AyCode.Database/DbContexts/Users/IAcUserTokenDbContextBase.cs @@ -3,7 +3,7 @@ using Microsoft.EntityFrameworkCore; namespace AyCode.Database.DbContexts.Users; -public interface IAcUserTokenDbContextBase where TUserToken : class, IUserTokenBase +public interface IAcUserTokenDbContextBase where TUserToken : class, IAcUserTokenBase { DbSet UserToken { get; set; } } \ No newline at end of file diff --git a/AyCode.Database/DbSets/Users/AcUserDbSetExtensions.cs b/AyCode.Database/DbSets/Users/AcUserDbSetExtensions.cs index 0f1aa3c..cc4e9c7 100644 --- a/AyCode.Database/DbSets/Users/AcUserDbSetExtensions.cs +++ b/AyCode.Database/DbSets/Users/AcUserDbSetExtensions.cs @@ -7,16 +7,16 @@ namespace AyCode.Database.DbSets.Users; public static class AcUserDbSetExtensions { - public static TUser? GetUserById(this IAcUserDbSet ctx, Guid userId) where TUser : class, IUserBase where TProfile : class, IAcProfileBase + public static TUser? GetUserById(this IAcUserDbSetBase ctx, Guid userId) where TUser : class, IAcUserBase => ctx.GetUsersById(userId).FirstOrDefault(); - public static TUser? GetUserByEmail(this IAcUserDbSet ctx, string email) where TUser : class, IUserBase where TProfile : class, IAcProfileBase + public static TUser? GetUserByEmail(this IAcUserDbSetBase ctx, string email) where TUser : class, IAcUserBase => ctx.GetUsersByEmail(email).FirstOrDefault(); - public static IQueryable GetUsersById(this IAcUserDbSet ctx, Guid userId) where TUser : class, IUserBase where TProfile : class, IAcProfileBase + public static IQueryable GetUsersById(this IAcUserDbSetBase ctx, Guid userId) where TUser : class, IAcUserBase => ctx.Users.Where(u => u.Id == userId); - public static IQueryable GetUsersByEmail(this IAcUserDbSet ctx, string email) where TUser : class, IUserBase where TProfile : class, IAcProfileBase + public static IQueryable GetUsersByEmail(this IAcUserDbSetBase ctx, string email) where TUser : class, IAcUserBase { Logger.Info($"GetUserByEmail: {email}"); diff --git a/AyCode.Database/DbSets/Users/AcUserTokenDbSetExtensions.cs b/AyCode.Database/DbSets/Users/AcUserTokenDbSetExtensions.cs index c78b62a..3681954 100644 --- a/AyCode.Database/DbSets/Users/AcUserTokenDbSetExtensions.cs +++ b/AyCode.Database/DbSets/Users/AcUserTokenDbSetExtensions.cs @@ -6,10 +6,9 @@ namespace AyCode.Database.DbSets.Users; public static class AcUserTokenDbSetExtensions { - public static bool ChangePassword(this IAcUserDbContextBase ctx, TUser? user, string passwordHash, string verificationToken) - where TUser : class, IUserBase - where TProfile : class, IAcProfileBase - where TUserToken : class, IUserTokenBase + public static bool ChangePassword(this IAcUserChangePasswordDbSet ctx, TUser? user, string passwordHash, string verificationToken) + where TUser : class, IAcUserBase + where TUserToken : class, IAcUserTokenBase { if (user == null || !ctx.IsValidToken(user.Id, verificationToken)) return false; @@ -21,7 +20,7 @@ public static class AcUserTokenDbSetExtensions return true; } - public static TUserToken? UpdateUserTokenSent(this IAcUserTokenDbSet ctx, Guid userId, string verificationToken, DateTime tokenSentUtc) where TUserToken : class, IUserTokenBase + public static TUserToken? UpdateUserTokenSent(this IAcUserTokenDbSet ctx, Guid userId, string verificationToken, DateTime tokenSentUtc) where TUserToken : class, IAcUserTokenBase { var userToken = ctx.GetUserToken(userId, verificationToken); @@ -37,7 +36,7 @@ public static class AcUserTokenDbSetExtensions return userToken; } - public static TUserToken CreateUserToken(this IAcUserTokenDbSet ctx, Guid userId, string verificationToken) where TUserToken : class, IUserTokenBase + public static TUserToken CreateUserToken(this IAcUserTokenDbSet ctx, Guid userId, string verificationToken) where TUserToken : class, IAcUserTokenBase { var userToken = Activator.CreateInstance(); userToken.UserId = userId; @@ -46,7 +45,7 @@ public static class AcUserTokenDbSetExtensions return ctx.CreateUserToken(userToken); } - public static TUserToken CreateUserToken(this IAcUserTokenDbSet ctx, TUserToken userToken) where TUserToken : class, IUserTokenBase + public static TUserToken CreateUserToken(this IAcUserTokenDbSet ctx, TUserToken userToken) where TUserToken : class, IAcUserTokenBase { ctx.DeactivateTokens(userToken.UserId); @@ -56,16 +55,16 @@ public static class AcUserTokenDbSetExtensions return userToken; } - public static TUserToken? GetActiveUserToken(this IAcUserTokenDbSet ctx, Guid userId) where TUserToken : class, IUserTokenBase + public static TUserToken? GetActiveUserToken(this IAcUserTokenDbSet ctx, Guid userId) where TUserToken : class, IAcUserTokenBase => ctx.UserTokens.SingleOrDefault(x => x.UserId == userId && x.IsActive && (x.TokenExpiration == null || x.TokenExpiration > DateTime.UtcNow)); - public static TUserToken? GetUserToken(this IAcUserTokenDbSet ctx, Guid userId, string verificationToken) where TUserToken : class, IUserTokenBase + public static TUserToken? GetUserToken(this IAcUserTokenDbSet ctx, Guid userId, string verificationToken) where TUserToken : class, IAcUserTokenBase => ctx.UserTokens.SingleOrDefault(x => x.UserId == userId && x.Token == verificationToken); - public static bool IsValidToken(this IAcUserTokenDbSet ctx, Guid userId, string verificationToken) where TUserToken : class, IUserTokenBase + public static bool IsValidToken(this IAcUserTokenDbSet ctx, Guid userId, string verificationToken) where TUserToken : class, IAcUserTokenBase => ctx.UserTokens.Any(x => x.UserId == userId && x.IsActive && x.Token == verificationToken && x.TokenExpiration > DateTime.UtcNow && x.TokenSent < DateTime.UtcNow); - public static void DeactivateTokens(this IAcUserTokenDbSet ctx, Guid userId) where TUserToken : class, IUserTokenBase + public static void DeactivateTokens(this IAcUserTokenDbSet ctx, Guid userId) where TUserToken : class, IAcUserTokenBase { var activeUserTokens = ctx.UserTokens.Where(x => x.UserId == userId && x.IsActive); diff --git a/AyCode.Database/DbSets/Users/IAcUserChangePasswordDbSet.cs b/AyCode.Database/DbSets/Users/IAcUserChangePasswordDbSet.cs new file mode 100644 index 0000000..01a1dd9 --- /dev/null +++ b/AyCode.Database/DbSets/Users/IAcUserChangePasswordDbSet.cs @@ -0,0 +1,10 @@ +using AyCode.Interfaces.Users; + +namespace AyCode.Database.DbSets.Users; + +public interface IAcUserChangePasswordDbSet : IAcUserDbSetBase, IAcUserTokenDbSet + where TUser : class, IAcUserBase + where TUserToken : class, IAcUserTokenBase +{ + +} \ No newline at end of file diff --git a/AyCode.Database/DbSets/Users/IAcUserDbSet.cs b/AyCode.Database/DbSets/Users/IAcUserDbSet.cs index 1ae7fb1..c16e2f6 100644 --- a/AyCode.Database/DbSets/Users/IAcUserDbSet.cs +++ b/AyCode.Database/DbSets/Users/IAcUserDbSet.cs @@ -1,13 +1,12 @@ using AyCode.Database.DbContexts; using AyCode.Interfaces.Profiles; +using AyCode.Interfaces.ServiceProviders; using AyCode.Interfaces.Users; -using Microsoft.EntityFrameworkCore; namespace AyCode.Database.DbSets.Users; -public interface IAcUserDbSet - where TUser : class, IUserBase - where TProfile : class, IAcProfileBase -{ - DbSet Users { get; set; } -} \ No newline at end of file +public interface IAcUserDbSet : IAcUserDbSetBase + where TUser : class, IAcUser + where TProfile : class, IAcProfile + where TServiceProvider : class, IAcServiceProvider +{ } \ No newline at end of file diff --git a/AyCode.Database/DbSets/Users/IAcUserDbSetBase.cs b/AyCode.Database/DbSets/Users/IAcUserDbSetBase.cs new file mode 100644 index 0000000..e61e751 --- /dev/null +++ b/AyCode.Database/DbSets/Users/IAcUserDbSetBase.cs @@ -0,0 +1,9 @@ +using AyCode.Interfaces.Users; +using Microsoft.EntityFrameworkCore; + +namespace AyCode.Database.DbSets.Users; + +public interface IAcUserDbSetBase where TUser : class, IAcUserBase +{ + DbSet Users { get; set; } +} \ No newline at end of file diff --git a/AyCode.Database/DbSets/Users/IAcUserTokenDbSet.cs b/AyCode.Database/DbSets/Users/IAcUserTokenDbSet.cs index 80e4d90..4ef8e71 100644 --- a/AyCode.Database/DbSets/Users/IAcUserTokenDbSet.cs +++ b/AyCode.Database/DbSets/Users/IAcUserTokenDbSet.cs @@ -3,7 +3,7 @@ using Microsoft.EntityFrameworkCore; namespace AyCode.Database.DbSets.Users; -public interface IAcUserTokenDbSet where TUserToken : class, IUserTokenBase +public interface IAcUserTokenDbSet where TUserToken : class, IAcUserTokenBase { DbSet UserTokens { get; set; } } \ No newline at end of file diff --git a/AyCode.Database/ModelBuilders/Users/AcUserEntityTypeBuilderExtensions.cs b/AyCode.Database/ModelBuilders/Users/AcUserEntityTypeBuilderExtensions.cs index 2432a0a..5f3bb1f 100644 --- a/AyCode.Database/ModelBuilders/Users/AcUserEntityTypeBuilderExtensions.cs +++ b/AyCode.Database/ModelBuilders/Users/AcUserEntityTypeBuilderExtensions.cs @@ -1,17 +1,23 @@ using AyCode.Interfaces.Profiles; using AyCode.Interfaces.Users; using Microsoft.EntityFrameworkCore.Metadata.Builders; +using System.Formats.Tar; +using AyCode.Interfaces.ServiceProviders; namespace AyCode.Database.ModelBuilders.Users; public static class AcUserEntityTypeBuilderExtensions { - public static void BuildUserToProfileRelation(this EntityTypeBuilder modelBuilder) where TUser : class, IUserBase where TProfile : class, IAcProfileBase + public static void BuildEntityToProfileRelation(this EntityTypeBuilder modelBuilder, bool autoInclude = true) where TProfileRelation : class, IAcProfileRelation where TProfile : class, IAcProfile { - //throw new NotImplementedException(); + modelBuilder.Navigation(e => e.Profile).AutoInclude(autoInclude); } - public static void BuildUserToAddressRelation(this EntityTypeBuilder modelBuilder) where TUser : class, IUserBase where TProfile : class, IAcProfileBase + public static void BuildEntityToServiceProviderRelation(this EntityTypeBuilder modelBuilder, bool autoInclude = true) where TServiceProviderRelation : class, IAcServiceProviderRelation where TServiceProvider : class, IAcServiceProvider + { + } + + 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 7eaa10e..f0261bb 100644 --- a/AyCode.Database/ModelBuilders/Users/AcUserEntityTypeConfigurations.cs +++ b/AyCode.Database/ModelBuilders/Users/AcUserEntityTypeConfigurations.cs @@ -1,15 +1,20 @@ using AyCode.Database.DbContexts; using AyCode.Interfaces.Profiles; +using AyCode.Interfaces.ServiceProviders; using AyCode.Interfaces.Users; using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace AyCode.Database.ModelBuilders.Users; -public abstract class AcUserEntityTypeDefaultConfiguration : IAcEntityTypeConfiguration where TUser : class, IUserBase where TProfile : class, IAcProfileBase +public abstract class AcUserEntityTypeDefaultConfiguration : IAcEntityTypeConfiguration + where TUser : class, IAcUser + where TProfile : class, IAcProfile + where TServiceProvider : class, IAcServiceProvider { public virtual void Configure(EntityTypeBuilder modelBuilder) { - modelBuilder.BuildUserToProfileRelation(); - modelBuilder.BuildUserToAddressRelation(); + modelBuilder.BuildEntityToProfileRelation(); + modelBuilder.BuildEntityToAddressRelation(); + modelBuilder.BuildEntityToServiceProviderRelation(); } } diff --git a/AyCode.Entities/Profiles/AcProfileBase.cs b/AyCode.Entities/Profiles/AcProfile.cs similarity index 83% rename from AyCode.Entities/Profiles/AcProfileBase.cs rename to AyCode.Entities/Profiles/AcProfile.cs index 5be6748..c2045cd 100644 --- a/AyCode.Entities/Profiles/AcProfileBase.cs +++ b/AyCode.Entities/Profiles/AcProfile.cs @@ -10,11 +10,11 @@ using System.Threading.Tasks; namespace AyCode.Entities.Profiles { [Table("Profile")] - public abstract class AcProfileBase : IAcProfileBase + public abstract class AcProfile : IAcProfile { - protected AcProfileBase() { } + protected AcProfile() { } - protected AcProfileBase(Guid ownerId) : this() + protected AcProfile(Guid ownerId) : this() { OwnerId = ownerId; } diff --git a/AyCode.Entities/ServiceProviders/ServiceProviderBase.cs b/AyCode.Entities/ServiceProviders/AcServiceProvider.cs similarity index 65% rename from AyCode.Entities/ServiceProviders/ServiceProviderBase.cs rename to AyCode.Entities/ServiceProviders/AcServiceProvider.cs index b56c56e..9ca4701 100644 --- a/AyCode.Entities/ServiceProviders/ServiceProviderBase.cs +++ b/AyCode.Entities/ServiceProviders/AcServiceProvider.cs @@ -6,21 +6,8 @@ using AyCode.Interfaces.ServiceProviders; namespace AyCode.Entities.ServiceProviders { [Table("ServiceProviders")] - public abstract class ServiceProviderBase : IServiceProviderBase + public abstract class AcServiceProvider : IAcServiceProvider { - protected ServiceProviderBase() { } - - protected ServiceProviderBase(string name, Guid ownerId ) : this(Guid.NewGuid(), name, ownerId) { } - - protected ServiceProviderBase(Guid id, string name, Guid ownerId) : this() - { - Id = id; - Name = name; - OwnerId = ownerId; - } - - - [Key, DatabaseGenerated(DatabaseGeneratedOption.None)] public Guid Id { get; set; } public string Name { get; set; } @@ -28,6 +15,17 @@ namespace AyCode.Entities.ServiceProviders public DateTime Created { get; set; } public DateTime Modified { get; set; } - + + + protected AcServiceProvider() { } + + protected AcServiceProvider(string name, Guid ownerId ) : this(Guid.NewGuid(), name, ownerId) { } + + protected AcServiceProvider(Guid id, string name, Guid ownerId) : this() + { + Id = id; + Name = name; + OwnerId = ownerId; + } } } diff --git a/AyCode.Entities/Users/UserBase.cs b/AyCode.Entities/Users/AcUser.cs similarity index 50% rename from AyCode.Entities/Users/UserBase.cs rename to AyCode.Entities/Users/AcUser.cs index 0aa6112..22eb674 100644 --- a/AyCode.Entities/Users/UserBase.cs +++ b/AyCode.Entities/Users/AcUser.cs @@ -7,11 +7,13 @@ using System.Text; using System.Threading.Tasks; using AyCode.Interfaces.Profiles; using AyCode.Interfaces.Users; +using AyCode.Entities.ServiceProviders; +using AyCode.Interfaces.ServiceProviders; namespace AyCode.Entities.Users { [Table("Users")] - public abstract class UserBase : IUserBase where TProfile : class, IAcProfileBase + public abstract class AcUser : IAcUser where TProfile : class, IAcProfile where TServiceProvider : class, IAcServiceProvider { [Key, DatabaseGenerated(DatabaseGeneratedOption.None)] public Guid Id { get; set; } @@ -24,35 +26,38 @@ namespace AyCode.Entities.Users public bool EmailConfirmed { get; set; } - public Guid? ProfileId { get; } + public Guid ProfileId { get; } [ForeignKey(nameof(ProfileId))] public virtual TProfile Profile { get; set; } + //[NotMapped] + public virtual List ServiceProviders { get; set; } + public DateTime Created { get; set; } public DateTime Modified { get; set; } - protected UserBase() { } + protected AcUser() { } - protected UserBase(string email, string password) : this(Guid.NewGuid(), email, password) { } + protected AcUser(string email, string password) : this(Guid.NewGuid(), email, password) { } - protected UserBase(Guid id, string email, string password) : this() + protected AcUser(Guid id, string email, string password) : this() { Id = id; EmailAddress = email; Password = password; } - protected UserBase(string email, string phoneNumber, string password) : this(Guid.NewGuid(), email, phoneNumber, password) { } + protected AcUser(string email, string phoneNumber, string password) : this(Guid.NewGuid(), email, phoneNumber, password) { } - protected UserBase(Guid id, string email, string phoneNumber, string password) : this(id, email, password) + protected AcUser(Guid id, string email, string phoneNumber, string password) : this(id, email, password) { PhoneNumber = phoneNumber; } - protected UserBase(string email, string phoneNumber, string password, string refreshToken) : this(Guid.NewGuid(), email, phoneNumber, password, refreshToken) { } + protected AcUser(string email, string phoneNumber, string password, string refreshToken) : this(Guid.NewGuid(), email, phoneNumber, password, refreshToken) { } - protected UserBase(Guid id, string email, string phoneNumber, string password, string refreshToken) : this(id, email, phoneNumber, password) + protected AcUser(Guid id, string email, string phoneNumber, string password, string refreshToken) : this(id, email, phoneNumber, password) { RefreshToken = refreshToken; } diff --git a/AyCode.Entities/Users/UserTokenBase.cs b/AyCode.Entities/Users/AcUserTokenBase.cs similarity index 91% rename from AyCode.Entities/Users/UserTokenBase.cs rename to AyCode.Entities/Users/AcUserTokenBase.cs index 6fd19ff..68bb126 100644 --- a/AyCode.Entities/Users/UserTokenBase.cs +++ b/AyCode.Entities/Users/AcUserTokenBase.cs @@ -5,7 +5,7 @@ using System.ComponentModel.DataAnnotations; namespace AyCode.Entities.Users; [Table("UserToken")] -public abstract class UserTokenBase : IUserTokenBase +public abstract class AcUserTokenBase : IAcUserTokenBase { [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } diff --git a/AyCode.Interfaces/Profiles/AcProfile.cs b/AyCode.Interfaces/Profiles/AcProfile.cs index 42a3064..e5f9b12 100644 --- a/AyCode.Interfaces/Profiles/AcProfile.cs +++ b/AyCode.Interfaces/Profiles/AcProfile.cs @@ -1,6 +1,6 @@ namespace AyCode.Interfaces.Profiles; -public abstract class AcProfile : IAcProfileBase +public abstract class AcProfile : IAcProfile { public Guid Id { get; set; } public Guid OwnerId { get; set; } diff --git a/AyCode.Interfaces/Profiles/IAcProfileBase.cs b/AyCode.Interfaces/Profiles/IAcProfile.cs similarity index 76% rename from AyCode.Interfaces/Profiles/IAcProfileBase.cs rename to AyCode.Interfaces/Profiles/IAcProfile.cs index 3767b2f..044047d 100644 --- a/AyCode.Interfaces/Profiles/IAcProfileBase.cs +++ b/AyCode.Interfaces/Profiles/IAcProfile.cs @@ -6,6 +6,6 @@ using AyCode.Interfaces.Profiles.Dtos; namespace AyCode.Interfaces.Profiles; -public interface IAcProfileBase : IAcProfileDtoBase, ITimeStampInfo +public interface IAcProfile : IAcProfileDtoBase, ITimeStampInfo { } \ No newline at end of file diff --git a/AyCode.Interfaces/Profiles/IAcProfileRelation.cs b/AyCode.Interfaces/Profiles/IAcProfileRelation.cs new file mode 100644 index 0000000..dee6c75 --- /dev/null +++ b/AyCode.Interfaces/Profiles/IAcProfileRelation.cs @@ -0,0 +1,11 @@ +using AyCode.Interfaces.TimeStampInfo; +using AyCode.Interfaces.Users.Dtos; +using AyCode.Interfaces.Users; + +namespace AyCode.Interfaces.Profiles; + +public interface IAcProfileRelation where TProfile : class, IAcProfile +{ + public Guid ProfileId { get; } + public TProfile Profile { get; set; } +} \ No newline at end of file diff --git a/AyCode.Interfaces/ServiceProviders/IServiceProviderBase.cs b/AyCode.Interfaces/ServiceProviders/IAcServiceProvider.cs similarity index 55% rename from AyCode.Interfaces/ServiceProviders/IServiceProviderBase.cs rename to AyCode.Interfaces/ServiceProviders/IAcServiceProvider.cs index ad96ff2..3d72796 100644 --- a/AyCode.Interfaces/ServiceProviders/IServiceProviderBase.cs +++ b/AyCode.Interfaces/ServiceProviders/IAcServiceProvider.cs @@ -1,11 +1,12 @@  using AyCode.Interfaces.Entities; +using AyCode.Interfaces.Profiles; using AyCode.Interfaces.TimeStampInfo; +using System; namespace AyCode.Interfaces.ServiceProviders; -public interface IServiceProviderBase : IEntityGuid, ITimeStampInfo +public interface IAcServiceProvider : IEntityGuid, ITimeStampInfo, IOwnerId { string Name { get; } - Guid OwnerId { get; } } \ No newline at end of file diff --git a/AyCode.Interfaces/ServiceProviders/IAcServiceProviderRelation.cs b/AyCode.Interfaces/ServiceProviders/IAcServiceProviderRelation.cs new file mode 100644 index 0000000..0940968 --- /dev/null +++ b/AyCode.Interfaces/ServiceProviders/IAcServiceProviderRelation.cs @@ -0,0 +1,6 @@ +namespace AyCode.Interfaces.ServiceProviders; + +public interface IAcServiceProviderRelation where TServiceProvider : class, IAcServiceProvider +{ + public List ServiceProviders { 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 ae48e15..a6043e9 100644 --- a/AyCode.Interfaces/Users/Dtos/IAcUserDtoBase.cs +++ b/AyCode.Interfaces/Users/Dtos/IAcUserDtoBase.cs @@ -1,6 +1,11 @@ -namespace AyCode.Interfaces.Users.Dtos; +using AyCode.Interfaces.Entities; +using AyCode.Interfaces.Profiles; +using AyCode.Interfaces.ServiceProviders; -public interface IAcUserDtoBase : IAcUserDtoMinBase +namespace AyCode.Interfaces.Users.Dtos; + +public interface IAcUserDtoBase : IAcUserDtoMinBase, IAcServiceProviderRelation + where TProfile : class, IAcProfile + where TServiceProvider : class, IAcServiceProvider { - } \ No newline at end of file diff --git a/AyCode.Interfaces/Users/Dtos/IAcUserDtoDetailBase.cs b/AyCode.Interfaces/Users/Dtos/IAcUserDtoDetailBase.cs index 53a84a9..6d893b4 100644 --- a/AyCode.Interfaces/Users/Dtos/IAcUserDtoDetailBase.cs +++ b/AyCode.Interfaces/Users/Dtos/IAcUserDtoDetailBase.cs @@ -1,10 +1,11 @@ using AyCode.Interfaces.Entities; +using AyCode.Interfaces.Profiles; +using AyCode.Interfaces.ServiceProviders; namespace AyCode.Interfaces.Users.Dtos; -public interface IAcUserDtoDetailBase : IEmailAddress, IAcUserDtoBase +public interface IAcUserDtoDetailBase : IAcUserBase, IAcUserDtoBase + where TProfile : class, IAcProfile + where TServiceProvider : class, IAcServiceProvider { - public string PhoneNumber { get; set; } - public string? RefreshToken { get; set; } - } \ No newline at end of file diff --git a/AyCode.Interfaces/Users/Dtos/IAcUserDtoMinBase.cs b/AyCode.Interfaces/Users/Dtos/IAcUserDtoMinBase.cs index c18a506..f102833 100644 --- a/AyCode.Interfaces/Users/Dtos/IAcUserDtoMinBase.cs +++ b/AyCode.Interfaces/Users/Dtos/IAcUserDtoMinBase.cs @@ -1,9 +1,10 @@  using AyCode.Interfaces.Entities; +using AyCode.Interfaces.Profiles; namespace AyCode.Interfaces.Users.Dtos; -public interface IAcUserDtoMinBase : IEntityGuid +public interface IAcUserDtoMinBase : IEntityGuid, IAcProfileRelation where TProfile : class, IAcProfile { } \ No newline at end of file diff --git a/AyCode.Interfaces/Users/IAcUser.cs b/AyCode.Interfaces/Users/IAcUser.cs new file mode 100644 index 0000000..3a67825 --- /dev/null +++ b/AyCode.Interfaces/Users/IAcUser.cs @@ -0,0 +1,12 @@ + +using AyCode.Interfaces.Entities; +using AyCode.Interfaces.Profiles; +using AyCode.Interfaces.ServiceProviders; +using AyCode.Interfaces.Users.Dtos; + +namespace AyCode.Interfaces.Users; + +public interface IAcUser : IAcUserDtoDetailBase + where TProfile : class, IAcProfile + where TServiceProvider : class, IAcServiceProvider +{ } \ No newline at end of file diff --git a/AyCode.Interfaces/Users/IAcUserBase.cs b/AyCode.Interfaces/Users/IAcUserBase.cs new file mode 100644 index 0000000..3768255 --- /dev/null +++ b/AyCode.Interfaces/Users/IAcUserBase.cs @@ -0,0 +1,11 @@ +using AyCode.Interfaces.Entities; +using AyCode.Interfaces.TimeStampInfo; +using AyCode.Interfaces.Users.Dtos; + +namespace AyCode.Interfaces.Users; + +public interface IAcUserBase : IEntityGuid, IEmailAddress, IPassword, ITimeStampInfo +{ + public string PhoneNumber { get; set; } + public string? RefreshToken { get; set; } +} \ No newline at end of file diff --git a/AyCode.Interfaces/Users/IUserTokenBase.cs b/AyCode.Interfaces/Users/IAcUserTokenBase.cs similarity index 86% rename from AyCode.Interfaces/Users/IUserTokenBase.cs rename to AyCode.Interfaces/Users/IAcUserTokenBase.cs index a629c67..6d3247c 100644 --- a/AyCode.Interfaces/Users/IUserTokenBase.cs +++ b/AyCode.Interfaces/Users/IAcUserTokenBase.cs @@ -5,7 +5,7 @@ using AyCode.Interfaces.TimeStampInfo; namespace AyCode.Interfaces.Users; -public interface IUserTokenBase : IEntity, ITimeStampInfo +public interface IAcUserTokenBase : IEntity, ITimeStampInfo { public Guid UserId { get; set; } public bool IsActive { get; set; } diff --git a/AyCode.Interfaces/Users/IUserBase.cs b/AyCode.Interfaces/Users/IUserBase.cs deleted file mode 100644 index ab8fa97..0000000 --- a/AyCode.Interfaces/Users/IUserBase.cs +++ /dev/null @@ -1,13 +0,0 @@ - -using AyCode.Interfaces.Entities; -using AyCode.Interfaces.Profiles; -using AyCode.Interfaces.TimeStampInfo; -using AyCode.Interfaces.Users.Dtos; - -namespace AyCode.Interfaces.Users; - -public interface IUserBase : IAcUserDtoDetailBase, IPassword, ITimeStampInfo where TProfile : class, IAcProfileBase -{ - public Guid? ProfileId { get; } - public TProfile Profile { get; set; } -} \ No newline at end of file diff --git a/AyCode.Models/Users/AcUserModelDtoBase.cs b/AyCode.Models/Users/AcUserModelDtoBase.cs index 0202540..ae7bdbf 100644 --- a/AyCode.Models/Users/AcUserModelDtoBase.cs +++ b/AyCode.Models/Users/AcUserModelDtoBase.cs @@ -1,17 +1,21 @@ using AyCode.Interfaces.Profiles; using AyCode.Interfaces.Profiles.Dtos; +using AyCode.Interfaces.ServiceProviders; using AyCode.Interfaces.Users; using AyCode.Interfaces.Users.Dtos; namespace AyCode.Models.Users; -public abstract class AcUserModelDtoBase : AcUserModelDtoMinBase - where TUserDto : class, IAcUserDtoBase - where TProfile : class, IAcProfileBase +public abstract class AcUserModelDtoBase : AcUserModelDtoMinBase, IAcServiceProviderRelation + where TUserDto : class, IAcUserDtoBase + where TProfile : class, IAcProfile where TProfileDto : class, IAcProfileDtoBase + where TServiceProvider : class, IAcServiceProvider { + public List ServiceProviders { get; set; } + protected AcUserModelDtoBase() {} - protected AcUserModelDtoBase(IUserBase user) : base(user) + protected AcUserModelDtoBase(IAcUserDtoBase user) : base(user) { //ServiceProvider... } diff --git a/AyCode.Models/Users/AcUserModelDtoDetailBase.cs b/AyCode.Models/Users/AcUserModelDtoDetailBase.cs index 918ccca..2b7c7a0 100644 --- a/AyCode.Models/Users/AcUserModelDtoDetailBase.cs +++ b/AyCode.Models/Users/AcUserModelDtoDetailBase.cs @@ -1,17 +1,19 @@ using AyCode.Interfaces.Profiles; using AyCode.Interfaces.Profiles.Dtos; +using AyCode.Interfaces.ServiceProviders; using AyCode.Interfaces.Users; using AyCode.Interfaces.Users.Dtos; namespace AyCode.Models.Users; -public abstract class AcUserModelDtoDetailBase : AcUserModelDtoBase - where TUserDtoDetail : class, IAcUserDtoDetailBase - where TProfile : class, IAcProfileBase +public abstract class AcUserModelDtoDetailBase : AcUserModelDtoBase + where TUserDtoDetail : class, IAcUserDtoDetailBase + where TProfile : class, IAcProfile where TProfileDto : class, IAcProfileDtoBase + where TServiceProvider : class, IAcServiceProvider { protected AcUserModelDtoDetailBase() {} - protected AcUserModelDtoDetailBase(IUserBase user) : base(user) + protected AcUserModelDtoDetailBase(IAcUserDtoDetailBase user) : base(user) { } } \ No newline at end of file diff --git a/AyCode.Models/Users/AcUserModelDtoMinBase.cs b/AyCode.Models/Users/AcUserModelDtoMinBase.cs index 64d197f..832f28e 100644 --- a/AyCode.Models/Users/AcUserModelDtoMinBase.cs +++ b/AyCode.Models/Users/AcUserModelDtoMinBase.cs @@ -6,15 +6,15 @@ using AyCode.Interfaces.Users.Dtos; namespace AyCode.Models.Users; public abstract class AcUserModelDtoMinBase : AcModelDtoBase - where TUserDtoMin : class, IAcUserDtoMinBase - where TProfile : class, IAcProfileBase + where TUserDtoMin : class, IAcUserDtoMinBase + where TProfile : class, IAcProfile where TProfileDto : class, IAcProfileDtoBase { public TUserDtoMin UserDto { get; set;} public TProfileDto? Profile { get; set; } protected AcUserModelDtoMinBase() {} - protected AcUserModelDtoMinBase(IUserBase user) : base(user.Id) + protected AcUserModelDtoMinBase(IAcUserDtoMinBase user) : base(user.Id) { Id = user.Id;