Handler.cs 1.1 KB

123456789101112131415161718192021222324252627282930
  1. using Application.Abstractions.Messaging;
  2. using Application.Abstractions.Identity;
  3. using SharedKernel.Results;
  4. namespace Application.Features.Director.User.GetRoles;
  5. public sealed class Handler(IIdentityRoleReader roleReader, IIdentityUserReader userReader) : IQueryHandler<Query, Result<Response>>
  6. {
  7. public async Task<Result<Response>> Handle(Query request, CancellationToken ct)
  8. {
  9. var user = await userReader.GetUserAsync(request.UserID, ct);
  10. if (user == null)
  11. {
  12. return Result.Failure<Response>(Error.NotFound("User.NotFound", "회원 정보를 찾을 수 없습니다."));
  13. }
  14. var roles = await roleReader.GetRolesAsync(ct);
  15. var userRoleSet = new HashSet<string>(user.Roles, StringComparer.OrdinalIgnoreCase);
  16. return Result.Success(new Response
  17. {
  18. User = user,
  19. Roles = [..roles.Select(role => new Response.Checkbox
  20. {
  21. DisplayValue = role.Name,
  22. IsSelected = role.Name != null && userRoleSet.Contains(role.Name)
  23. })]
  24. });
  25. }
  26. }