using Application.Abstractions.Identity; using Application.Abstractions.Identity.Models; using Microsoft.AspNetCore.Identity; using Microsoft.EntityFrameworkCore; namespace Infrastructure.Persistence.Identity; public sealed class IdentityRoleReader(RoleManager roleManager) : IIdentityRoleReader { public async Task> GetRolesAsync(CancellationToken ct) { var roles = await roleManager.Roles.AsNoTracking().ToListAsync(ct); var list = new List(roles.Count); foreach (var role in roles) { var claims = await roleManager.GetClaimsAsync(role); list.Add(new RoleDto { ID = role.Id, Name = role.Name, Claims = [..claims.Select(c => c.Value)] }); } return list; } public async Task GetRoleAsync(string roleID, CancellationToken ct) { if (string.IsNullOrWhiteSpace(roleID)) { throw new InvalidOperationException("RoleID´Â ÇʼöÀÔ´Ï´Ù."); } var role = await roleManager.FindByIdAsync(roleID); if (role is null) { throw new InvalidOperationException($"{roleID} ±ÇÇÑÀº Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù."); } var claims = await roleManager.GetClaimsAsync(role); var values = claims.Select(c => c.Value).ToList(); return new RoleDto{ ID = role.Id, Name = role.Name ?? string.Empty, Claims = values }; } }