Refactor UserGroupService methods to use attempt (#16302)

This commit is contained in:
Nikolaj Geisle
2024-05-16 15:04:54 +02:00
committed by GitHub
parent a8f6e8f8dd
commit d20892e329
5 changed files with 26 additions and 22 deletions

View File

@@ -5,6 +5,7 @@ using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Api.Management.Controllers.UserGroup;
using Umbraco.Cms.Api.Management.Routing;
using Umbraco.Cms.Api.Management.ViewModels.User;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Security.Authorization;
using Umbraco.Cms.Core.Services;
using Umbraco.Cms.Core.Services.OperationStatus;
@@ -48,10 +49,12 @@ public class UpdateUserGroupsUserController : UserGroupControllerBase
return Forbidden();
}
UserGroupOperationStatus status = await _userGroupService.UpdateUserGroupsOnUsersAsync(
Attempt<UserGroupOperationStatus> result = await _userGroupService.UpdateUserGroupsOnUsersAsync(
requestModel.UserGroupIds.Select(x => x.Id).ToHashSet(),
requestModel.UserIds.Select(x => x.Id).ToHashSet());
return UserGroupOperationStatusResult(status);
return result.Success
? Ok()
: UserGroupOperationStatusResult(result.Result);
}
}

View File

@@ -51,11 +51,11 @@ public class AddUsersToUserGroupController : UserGroupControllerBase
return Forbidden();
}
UserGroupOperationStatus result = await _userGroupService.AddUsersToUserGroupAsync(
Attempt<UserGroupOperationStatus> result = await _userGroupService.AddUsersToUserGroupAsync(
new UsersToUserGroupManipulationModel(id, userIds.Select(x => x.Id).ToArray()), CurrentUserKey(_backOfficeSecurityAccessor));
return result == UserGroupOperationStatus.Success
return result.Success
? Ok()
: UserGroupOperationStatusResult(result);
: UserGroupOperationStatusResult(result.Result);
}
}

View File

@@ -3,6 +3,7 @@ using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Umbraco.Cms.Api.Management.ViewModels;
using Umbraco.Cms.Core;
using Umbraco.Cms.Core.Models;
using Umbraco.Cms.Core.Security;
using Umbraco.Cms.Core.Security.Authorization;
@@ -46,11 +47,11 @@ public class RemoveUsersFromUserGroupController : UserGroupControllerBase
return Forbidden();
}
UserGroupOperationStatus result = await _userGroupService.RemoveUsersFromUserGroupAsync(
Attempt<UserGroupOperationStatus> result = await _userGroupService.RemoveUsersFromUserGroupAsync(
new UsersToUserGroupManipulationModel(id, userIds.Select(x => x.Id).ToArray()), CurrentUserKey(_backOfficeSecurityAccessor));
return result == UserGroupOperationStatus.Success
return result.Success
? Ok()
: UserGroupOperationStatusResult(result);
: UserGroupOperationStatusResult(result.Result);
}
}

View File

@@ -107,8 +107,8 @@ public interface IUserGroupService
/// <param name="userGroupKeys">The user groups the users should be part of.</param>
/// <param name="userKeys">The user whose groups we want to alter.</param>
/// <returns>An attempt indicating if the operation was a success as well as a more detailed <see cref="UserGroupOperationStatus"/>.</returns>
Task<UserGroupOperationStatus> UpdateUserGroupsOnUsersAsync(ISet<Guid> userGroupKeys, ISet<Guid> userKeys);
Task<Attempt<UserGroupOperationStatus>> UpdateUserGroupsOnUsersAsync(ISet<Guid> userGroupKeys, ISet<Guid> userKeys);
Task<UserGroupOperationStatus> AddUsersToUserGroupAsync(UsersToUserGroupManipulationModel addUsersModel, Guid performingUserKey);
Task<UserGroupOperationStatus> RemoveUsersFromUserGroupAsync(UsersToUserGroupManipulationModel removeUsersModel, Guid performingUserKey);
Task<Attempt<UserGroupOperationStatus>> AddUsersToUserGroupAsync(UsersToUserGroupManipulationModel addUsersModel, Guid performingUserKey);
Task<Attempt<UserGroupOperationStatus>> RemoveUsersFromUserGroupAsync(UsersToUserGroupManipulationModel removeUsersModel, Guid performingUserKey);
}

View File

@@ -210,7 +210,7 @@ internal sealed class UserGroupService : RepositoryService, IUserGroupService
return Attempt.Succeed(UserGroupOperationStatus.Success);
}
public async Task<UserGroupOperationStatus> UpdateUserGroupsOnUsersAsync(
public async Task<Attempt<UserGroupOperationStatus>> UpdateUserGroupsOnUsersAsync(
ISet<Guid> userGroupKeys,
ISet<Guid> userKeys)
{
@@ -233,7 +233,7 @@ internal sealed class UserGroupService : RepositoryService, IUserGroupService
if (adminGroup is not null && adminGroup.UserCount <= usersToDeAdmin.Length)
{
scope.Complete();
return UserGroupOperationStatus.AdminGroupCannotBeEmpty;
return Attempt.Fail(UserGroupOperationStatus.AdminGroupCannotBeEmpty);
}
}
}
@@ -251,7 +251,7 @@ internal sealed class UserGroupService : RepositoryService, IUserGroupService
scope.Complete();
return UserGroupOperationStatus.Success;
return Attempt.Succeed(UserGroupOperationStatus.Success);
}
private Attempt<UserGroupOperationStatus> ValidateUserGroupDeletion(IUserGroup? userGroup)
@@ -393,7 +393,7 @@ internal sealed class UserGroupService : RepositoryService, IUserGroupService
return Attempt.SucceedWithStatus(UserGroupOperationStatus.Success, userGroup);
}
public async Task<UserGroupOperationStatus> AddUsersToUserGroupAsync(UsersToUserGroupManipulationModel addUsersModel, Guid performingUserKey)
public async Task<Attempt<UserGroupOperationStatus>> AddUsersToUserGroupAsync(UsersToUserGroupManipulationModel addUsersModel, Guid performingUserKey)
{
using ICoreScope scope = ScopeProvider.CreateCoreScope();
@@ -401,7 +401,7 @@ internal sealed class UserGroupService : RepositoryService, IUserGroupService
if (resolveAttempt.Success is false)
{
return resolveAttempt.Status;
return Attempt.Fail(resolveAttempt.Status);
}
ResolvedUserToUserGroupManipulationModel? resolvedModel = resolveAttempt.Result;
@@ -423,10 +423,10 @@ internal sealed class UserGroupService : RepositoryService, IUserGroupService
scope.Complete();
return UserGroupOperationStatus.Success;
return Attempt.Succeed(UserGroupOperationStatus.Success);
}
public async Task<UserGroupOperationStatus> RemoveUsersFromUserGroupAsync(UsersToUserGroupManipulationModel removeUsersModel, Guid performingUserKey)
public async Task<Attempt<UserGroupOperationStatus>> RemoveUsersFromUserGroupAsync(UsersToUserGroupManipulationModel removeUsersModel, Guid performingUserKey)
{
using ICoreScope scope = ScopeProvider.CreateCoreScope();
@@ -434,7 +434,7 @@ internal sealed class UserGroupService : RepositoryService, IUserGroupService
if (resolveAttempt.Success is false)
{
return resolveAttempt.Status;
return Attempt.Fail(resolveAttempt.Status);
}
ResolvedUserToUserGroupManipulationModel? resolvedModel = resolveAttempt.Result;
@@ -450,7 +450,7 @@ internal sealed class UserGroupService : RepositoryService, IUserGroupService
// We can't remove a user from a group they're not part of.
if (user.Groups.Select(x => x.Key).Contains(resolvedModel.UserGroup.Key) is false)
{
return UserGroupOperationStatus.UserNotInGroup;
return Attempt.Fail(UserGroupOperationStatus.UserNotInGroup);
}
user.RemoveGroup(resolvedModel.UserGroup.Alias);
@@ -461,14 +461,14 @@ internal sealed class UserGroupService : RepositoryService, IUserGroupService
if (resolvedModel.UserGroup.Key == Constants.Security.AdminGroupKey
&& resolvedModel.UserGroup.UserCount <= resolvedModel.Users.Length)
{
return UserGroupOperationStatus.AdminGroupCannotBeEmpty;
return Attempt.Fail(UserGroupOperationStatus.AdminGroupCannotBeEmpty);
}
_userService.Save(resolvedModel.Users);
scope.Complete();
return UserGroupOperationStatus.Success;
return Attempt.Succeed(UserGroupOperationStatus.Success);
}
/// <summary>