From 2d792c854461b7fe8c1a7d47ff36022eece01003 Mon Sep 17 00:00:00 2001 From: Developer 02 Date: Wed, 16 Apr 2025 11:02:44 +0200 Subject: [PATCH] chore: Refactor project structure and update DI setup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die Datei `DIExtensions.cs` wurde erheblich überarbeitet, um Abhängigkeiten von der Schicht `DigitalData.UserManager.Infrastructure` zu entfernen. Die Methode `AddUserManager` wurde vereinfacht und eine Methode `AddEncryptor` hinzugefügt. Die Projektverweise auf die Infrastrukturebene in der Anwendungsprojektdatei wurden entfernt. Aktualisierte Servicedateien zur Verwendung neuer Repository-Schnittstellen aus „DigitalData.UserManager.Application.Contracts.Repositories“. Repository-Schnittstellen wurden in den Namensraum für Anwendungsverträge verschoben und ihre Definitionen aktualisiert. Einführung von `DependencyInjection.cs` für die Handhabung von Infrastrukturdienstregistrierungen. Aktualisierte Repository-Implementierungen, um sie an die neue Struktur anzupassen, die Trennung von Belangen zu verbessern und die Injektion von Abhängigkeiten zu vereinfachen. --- .../Repositories/IClientUserRepository.cs | 9 +++ .../Repositories/IGroupOfUserRepository.cs | 27 +++++++++ .../Repositories/IGroupRepository.cs | 8 +++ .../Repositories/IModuleOfUserRepository.cs | 13 +++++ .../Repositories/IModuleRepository.cs | 8 +++ .../Repositories/IUserRepRepository.cs | 11 ++++ .../Contracts/Repositories/IUserRepository.cs | 17 ++++++ .../DIExtensions.cs | 26 +-------- ...DigitalData.UserManager.Application.csproj | 1 - .../Services/GroupOfUserService.cs | 2 +- .../Services/GroupService.cs | 2 +- .../Services/ModuleOfUserService.cs | 2 +- .../Services/ModuleService.cs | 2 +- .../Services/UserRepService.cs | 2 +- .../Services/UserService.cs | 2 +- .../Contracts/IClientUserRepository.cs | 10 ---- .../Contracts/IGroupOfUserRepository.cs | 28 --------- .../Contracts/IGroupRepository.cs | 9 --- .../Contracts/IModuleOfUserRepository.cs | 14 ----- .../Contracts/IModuleRepository.cs | 9 --- .../Contracts/IUserManagerDbContext.cs | 21 ++++--- .../Contracts/IUserRepRepository.cs | 12 ---- .../Contracts/IUserRepository.cs | 18 ------ .../DependencyInjection.cs | 51 ++++++++++++++++ ...italData.UserManager.Infrastructure.csproj | 1 + .../Repositories/ClientUserRepository.cs | 3 +- .../Repositories/GroupOfUserRepository.cs | 1 + .../Repositories/GroupRepository.cs | 1 + .../Repositories/ModuleOfUserRepository.cs | 40 ++++++------- .../Repositories/ModuleRepository.cs | 12 ++-- .../Repositories/UserRepRepository.cs | 58 +++++++++---------- .../Repositories/UserRepository.cs | 1 + 32 files changed, 223 insertions(+), 198 deletions(-) create mode 100644 DigitalData.UserManager.Application/Contracts/Repositories/IClientUserRepository.cs create mode 100644 DigitalData.UserManager.Application/Contracts/Repositories/IGroupOfUserRepository.cs create mode 100644 DigitalData.UserManager.Application/Contracts/Repositories/IGroupRepository.cs create mode 100644 DigitalData.UserManager.Application/Contracts/Repositories/IModuleOfUserRepository.cs create mode 100644 DigitalData.UserManager.Application/Contracts/Repositories/IModuleRepository.cs create mode 100644 DigitalData.UserManager.Application/Contracts/Repositories/IUserRepRepository.cs create mode 100644 DigitalData.UserManager.Application/Contracts/Repositories/IUserRepository.cs delete mode 100644 DigitalData.UserManager.Infrastructure/Contracts/IClientUserRepository.cs delete mode 100644 DigitalData.UserManager.Infrastructure/Contracts/IGroupOfUserRepository.cs delete mode 100644 DigitalData.UserManager.Infrastructure/Contracts/IGroupRepository.cs delete mode 100644 DigitalData.UserManager.Infrastructure/Contracts/IModuleOfUserRepository.cs delete mode 100644 DigitalData.UserManager.Infrastructure/Contracts/IModuleRepository.cs delete mode 100644 DigitalData.UserManager.Infrastructure/Contracts/IUserRepRepository.cs delete mode 100644 DigitalData.UserManager.Infrastructure/Contracts/IUserRepository.cs create mode 100644 DigitalData.UserManager.Infrastructure/DependencyInjection.cs diff --git a/DigitalData.UserManager.Application/Contracts/Repositories/IClientUserRepository.cs b/DigitalData.UserManager.Application/Contracts/Repositories/IClientUserRepository.cs new file mode 100644 index 0000000..edad729 --- /dev/null +++ b/DigitalData.UserManager.Application/Contracts/Repositories/IClientUserRepository.cs @@ -0,0 +1,9 @@ +using DigitalData.Core.Abstractions.Infrastructure; +using DigitalData.UserManager.Domain.Entities; + +namespace DigitalData.UserManager.Application.Contracts.Repositories; + +public interface IClientUserRepository : ICRUDRepository +{ + Task> ReadAsync(bool readOnly = true, int? userId = null); +} \ No newline at end of file diff --git a/DigitalData.UserManager.Application/Contracts/Repositories/IGroupOfUserRepository.cs b/DigitalData.UserManager.Application/Contracts/Repositories/IGroupOfUserRepository.cs new file mode 100644 index 0000000..a64eadf --- /dev/null +++ b/DigitalData.UserManager.Application/Contracts/Repositories/IGroupOfUserRepository.cs @@ -0,0 +1,27 @@ +using DigitalData.Core.Abstractions.Infrastructure; +using DigitalData.UserManager.Domain.Entities; + +namespace DigitalData.UserManager.Application.Contracts.Repositories; + +public interface IGroupOfUserRepository : ICRUDRepository +{ + IQueryable ReadByGroupId(int groupId); + + Task> ReadByGroupUserIdAsync(int groupId, int userId); + + Task> ReadAllAsyncWithGroup(); + + Task> ReadAllAsyncWithUser(); + + Task> ReadAllAsyncWithGroupAndUser(); + + Task> ReadByUsernameAsync(string username); + + Task> ReadByUserIdAsync(int userId); + + // merge all GroupOfUserRepository-methods conditionally under this method + Task> ReadAsync( + bool readOnly = true, + bool withGroup = true, bool withUser = true, + int? id = null, int? groupId = null, int? userId = null, string? username = null); +} \ No newline at end of file diff --git a/DigitalData.UserManager.Application/Contracts/Repositories/IGroupRepository.cs b/DigitalData.UserManager.Application/Contracts/Repositories/IGroupRepository.cs new file mode 100644 index 0000000..3755414 --- /dev/null +++ b/DigitalData.UserManager.Application/Contracts/Repositories/IGroupRepository.cs @@ -0,0 +1,8 @@ +using DigitalData.Core.Abstractions.Infrastructure; +using DigitalData.UserManager.Domain.Entities; + +namespace DigitalData.UserManager.Application.Contracts.Repositories; + +public interface IGroupRepository : ICRUDRepository +{ +} \ No newline at end of file diff --git a/DigitalData.UserManager.Application/Contracts/Repositories/IModuleOfUserRepository.cs b/DigitalData.UserManager.Application/Contracts/Repositories/IModuleOfUserRepository.cs new file mode 100644 index 0000000..79e8ebe --- /dev/null +++ b/DigitalData.UserManager.Application/Contracts/Repositories/IModuleOfUserRepository.cs @@ -0,0 +1,13 @@ +using DigitalData.Core.Abstractions.Infrastructure; +using DigitalData.UserManager.Domain.Entities; + +namespace DigitalData.UserManager.Application.Contracts.Repositories; + +public interface IModuleOfUserRepository : ICRUDRepository +{ + IQueryable ReadByModuleId(int moduleId); + + Task> ReadByModelUserIdAsync(int moduleId, int userId); + + Task> ReadByUserAsync(string username); +} \ No newline at end of file diff --git a/DigitalData.UserManager.Application/Contracts/Repositories/IModuleRepository.cs b/DigitalData.UserManager.Application/Contracts/Repositories/IModuleRepository.cs new file mode 100644 index 0000000..f740ab6 --- /dev/null +++ b/DigitalData.UserManager.Application/Contracts/Repositories/IModuleRepository.cs @@ -0,0 +1,8 @@ +using DigitalData.Core.Abstractions.Infrastructure; +using DigitalData.UserManager.Domain.Entities; + +namespace DigitalData.UserManager.Application.Contracts.Repositories; + +public interface IModuleRepository : ICRUDRepository +{ +} \ No newline at end of file diff --git a/DigitalData.UserManager.Application/Contracts/Repositories/IUserRepRepository.cs b/DigitalData.UserManager.Application/Contracts/Repositories/IUserRepRepository.cs new file mode 100644 index 0000000..99e6867 --- /dev/null +++ b/DigitalData.UserManager.Application/Contracts/Repositories/IUserRepRepository.cs @@ -0,0 +1,11 @@ +using DigitalData.Core.Abstractions.Infrastructure; +using DigitalData.UserManager.Domain.Entities; + +namespace DigitalData.UserManager.Application.Contracts.Repositories; + +public interface IUserRepRepository : ICRUDRepository +{ + Task> ReadAllAsync( + bool withUser = false, bool withRepGroup = false, bool withGroup = false, bool withRepUser = false, + int? userId = null, int? repUserId = null, int? groupId = null, int? repGroupId = null, bool readOnly = true); +} \ No newline at end of file diff --git a/DigitalData.UserManager.Application/Contracts/Repositories/IUserRepository.cs b/DigitalData.UserManager.Application/Contracts/Repositories/IUserRepository.cs new file mode 100644 index 0000000..6f8a983 --- /dev/null +++ b/DigitalData.UserManager.Application/Contracts/Repositories/IUserRepository.cs @@ -0,0 +1,17 @@ +using DigitalData.Core.Abstractions.Infrastructure; +using DigitalData.UserManager.Domain.Entities; + +namespace DigitalData.UserManager.Application.Contracts.Repositories; + +public interface IUserRepository : ICRUDRepository +{ + Task> ReadByModuleIdAsync(int moduleId); + + Task> ReadUnassignedByModuleIdAsync(int moduleId); + + Task> ReadByGroupIdAsync(int groupId); + + Task> ReadUnassignedByGroupIdAsync(int groupId); + + Task ReadByUsernameAsync(string username); +} \ No newline at end of file diff --git a/DigitalData.UserManager.Application/DIExtensions.cs b/DigitalData.UserManager.Application/DIExtensions.cs index a8bbda8..0b96ddf 100644 --- a/DigitalData.UserManager.Application/DIExtensions.cs +++ b/DigitalData.UserManager.Application/DIExtensions.cs @@ -2,9 +2,6 @@ using DigitalData.UserManager.Application.MappingProfiles; using DigitalData.UserManager.Application.Services; using DigitalData.UserManager.Application.Services.Options; -using DigitalData.UserManager.Infrastructure.Contracts; -using DigitalData.UserManager.Infrastructure.Repositories; -using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; @@ -19,8 +16,7 @@ namespace DigitalData.UserManager.Application /// The type of the DbContext to use for the repositories. /// The IServiceCollection to which the services will be added. /// The updated IServiceCollection. - public static IServiceCollection AddUserManager(this IServiceCollection services) - where TDbContext : DbContext, IUserManagerDbContext + public static IServiceCollection AddUserManager(this IServiceCollection services) => services .AddAutoMapper(typeof(UserMappingProfile).Assembly) .AddAutoMapper(typeof(GroupMappingProfile).Assembly) @@ -29,31 +25,13 @@ namespace DigitalData.UserManager.Application .AddAutoMapper(typeof(ModuleOfUserMappingProfile).Assembly) .AddAutoMapper(typeof(UserRepMappingProfile).Assembly) - .AddScoped>() - .AddScoped>() - .AddScoped>() - .AddScoped>() - .AddScoped>() - .AddScoped>() - .AddScoped>() - .AddScoped() .AddScoped() .AddScoped() .AddScoped() .AddScoped() .AddScoped(); - - /// - /// Adds the UserManager services and repositories to the specified . - /// This method registers the necessary mappings, repositories, services and for the UserManager. - /// - /// The IServiceCollection to which the services will be added. - /// The updated IServiceCollection. - public static IServiceCollection AddUserManager(this IServiceCollection services, string connectionString)=> services - .AddDbContext(options => options.UseSqlServer(connectionString).EnableSensitiveDataLogging()) - .AddUserManager(); - + public static IServiceCollection AddEncryptor(this IServiceCollection services, IConfiguration configuration) { services.AddSingleton(); diff --git a/DigitalData.UserManager.Application/DigitalData.UserManager.Application.csproj b/DigitalData.UserManager.Application/DigitalData.UserManager.Application.csproj index a5f8719..4816f0a 100644 --- a/DigitalData.UserManager.Application/DigitalData.UserManager.Application.csproj +++ b/DigitalData.UserManager.Application/DigitalData.UserManager.Application.csproj @@ -40,7 +40,6 @@ - diff --git a/DigitalData.UserManager.Application/Services/GroupOfUserService.cs b/DigitalData.UserManager.Application/Services/GroupOfUserService.cs index 8846b48..8b10619 100644 --- a/DigitalData.UserManager.Application/Services/GroupOfUserService.cs +++ b/DigitalData.UserManager.Application/Services/GroupOfUserService.cs @@ -3,7 +3,7 @@ using DigitalData.Core.DTO; using DigitalData.UserManager.Application.Contracts; using DigitalData.UserManager.Application.DTOs.GroupOfUser; using DigitalData.UserManager.Domain.Entities; -using DigitalData.UserManager.Infrastructure.Contracts; +using DigitalData.UserManager.Application.Contracts.Repositories; namespace DigitalData.UserManager.Application.Services { diff --git a/DigitalData.UserManager.Application/Services/GroupService.cs b/DigitalData.UserManager.Application/Services/GroupService.cs index 299cd30..5e6b4ab 100644 --- a/DigitalData.UserManager.Application/Services/GroupService.cs +++ b/DigitalData.UserManager.Application/Services/GroupService.cs @@ -3,7 +3,7 @@ using DigitalData.Core.DTO; using DigitalData.UserManager.Application.Contracts; using DigitalData.UserManager.Application.DTOs.Group; using DigitalData.UserManager.Domain.Entities; -using DigitalData.UserManager.Infrastructure.Contracts; +using DigitalData.UserManager.Application.Contracts.Repositories; using Microsoft.Extensions.Localization; namespace DigitalData.UserManager.Application.Services diff --git a/DigitalData.UserManager.Application/Services/ModuleOfUserService.cs b/DigitalData.UserManager.Application/Services/ModuleOfUserService.cs index 1d41b0f..f9156b6 100644 --- a/DigitalData.UserManager.Application/Services/ModuleOfUserService.cs +++ b/DigitalData.UserManager.Application/Services/ModuleOfUserService.cs @@ -4,7 +4,7 @@ using DigitalData.Core.DTO; using DigitalData.UserManager.Application.Contracts; using DigitalData.UserManager.Application.DTOs.ModuleOfUser; using DigitalData.UserManager.Domain.Entities; -using DigitalData.UserManager.Infrastructure.Contracts; +using DigitalData.UserManager.Application.Contracts.Repositories; namespace DigitalData.UserManager.Application.Services { diff --git a/DigitalData.UserManager.Application/Services/ModuleService.cs b/DigitalData.UserManager.Application/Services/ModuleService.cs index 75a8187..763d9d9 100644 --- a/DigitalData.UserManager.Application/Services/ModuleService.cs +++ b/DigitalData.UserManager.Application/Services/ModuleService.cs @@ -3,7 +3,7 @@ using DigitalData.Core.Application; using DigitalData.UserManager.Application.Contracts; using DigitalData.UserManager.Application.DTOs.Module; using DigitalData.UserManager.Domain.Entities; -using DigitalData.UserManager.Infrastructure.Contracts; +using DigitalData.UserManager.Application.Contracts.Repositories; namespace DigitalData.UserManager.Application.Services { diff --git a/DigitalData.UserManager.Application/Services/UserRepService.cs b/DigitalData.UserManager.Application/Services/UserRepService.cs index 050dbd7..22b3b25 100644 --- a/DigitalData.UserManager.Application/Services/UserRepService.cs +++ b/DigitalData.UserManager.Application/Services/UserRepService.cs @@ -3,7 +3,7 @@ using DigitalData.Core.DTO; using DigitalData.UserManager.Application.Contracts; using DigitalData.UserManager.Application.DTOs.UserRep; using DigitalData.UserManager.Domain.Entities; -using DigitalData.UserManager.Infrastructure.Contracts; +using DigitalData.UserManager.Application.Contracts.Repositories; using Microsoft.Extensions.Localization; using Microsoft.Extensions.Logging; diff --git a/DigitalData.UserManager.Application/Services/UserService.cs b/DigitalData.UserManager.Application/Services/UserService.cs index 9f3ad3a..5d5cfe3 100644 --- a/DigitalData.UserManager.Application/Services/UserService.cs +++ b/DigitalData.UserManager.Application/Services/UserService.cs @@ -3,7 +3,7 @@ using DigitalData.Core.DTO; using DigitalData.UserManager.Application.Contracts; using DigitalData.UserManager.Application.DTOs.User; using DigitalData.UserManager.Domain.Entities; -using DigitalData.UserManager.Infrastructure.Contracts; +using DigitalData.UserManager.Application.Contracts.Repositories; using Microsoft.Extensions.Localization; namespace DigitalData.UserManager.Application.Services diff --git a/DigitalData.UserManager.Infrastructure/Contracts/IClientUserRepository.cs b/DigitalData.UserManager.Infrastructure/Contracts/IClientUserRepository.cs deleted file mode 100644 index fa2da5f..0000000 --- a/DigitalData.UserManager.Infrastructure/Contracts/IClientUserRepository.cs +++ /dev/null @@ -1,10 +0,0 @@ -using DigitalData.Core.Abstractions.Infrastructure; -using DigitalData.UserManager.Domain.Entities; - -namespace DigitalData.UserManager.Infrastructure.Contracts -{ - public interface IClientUserRepository : ICRUDRepository - { - Task> ReadAsync(bool readOnly = true, int? userId = null); - } -} \ No newline at end of file diff --git a/DigitalData.UserManager.Infrastructure/Contracts/IGroupOfUserRepository.cs b/DigitalData.UserManager.Infrastructure/Contracts/IGroupOfUserRepository.cs deleted file mode 100644 index 49d07b5..0000000 --- a/DigitalData.UserManager.Infrastructure/Contracts/IGroupOfUserRepository.cs +++ /dev/null @@ -1,28 +0,0 @@ -using DigitalData.Core.Abstractions.Infrastructure; -using DigitalData.UserManager.Domain.Entities; - -namespace DigitalData.UserManager.Infrastructure.Contracts -{ - public interface IGroupOfUserRepository : ICRUDRepository - { - IQueryable ReadByGroupId(int groupId); - - Task> ReadByGroupUserIdAsync(int groupId, int userId); - - Task> ReadAllAsyncWithGroup(); - - Task> ReadAllAsyncWithUser(); - - Task> ReadAllAsyncWithGroupAndUser(); - - Task> ReadByUsernameAsync(string username); - - Task> ReadByUserIdAsync(int userId); - - // merge all GroupOfUserRepository-methods conditionally under this method - Task> ReadAsync( - bool readOnly = true, - bool withGroup = true, bool withUser = true, - int? id = null, int? groupId = null, int? userId = null, string? username = null); - } -} \ No newline at end of file diff --git a/DigitalData.UserManager.Infrastructure/Contracts/IGroupRepository.cs b/DigitalData.UserManager.Infrastructure/Contracts/IGroupRepository.cs deleted file mode 100644 index faac8af..0000000 --- a/DigitalData.UserManager.Infrastructure/Contracts/IGroupRepository.cs +++ /dev/null @@ -1,9 +0,0 @@ -using DigitalData.Core.Abstractions.Infrastructure; -using DigitalData.UserManager.Domain.Entities; - -namespace DigitalData.UserManager.Infrastructure.Contracts -{ - public interface IGroupRepository : ICRUDRepository - { - } -} \ No newline at end of file diff --git a/DigitalData.UserManager.Infrastructure/Contracts/IModuleOfUserRepository.cs b/DigitalData.UserManager.Infrastructure/Contracts/IModuleOfUserRepository.cs deleted file mode 100644 index 6f7412a..0000000 --- a/DigitalData.UserManager.Infrastructure/Contracts/IModuleOfUserRepository.cs +++ /dev/null @@ -1,14 +0,0 @@ -using DigitalData.Core.Abstractions.Infrastructure; -using DigitalData.UserManager.Domain.Entities; - -namespace DigitalData.UserManager.Infrastructure.Contracts -{ - public interface IModuleOfUserRepository : ICRUDRepository - { - IQueryable ReadByModuleId(int moduleId); - - Task> ReadByModelUserIdAsync(int moduleId, int userId); - - Task> ReadByUserAsync(string username); - } -} \ No newline at end of file diff --git a/DigitalData.UserManager.Infrastructure/Contracts/IModuleRepository.cs b/DigitalData.UserManager.Infrastructure/Contracts/IModuleRepository.cs deleted file mode 100644 index 73dab34..0000000 --- a/DigitalData.UserManager.Infrastructure/Contracts/IModuleRepository.cs +++ /dev/null @@ -1,9 +0,0 @@ -using DigitalData.Core.Abstractions.Infrastructure; -using DigitalData.UserManager.Domain.Entities; - -namespace DigitalData.UserManager.Infrastructure.Contracts -{ - public interface IModuleRepository : ICRUDRepository - { - } -} \ No newline at end of file diff --git a/DigitalData.UserManager.Infrastructure/Contracts/IUserManagerDbContext.cs b/DigitalData.UserManager.Infrastructure/Contracts/IUserManagerDbContext.cs index ef8ee62..3ac8713 100644 --- a/DigitalData.UserManager.Infrastructure/Contracts/IUserManagerDbContext.cs +++ b/DigitalData.UserManager.Infrastructure/Contracts/IUserManagerDbContext.cs @@ -1,22 +1,21 @@ using DigitalData.UserManager.Domain.Entities; using Microsoft.EntityFrameworkCore; -namespace DigitalData.UserManager.Infrastructure.Contracts +namespace DigitalData.UserManager.Infrastructure.Contracts; + +public interface IUserManagerDbContext { - public interface IUserManagerDbContext - { - public DbSet GroupOfUsers { get; } + public DbSet GroupOfUsers { get; } - public DbSet Groups { get; } + public DbSet Groups { get; } - public DbSet ModuleOfUsers { get; } + public DbSet ModuleOfUsers { get; } - public DbSet Modules { get; } + public DbSet Modules { get; } - public DbSet Users { get; } + public DbSet Users { get; } - public DbSet UserReps { get; } + public DbSet UserReps { get; } - public DbSet ClientUsers { get; } - } + public DbSet ClientUsers { get; } } \ No newline at end of file diff --git a/DigitalData.UserManager.Infrastructure/Contracts/IUserRepRepository.cs b/DigitalData.UserManager.Infrastructure/Contracts/IUserRepRepository.cs deleted file mode 100644 index 7520da6..0000000 --- a/DigitalData.UserManager.Infrastructure/Contracts/IUserRepRepository.cs +++ /dev/null @@ -1,12 +0,0 @@ -using DigitalData.Core.Abstractions.Infrastructure; -using DigitalData.UserManager.Domain.Entities; - -namespace DigitalData.UserManager.Infrastructure.Contracts -{ - public interface IUserRepRepository : ICRUDRepository - { - Task> ReadAllAsync( - bool withUser = false, bool withRepGroup = false, bool withGroup = false, bool withRepUser = false, - int? userId = null, int? repUserId = null, int? groupId = null, int? repGroupId = null, bool readOnly = true); - } -} \ No newline at end of file diff --git a/DigitalData.UserManager.Infrastructure/Contracts/IUserRepository.cs b/DigitalData.UserManager.Infrastructure/Contracts/IUserRepository.cs deleted file mode 100644 index abb2b0a..0000000 --- a/DigitalData.UserManager.Infrastructure/Contracts/IUserRepository.cs +++ /dev/null @@ -1,18 +0,0 @@ -using DigitalData.Core.Abstractions.Infrastructure; -using DigitalData.UserManager.Domain.Entities; - -namespace DigitalData.UserManager.Infrastructure.Contracts -{ - public interface IUserRepository : ICRUDRepository - { - Task> ReadByModuleIdAsync(int moduleId); - - Task> ReadUnassignedByModuleIdAsync(int moduleId); - - Task> ReadByGroupIdAsync(int groupId); - - Task> ReadUnassignedByGroupIdAsync(int groupId); - - Task ReadByUsernameAsync(string username); - } -} \ No newline at end of file diff --git a/DigitalData.UserManager.Infrastructure/DependencyInjection.cs b/DigitalData.UserManager.Infrastructure/DependencyInjection.cs new file mode 100644 index 0000000..4a66700 --- /dev/null +++ b/DigitalData.UserManager.Infrastructure/DependencyInjection.cs @@ -0,0 +1,51 @@ +using DigitalData.UserManager.Application; +using DigitalData.UserManager.Application.Contracts.Repositories; +using DigitalData.UserManager.Infrastructure.Contracts; +using DigitalData.UserManager.Infrastructure.Repositories; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; + +namespace DigitalData.UserManager.Infrastructure; + +public static class DependencyInjection +{ + /// + /// Adds the UserManager repositories to the specified . + /// This method registers the necessary repositories for the UserManager. + /// + /// The type of the DbContext to use for the repositories. + /// The IServiceCollection to which the services will be added. + /// The updated IServiceCollection. + public static IServiceCollection AddInfrastructureServices(this IServiceCollection services) + where TDbContext : DbContext, IUserManagerDbContext + { + return services + .AddScoped>() + .AddScoped>() + .AddScoped>() + .AddScoped>() + .AddScoped>() + .AddScoped>() + .AddScoped>(); + } + + /// + /// Adds the UserManager services and repositories to the specified . + /// This method allows configuring the DbContext options using the provided . + /// + /// The to which the services will be added. + /// An to configure the . + /// The updated . + public static IServiceCollection AddInfrastructureServices(this IServiceCollection services, Action optionsAction) => services + .AddDbContext(optionsAction) + .AddInfrastructureServices(); + + /// + /// Adds the UserManager services and repositories to the specified . + /// This method registers the necessary mappings, repositories, services and for the UserManager. + /// + /// The IServiceCollection to which the services will be added. + /// The updated IServiceCollection. + public static IServiceCollection AddInfrastructureServices(this IServiceCollection services, string connectionString) => services + .AddInfrastructureServices(options => options.UseSqlServer(connectionString).EnableSensitiveDataLogging()); +} diff --git a/DigitalData.UserManager.Infrastructure/DigitalData.UserManager.Infrastructure.csproj b/DigitalData.UserManager.Infrastructure/DigitalData.UserManager.Infrastructure.csproj index 9272f6d..c539d87 100644 --- a/DigitalData.UserManager.Infrastructure/DigitalData.UserManager.Infrastructure.csproj +++ b/DigitalData.UserManager.Infrastructure/DigitalData.UserManager.Infrastructure.csproj @@ -36,6 +36,7 @@ + diff --git a/DigitalData.UserManager.Infrastructure/Repositories/ClientUserRepository.cs b/DigitalData.UserManager.Infrastructure/Repositories/ClientUserRepository.cs index fbc4523..e2ab9c8 100644 --- a/DigitalData.UserManager.Infrastructure/Repositories/ClientUserRepository.cs +++ b/DigitalData.UserManager.Infrastructure/Repositories/ClientUserRepository.cs @@ -1,7 +1,8 @@ using DigitalData.Core.Infrastructure; using DigitalData.UserManager.Domain.Entities; -using DigitalData.UserManager.Infrastructure.Contracts; +using DigitalData.UserManager.Application.Contracts.Repositories; using Microsoft.EntityFrameworkCore; +using DigitalData.UserManager.Infrastructure.Contracts; namespace DigitalData.UserManager.Infrastructure.Repositories { diff --git a/DigitalData.UserManager.Infrastructure/Repositories/GroupOfUserRepository.cs b/DigitalData.UserManager.Infrastructure/Repositories/GroupOfUserRepository.cs index a49e728..c29bb97 100644 --- a/DigitalData.UserManager.Infrastructure/Repositories/GroupOfUserRepository.cs +++ b/DigitalData.UserManager.Infrastructure/Repositories/GroupOfUserRepository.cs @@ -2,6 +2,7 @@ using DigitalData.UserManager.Infrastructure.Contracts; using DigitalData.Core.Infrastructure; using Microsoft.EntityFrameworkCore; +using DigitalData.UserManager.Application.Contracts.Repositories; namespace DigitalData.UserManager.Infrastructure.Repositories { diff --git a/DigitalData.UserManager.Infrastructure/Repositories/GroupRepository.cs b/DigitalData.UserManager.Infrastructure/Repositories/GroupRepository.cs index 4952d66..349862c 100644 --- a/DigitalData.UserManager.Infrastructure/Repositories/GroupRepository.cs +++ b/DigitalData.UserManager.Infrastructure/Repositories/GroupRepository.cs @@ -1,4 +1,5 @@ using DigitalData.Core.Infrastructure; +using DigitalData.UserManager.Application.Contracts.Repositories; using DigitalData.UserManager.Domain.Entities; using DigitalData.UserManager.Infrastructure.Contracts; using Microsoft.EntityFrameworkCore; diff --git a/DigitalData.UserManager.Infrastructure/Repositories/ModuleOfUserRepository.cs b/DigitalData.UserManager.Infrastructure/Repositories/ModuleOfUserRepository.cs index 30175be..dab5324 100644 --- a/DigitalData.UserManager.Infrastructure/Repositories/ModuleOfUserRepository.cs +++ b/DigitalData.UserManager.Infrastructure/Repositories/ModuleOfUserRepository.cs @@ -1,32 +1,32 @@ using DigitalData.Core.Infrastructure; +using DigitalData.UserManager.Application.Contracts.Repositories; using DigitalData.UserManager.Domain.Entities; using DigitalData.UserManager.Infrastructure.Contracts; using Microsoft.EntityFrameworkCore; -namespace DigitalData.UserManager.Infrastructure.Repositories +namespace DigitalData.UserManager.Infrastructure.Repositories; + +public class ModuleOfUserRepository : CRUDRepository, IModuleOfUserRepository + where TDbContext : DbContext, IUserManagerDbContext { - public class ModuleOfUserRepository : CRUDRepository, IModuleOfUserRepository - where TDbContext : DbContext, IUserManagerDbContext + public ModuleOfUserRepository(TDbContext dbContext) : base(dbContext, dbContext.ModuleOfUsers) { - public ModuleOfUserRepository(TDbContext dbContext) : base(dbContext, dbContext.ModuleOfUsers) - { - } - - private IQueryable ReadByUser(string username) - { - return _dbSet.Where(mou => mou.User!.Username == username).Include(mou => mou.Module); - } + } - public IQueryable ReadByModuleId(int moduleId) - { - return _dbSet.Where(mou => mou.ModuleId == moduleId); - } + private IQueryable ReadByUser(string username) + { + return _dbSet.Where(mou => mou.User!.Username == username).Include(mou => mou.Module); + } - public async Task> ReadByModelUserIdAsync(int moduleId, int userId) - { - return await _dbSet.Where(mou => mou.ModuleId == moduleId && mou.UserId == userId).ToListAsync(); - } + public IQueryable ReadByModuleId(int moduleId) + { + return _dbSet.Where(mou => mou.ModuleId == moduleId); + } - public async Task> ReadByUserAsync(string username) => await ReadByUser(username).ToListAsync(); + public async Task> ReadByModelUserIdAsync(int moduleId, int userId) + { + return await _dbSet.Where(mou => mou.ModuleId == moduleId && mou.UserId == userId).ToListAsync(); } + + public async Task> ReadByUserAsync(string username) => await ReadByUser(username).ToListAsync(); } \ No newline at end of file diff --git a/DigitalData.UserManager.Infrastructure/Repositories/ModuleRepository.cs b/DigitalData.UserManager.Infrastructure/Repositories/ModuleRepository.cs index 6fb88f1..798bac0 100644 --- a/DigitalData.UserManager.Infrastructure/Repositories/ModuleRepository.cs +++ b/DigitalData.UserManager.Infrastructure/Repositories/ModuleRepository.cs @@ -1,15 +1,15 @@ using DigitalData.Core.Infrastructure; +using DigitalData.UserManager.Application.Contracts.Repositories; using DigitalData.UserManager.Domain.Entities; using DigitalData.UserManager.Infrastructure.Contracts; using Microsoft.EntityFrameworkCore; -namespace DigitalData.UserManager.Infrastructure.Repositories +namespace DigitalData.UserManager.Infrastructure.Repositories; + +public class ModuleRepository : CRUDRepository, IModuleRepository + where TDbContext : DbContext, IUserManagerDbContext { - public class ModuleRepository : CRUDRepository, IModuleRepository - where TDbContext : DbContext, IUserManagerDbContext + public ModuleRepository(TDbContext dbContext) : base(dbContext, dbContext.Modules) { - public ModuleRepository(TDbContext dbContext) : base(dbContext, dbContext.Modules) - { - } } } \ No newline at end of file diff --git a/DigitalData.UserManager.Infrastructure/Repositories/UserRepRepository.cs b/DigitalData.UserManager.Infrastructure/Repositories/UserRepRepository.cs index e04a3e8..b950fdb 100644 --- a/DigitalData.UserManager.Infrastructure/Repositories/UserRepRepository.cs +++ b/DigitalData.UserManager.Infrastructure/Repositories/UserRepRepository.cs @@ -1,48 +1,48 @@ using DigitalData.Core.Infrastructure; +using DigitalData.UserManager.Application.Contracts.Repositories; using DigitalData.UserManager.Domain.Entities; using DigitalData.UserManager.Infrastructure.Contracts; using Microsoft.EntityFrameworkCore; -namespace DigitalData.UserManager.Infrastructure.Repositories +namespace DigitalData.UserManager.Infrastructure.Repositories; + +public class UserRepRepository : CRUDRepository, IUserRepRepository + where TDbContext : DbContext, IUserManagerDbContext { - public class UserRepRepository : CRUDRepository, IUserRepRepository - where TDbContext : DbContext, IUserManagerDbContext + public UserRepRepository(TDbContext dbContext) : base(dbContext, dbContext.UserReps) { - public UserRepRepository(TDbContext dbContext) : base(dbContext, dbContext.UserReps) - { - } + } - public async Task> ReadAllAsync( - bool withUser = false, bool withRepGroup = false, bool withGroup = false, bool withRepUser = false, - int? userId = null, int? repUserId = null, int? groupId = null, int? repGroupId = null, bool readOnly = true) - { - var query = readOnly ? _dbSet.AsNoTracking() : _dbSet.AsQueryable(); + public async Task> ReadAllAsync( + bool withUser = false, bool withRepGroup = false, bool withGroup = false, bool withRepUser = false, + int? userId = null, int? repUserId = null, int? groupId = null, int? repGroupId = null, bool readOnly = true) + { + var query = readOnly ? _dbSet.AsNoTracking() : _dbSet.AsQueryable(); - if (withUser) - query = query.Include(ur => ur.User); + if (withUser) + query = query.Include(ur => ur.User); - if (withRepGroup) - query = query.Include(ur => ur.RepGroup); + if (withRepGroup) + query = query.Include(ur => ur.RepGroup); - if (withGroup) - query = query.Include(ur => ur.Group); + if (withGroup) + query = query.Include(ur => ur.Group); - if (withRepUser) - query = query.Include(ur => ur.RepUser); + if (withRepUser) + query = query.Include(ur => ur.RepUser); - if (userId is not null) - query = query.Where(ur => ur.UserId == userId); + if (userId is not null) + query = query.Where(ur => ur.UserId == userId); - if (repUserId is not null) - query = query.Where(ur => ur.RepUserId == repUserId); + if (repUserId is not null) + query = query.Where(ur => ur.RepUserId == repUserId); - if (groupId is not null) - query = query.Where(ur => ur.GroupId == groupId); + if (groupId is not null) + query = query.Where(ur => ur.GroupId == groupId); - if (repGroupId is not null) - query = query.Where(ur => ur.RepGroupId == repGroupId); + if (repGroupId is not null) + query = query.Where(ur => ur.RepGroupId == repGroupId); - return await query.ToListAsync(); - } + return await query.ToListAsync(); } } \ No newline at end of file diff --git a/DigitalData.UserManager.Infrastructure/Repositories/UserRepository.cs b/DigitalData.UserManager.Infrastructure/Repositories/UserRepository.cs index 09a7302..14baa05 100644 --- a/DigitalData.UserManager.Infrastructure/Repositories/UserRepository.cs +++ b/DigitalData.UserManager.Infrastructure/Repositories/UserRepository.cs @@ -1,4 +1,5 @@ using DigitalData.Core.Infrastructure; +using DigitalData.UserManager.Application.Contracts.Repositories; using DigitalData.UserManager.Domain.Entities; using DigitalData.UserManager.Infrastructure.Contracts; using Microsoft.EntityFrameworkCore;