From 6c2c846a21a28a11c89d9770e1fde64618f5bd3c Mon Sep 17 00:00:00 2001
From: lumijiez <59575049+lumijiez@users.noreply.github.com>
Date: Fri, 6 Jun 2025 20:05:51 +0300
Subject: [PATCH] Add User Repository, and restructure controllers
---
.../Imprink.Application.csproj | 1 +
.../Repositories/IRoleRepository.cs | 11 ++++++
.../Repositories/IUserRepository.cs | 36 +++++++++++++++++++
.../Repositories/IUserRoleRepository.cs | 15 ++++++++
.../{ => Products}/CategoriesController.cs | 0
.../ProductVariantsController.cs | 0
.../{ => Products}/ProductsController.cs | 0
src/Imprink.WebApi/Imprink.WebApi.csproj | 5 +++
8 files changed, 68 insertions(+)
create mode 100644 src/Imprink.Domain/Repositories/IRoleRepository.cs
create mode 100644 src/Imprink.Domain/Repositories/IUserRepository.cs
create mode 100644 src/Imprink.Domain/Repositories/IUserRoleRepository.cs
rename src/Imprink.WebApi/Controllers/{ => Products}/CategoriesController.cs (100%)
rename src/Imprink.WebApi/Controllers/{ => Products}/ProductVariantsController.cs (100%)
rename src/Imprink.WebApi/Controllers/{ => Products}/ProductsController.cs (100%)
diff --git a/src/Imprink.Application/Imprink.Application.csproj b/src/Imprink.Application/Imprink.Application.csproj
index 892e1ef..d0d26c3 100644
--- a/src/Imprink.Application/Imprink.Application.csproj
+++ b/src/Imprink.Application/Imprink.Application.csproj
@@ -21,6 +21,7 @@
+
diff --git a/src/Imprink.Domain/Repositories/IRoleRepository.cs b/src/Imprink.Domain/Repositories/IRoleRepository.cs
new file mode 100644
index 0000000..f92043c
--- /dev/null
+++ b/src/Imprink.Domain/Repositories/IRoleRepository.cs
@@ -0,0 +1,11 @@
+using Imprink.Domain.Entities.Users;
+
+namespace Imprink.Domain.Repositories;
+
+public interface IRoleRepository
+{
+ Task> GetAllRolesAsync(CancellationToken cancellationToken = default);
+ Task GetRoleByIdAsync(Guid roleId, CancellationToken cancellationToken = default);
+ Task GetRoleByNameAsync(string roleName, CancellationToken cancellationToken = default);
+ Task RoleExistsAsync(Guid roleId, CancellationToken cancellationToken = default);
+}
\ No newline at end of file
diff --git a/src/Imprink.Domain/Repositories/IUserRepository.cs b/src/Imprink.Domain/Repositories/IUserRepository.cs
new file mode 100644
index 0000000..145583d
--- /dev/null
+++ b/src/Imprink.Domain/Repositories/IUserRepository.cs
@@ -0,0 +1,36 @@
+using Imprink.Domain.Entities.Users;
+
+namespace Imprink.Domain.Repositories;
+
+public interface IUserRepository
+{
+ Task GetUserByIdAsync(string userId, CancellationToken cancellationToken = default);
+ Task GetUserByEmailAsync(string email, CancellationToken cancellationToken = default);
+ Task> GetAllUsersAsync(CancellationToken cancellationToken = default);
+ Task> GetActiveUsersAsync(CancellationToken cancellationToken = default);
+
+ Task CreateUserAsync(User user, CancellationToken cancellationToken = default);
+ Task UpdateUserAsync(User user, CancellationToken cancellationToken = default);
+ Task DeleteUserAsync(string userId, CancellationToken cancellationToken = default);
+
+ Task UserExistsAsync(string userId, CancellationToken cancellationToken = default);
+ Task EmailExistsAsync(string email, CancellationToken cancellationToken = default);
+
+ Task ActivateUserAsync(string userId, CancellationToken cancellationToken = default);
+ Task DeactivateUserAsync(string userId, CancellationToken cancellationToken = default);
+ Task UpdateLastLoginAsync(string userId, DateTime loginTime, CancellationToken cancellationToken = default);
+
+ Task> SearchUsersAsync(string searchTerm, CancellationToken cancellationToken = default);
+ Task> GetUsersByRoleAsync(Guid roleId, CancellationToken cancellationToken = default);
+
+ Task<(IEnumerable Users, int TotalCount)> GetUsersPagedAsync(
+ int pageNumber,
+ int pageSize,
+ string? searchTerm = null,
+ bool? isActive = null,
+ CancellationToken cancellationToken = default);
+
+ Task GetUserWithAddressesAsync(string userId, CancellationToken cancellationToken = default);
+ Task GetUserWithRolesAsync(string userId, CancellationToken cancellationToken = default);
+ Task GetUserWithAllRelatedDataAsync(string userId, CancellationToken cancellationToken = default);
+}
\ No newline at end of file
diff --git a/src/Imprink.Domain/Repositories/IUserRoleRepository.cs b/src/Imprink.Domain/Repositories/IUserRoleRepository.cs
new file mode 100644
index 0000000..b60441a
--- /dev/null
+++ b/src/Imprink.Domain/Repositories/IUserRoleRepository.cs
@@ -0,0 +1,15 @@
+using Imprink.Domain.Entities.Users;
+
+namespace Imprink.Domain.Repositories;
+
+public interface IUserRoleRepository
+{
+ Task> GetUserRolesAsync(string userId, CancellationToken cancellationToken = default);
+ Task> GetUsersInRoleAsync(Guid roleId, CancellationToken cancellationToken = default);
+ Task IsUserInRoleAsync(string userId, Guid roleId, CancellationToken cancellationToken = default);
+
+ Task GetUserRoleAsync(string userId, Guid roleId, CancellationToken cancellationToken = default);
+ Task AddUserRoleAsync(UserRole userRole, CancellationToken cancellationToken = default);
+ Task RemoveUserRoleAsync(UserRole userRole, CancellationToken cancellationToken = default);
+ Task> GetUserRolesByUserIdAsync(string userId, CancellationToken cancellationToken = default);
+}
\ No newline at end of file
diff --git a/src/Imprink.WebApi/Controllers/CategoriesController.cs b/src/Imprink.WebApi/Controllers/Products/CategoriesController.cs
similarity index 100%
rename from src/Imprink.WebApi/Controllers/CategoriesController.cs
rename to src/Imprink.WebApi/Controllers/Products/CategoriesController.cs
diff --git a/src/Imprink.WebApi/Controllers/ProductVariantsController.cs b/src/Imprink.WebApi/Controllers/Products/ProductVariantsController.cs
similarity index 100%
rename from src/Imprink.WebApi/Controllers/ProductVariantsController.cs
rename to src/Imprink.WebApi/Controllers/Products/ProductVariantsController.cs
diff --git a/src/Imprink.WebApi/Controllers/ProductsController.cs b/src/Imprink.WebApi/Controllers/Products/ProductsController.cs
similarity index 100%
rename from src/Imprink.WebApi/Controllers/ProductsController.cs
rename to src/Imprink.WebApi/Controllers/Products/ProductsController.cs
diff --git a/src/Imprink.WebApi/Imprink.WebApi.csproj b/src/Imprink.WebApi/Imprink.WebApi.csproj
index 62a158e..74587f2 100644
--- a/src/Imprink.WebApi/Imprink.WebApi.csproj
+++ b/src/Imprink.WebApi/Imprink.WebApi.csproj
@@ -29,4 +29,9 @@
+
+
+
+
+