Api/Brizco.Repository/Handlers/Complexes/CreateComplexUserCommandHan...

52 lines
2.4 KiB
C#
Raw Normal View History

namespace Brizco.Repository.Handlers.Complexes;
2024-08-09 21:42:04 +03:30
public class CreateComplexUserCommandHandler(
IRepositoryWrapper repositoryWrapper,
UserManager<ApplicationUser> userManager,
RoleManager<ApplicationRole> roleManager,
ILogger<CreateComplexUserCommandHandler> logger)
: IRequestHandler<CreateComplexUserCommand, ComplexUserSDto>
{
2024-08-09 21:42:04 +03:30
private readonly ILogger<CreateComplexUserCommandHandler> _logger = logger;
public async Task<ComplexUserSDto> Handle(CreateComplexUserCommand request, CancellationToken cancellationToken)
{
try
{
2023-10-18 17:19:56 +03:30
//await _repositoryWrapper.BeginTransaction(cancellationToken);
2024-08-09 21:42:04 +03:30
var complex = await repositoryWrapper.SetRepository<Complex>().TableNoTracking
.FirstOrDefaultAsync(c => c.Id == request.ComplexId, cancellationToken);
if (complex == null)
throw new AppException("Complex not found", ApiResultStatusCode.NotFound);
2024-08-09 21:42:04 +03:30
var user = await userManager.FindByIdAsync(request.UserId.ToString());
2023-10-13 16:25:34 +03:30
if (user == null)
throw new AppException("User not found", ApiResultStatusCode.NotFound);
2024-08-09 21:42:04 +03:30
var complexUser = await repositoryWrapper.SetRepository<ComplexUser>()
2023-10-13 16:25:34 +03:30
.TableNoTracking
.FirstOrDefaultAsync(f => f.ComplexId == request.ComplexId && f.UserId == request.UserId, cancellationToken);
if (complexUser != null)
throw new AppException("این کاربر در این رستوران وجود دارد");
complexUser = complex.AddComplexUser(request.UserId);
foreach (var roleId in request.RoleIds)
{
2024-08-09 21:42:04 +03:30
var role = await roleManager.FindByIdAsync(roleId.ToString());
var result = await userManager.AddToRoleAsync(user, role.Name);
2023-10-13 16:25:34 +03:30
if (!result.Succeeded)
throw new AppException(string.Join('|', result.Errors));
complexUser.AddRole(role.Id);
}
2024-08-09 21:42:04 +03:30
repositoryWrapper.SetRepository<ComplexUser>().Add(complexUser);
await repositoryWrapper.SaveChangesAsync(cancellationToken);
2023-10-18 17:19:56 +03:30
//await _repositoryWrapper.CommitAsync(cancellationToken);
return complexUser.AdaptToSDto();
}
catch (Exception)
{
2024-08-09 21:42:04 +03:30
await repositoryWrapper.RollBackAsync(cancellationToken);
throw;
}
}
}