Handler.cs 1.1 KB

123456789101112131415161718192021222324252627282930
  1. using Application.Abstractions.Messaging;
  2. using Application.Abstractions.Identity;
  3. namespace Application.Features.Director.User.GetRoles
  4. {
  5. public sealed class Handler(IIdentityRoleReader roleReader, IIdentityUserReader userReader) : IQueryHandler<Query, Response>
  6. {
  7. public async Task<Response> Handle(Query request, CancellationToken ct)
  8. {
  9. var user = await userReader.GetUserAsync(request.UserID, ct);
  10. if (user == null)
  11. {
  12. throw new Exception("회원 정보를 찾을 수 없습니다.");
  13. }
  14. var roles = await roleReader.GetRolesAsync(ct);
  15. var userRoleSet = new HashSet<string>(user.Roles, StringComparer.OrdinalIgnoreCase);
  16. return 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. }
  27. }