[REFACTOR] Refactored UserRepository to use new monads

This commit is contained in:
max
2025-04-11 21:07:08 +02:00
parent 21fe08c04f
commit ba0de46068
7 changed files with 189 additions and 214 deletions

View File

@@ -44,9 +44,9 @@ public partial class AuthorityManager
public async Task<Result> AddRolesToUserAsync(List<AuthorityRole> roles, AuthorityUser user, CancellationToken cancellationToken = default)
{
var usrValidation = await IsValidUserAsync(user, cancellationToken);
if (!usrValidation.Success)
if (!usrValidation.IsSuccess)
{
return ResultError.Fail("Validation for user failed!");
return usrValidation;
}
var linkedRoles = await RoleRepository.GetRolesFromLinkAsync(user.Id, roles, cancellationToken);
@@ -65,9 +65,9 @@ public partial class AuthorityManager
public async Task<Result> RemoveRolesFromUserAsync(List<AuthorityRole> roles, AuthorityUser user, CancellationToken cancellationToken = default)
{
var usrValidation = await IsValidUserAsync(user, cancellationToken);
if (!usrValidation.Success)
if (!usrValidation.IsSuccess)
{
return ResultError.Fail("Validation for user failed!");
return usrValidation;
}
var linkedRoles = await RoleRepository.GetRolesFromLinkAsync(user.Id, roles, cancellationToken);
@@ -95,20 +95,15 @@ public partial class AuthorityManager
var linkResult = await RoleRepository.AddRolesLinkAsync(rolesToAdd, group.Id, cancellationToken);
return linkResult ? Result.Success() : ResultError.Fail("Failed to add roles.");
}
/// <summary>
/// Get all roles (including group roles) that the user has.
/// </summary>
/// <param name="user">The user to get the roles from</param>
/// <param name="cancellationToken"></param>
public async Task<Result<List<AuthorityRole>>> GetUserRolesAsync(AuthorityUser user, CancellationToken cancellationToken = default)
public async Task<Result<List<AuthorityRole>>> GetAllUserRolesAsync(AuthorityUser user, CancellationToken cancellationToken = default)
{
try
{
var usrValidation = await IsValidUserAsync(user, cancellationToken);
if (!usrValidation.Success)
if (!usrValidation.IsSuccess)
{
return ResultError.Fail("Invalid user");
return usrValidation.Error ?? ResultError.Fail("User validation failed.");
}
var searchIds = new List<Guid> { user.Id };

View File

@@ -1,7 +1,8 @@
using DotBased.AspNet.Authority.Models;
using DotBased.AspNet.Authority.Models.Authority;
using DotBased.AspNet.Authority.Models.Validation;
using ValidationResult = DotBased.AspNet.Authority.Monads.ValidationResult;
using DotBased.AspNet.Authority.Monads;
using DotBased.Monads;
namespace DotBased.AspNet.Authority.Managers;
@@ -35,28 +36,33 @@ public partial class AuthorityManager
return errors.Count > 0 ? ValidationResult.Fail(errors) : ValidationResult.Success();
}
public async Task<ListResultOld<AuthorityUserItem>> SearchUsersAsync(string query, int maxResults = 20, int offset = 0, CancellationToken cancellationToken = default)
public async Task<Result<QueryItems<AuthorityUserItem>>> SearchUsersAsync(string query, int maxResults = 20, int offset = 0, CancellationToken cancellationToken = default)
{
var result = await UserRepository.GetAuthorityUsersAsync(maxResults, offset, query, cancellationToken);
return result;
}
public async Task<AuthorityResultOldOld<AuthorityUser>> UpdatePasswordAsync(AuthorityUser user, string password, CancellationToken cancellationToken = default)
public async Task<AuthorityResult<AuthorityUser>> UpdatePasswordAsync(AuthorityUser user, string password, CancellationToken cancellationToken = default)
{
var passwordValidation = await ValidatePasswordAsync(user, password);
if (!passwordValidation.IsSuccess)
{
return AuthorityResultOldOld<AuthorityUser>.Failed(passwordValidation.ValidationErrors, ResultFailReason.Validation);
return passwordValidation.ValidationErrors.ToList();
}
user.PasswordHash = await PasswordHasher.HashPasswordAsync(password);
user.SecurityVersion = GenerateVersion();
var updateResult = await UserRepository.UpdateUserAsync(user, cancellationToken);
return AuthorityResultOldOld<AuthorityUser>.FromResult(updateResult);
if (updateResult == null)
{
return ResultError.Fail("Failed to update user password.");
}
return updateResult;
}
public async Task<AuthorityResultOldOld<AuthorityUser>> CreateUserAsync(AuthorityUser userModel, string password, CancellationToken cancellationToken = default)
public async Task<AuthorityResult<AuthorityUser>> CreateUserAsync(AuthorityUser userModel, string password, CancellationToken cancellationToken = default)
{
var userValidation = await ValidateUserAsync(userModel);
var passwordValidation = await ValidatePasswordAsync(userModel, password);
@@ -65,7 +71,7 @@ public partial class AuthorityManager
List<ValidationError> errors = [];
errors.AddRange(userValidation.ValidationErrors);
errors.AddRange(passwordValidation.ValidationErrors);
return AuthorityResultOldOld<AuthorityUser>.Failed(errors, ResultFailReason.Validation);
return errors;
}
userModel.Version = GenerateVersion();
@@ -74,25 +80,34 @@ public partial class AuthorityManager
userModel.PasswordHash = hashedPassword;
var userCreationResult = await UserRepository.CreateUserAsync(userModel, cancellationToken);
return AuthorityResultOldOld<AuthorityUser>.FromResult(userCreationResult);
if (userCreationResult == null)
{
return ResultError.Fail("Failed to create user.");
}
return userCreationResult;
}
public async Task<ResultOld<AuthorityUser>> UpdateUserAsync(AuthorityUser model, CancellationToken cancellationToken = default)
public async Task<Result<AuthorityUser>> UpdateUserAsync(AuthorityUser model, CancellationToken cancellationToken = default)
{
var updateResult = await UserRepository.UpdateUserAsync(model, cancellationToken);
if (updateResult == null)
{
return ResultError.Fail("Failed to update user.");
}
return updateResult;
}
public async Task<ResultOld> DeleteUserAsync(AuthorityUser model, CancellationToken cancellationToken = default)
public async Task<Result> DeleteUserAsync(AuthorityUser model, CancellationToken cancellationToken = default)
{
var deleteResult = await UserRepository.DeleteUserAsync(model, cancellationToken);
return deleteResult;
var deleteResult = await UserRepository.DeleteUsersAsync([model], cancellationToken);
return deleteResult ? Result.Success() : ResultError.Fail("Failed to delete user.");
}
public async Task<ResultOld> IsValidUserAsync(AuthorityUser user, CancellationToken cancellationToken = default)
public async Task<Result> IsValidUserAsync(AuthorityUser user, CancellationToken cancellationToken = default)
{
var usrResult = await UserRepository.GetVersionAsync(user, cancellationToken);
return usrResult;
return usrResult == 0 ? ResultError.Fail("Invalid user version detected.") : Result.Success();
}
}