50 lines
2.1 KiB
C#
50 lines
2.1 KiB
C#
using F9WebAiTest.Application.Common.Exceptions;
|
|
using F9WebAiTest.Application.Interfaces.SnowflakeID;
|
|
using F9WebAiTest.Application.Interfaces.UOW;
|
|
using F9WebAiTest.Domain.Entities.SYS.Departments;
|
|
using F9WebAiTest.Domain.Interfaces.SYS.Departments;
|
|
using F9WebAiTest.Domain.Interfaces.SYS.RBAC.Users;
|
|
using MediatR;
|
|
|
|
namespace F9WebAiTest.Application.CQRS.SYS.RBAC.Users.Commands;
|
|
|
|
/// <summary>命令定义</summary>
|
|
public record User_UpdateCommand(long Id, string UserName, string PhoneNumber, string LoginName, long DepartmentId, int SortOrder) : IRequest<bool>;
|
|
|
|
/// <summary>命令处理器</summary>
|
|
public class User_UpdateCommandHandler(
|
|
IUnitOfWork_F9 unitOfWork,
|
|
ISnowflakeIdGenerator snowflakeIdGenerator,
|
|
IUserWriteRepository userWriteRepository,
|
|
IDepartmentUserRepository departmentUserRepository) : IRequestHandler<User_UpdateCommand, bool>
|
|
{
|
|
public async Task<bool> Handle(User_UpdateCommand command, CancellationToken cancellationToken)
|
|
{
|
|
if (command.Id <= 0) throw new F9OperationException("用户ID不能为空");
|
|
if (string.IsNullOrWhiteSpace(command.UserName)) throw new F9OperationException("用户名不能为空");
|
|
if (command.DepartmentId <= 0) throw new F9OperationException("部门不能为空");
|
|
|
|
return await unitOfWork.ExecuteWithUow(async () =>
|
|
{
|
|
// 获取数据库用户
|
|
var dbUser = await userWriteRepository.GetByIdAsync(command.Id);
|
|
if (dbUser == null) throw new F9NotFoundException("用户", command.Id);
|
|
|
|
// 移除原部门关系
|
|
await departmentUserRepository.RemoveAsync(dbUser.DepartmentId, dbUser.Id);
|
|
|
|
// 领域更新
|
|
dbUser.Update(command.UserName, command.PhoneNumber, command.LoginName, command.DepartmentId, command.SortOrder);
|
|
|
|
// 持久化
|
|
var result = await userWriteRepository.UpdateAsync(dbUser);
|
|
|
|
// 添加新部门关系
|
|
await departmentUserRepository.AssignAsync(new DepartmentUser(
|
|
snowflakeIdGenerator.CreateId(), dbUser.DepartmentId, dbUser.Id));
|
|
|
|
return result;
|
|
});
|
|
}
|
|
}
|