IdentityUserReader.cs 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using Application.Abstractions.Identity;
  2. using Application.Abstractions.Identity.Models;
  3. using Microsoft.AspNetCore.Identity;
  4. using Microsoft.EntityFrameworkCore;
  5. namespace Infrastructure.Persistence.Identity
  6. {
  7. public sealed class IdentityUserReader(UserManager<ApplicationUser> userManager, IdentityDbContext db) : IIdentityUserReader
  8. {
  9. public async Task<AspNetUserDto?> GetUserAsync(string id, CancellationToken ct)
  10. {
  11. if (string.IsNullOrWhiteSpace(id))
  12. {
  13. return null;
  14. }
  15. var user = await userManager.FindByIdAsync(id);
  16. if (user is null)
  17. {
  18. return null;
  19. }
  20. var roles = await userManager.GetRolesAsync(user);
  21. return new AspNetUserDto
  22. {
  23. ID = user.Id,
  24. UserName = user.UserName,
  25. NormalizedUserName = user.NormalizedUserName,
  26. Email = user.Email,
  27. NormalizedEmail = user.NormalizedEmail,
  28. EmailConfirmed = user.EmailConfirmed,
  29. PhoneNumber = user.PhoneNumber,
  30. PhoneNumberConfirmed = user.PhoneNumberConfirmed,
  31. TwoFactorEnabled = user.TwoFactorEnabled,
  32. LockoutEnd = user.LockoutEnd,
  33. LockoutEnabled = user.LockoutEnabled,
  34. AccessFailedCount = user.AccessFailedCount,
  35. FullName = user.FullName,
  36. IsDeleted = user.IsDeleted,
  37. Roles = [..roles]
  38. };
  39. }
  40. public async Task<List<AspNetUserDto>> GetAllUserAsync(CancellationToken ct)
  41. {
  42. var rows = await (
  43. from u in db.Users.AsNoTracking()
  44. join ur in db.UserRoles.AsNoTracking() on u.Id equals ur.UserId into userRoles
  45. from ur in userRoles.DefaultIfEmpty()
  46. join r in db.Roles.AsNoTracking() on ur.RoleId equals r.Id into roles
  47. from r in roles.DefaultIfEmpty()
  48. select new
  49. {
  50. User = u,
  51. RoleName = r != null ? r.Name : null
  52. }
  53. ).ToListAsync();
  54. return [..rows.GroupBy(x => x.User.Id).Select(g =>
  55. {
  56. var u = g.First().User;
  57. var roles = g.Select(x => x.RoleName).Where(rn => rn != null).ToList();
  58. return new AspNetUserDto
  59. {
  60. ID = u.Id,
  61. UserName = u.UserName,
  62. NormalizedUserName = u.NormalizedUserName,
  63. Email = u.Email,
  64. NormalizedEmail = u.NormalizedEmail,
  65. EmailConfirmed = u.EmailConfirmed,
  66. PhoneNumber = u.PhoneNumber,
  67. PhoneNumberConfirmed = u.PhoneNumberConfirmed,
  68. TwoFactorEnabled = u.TwoFactorEnabled,
  69. LockoutEnd = u.LockoutEnd,
  70. LockoutEnabled = u.LockoutEnabled,
  71. AccessFailedCount = u.AccessFailedCount,
  72. FullName = u.FullName,
  73. IsDeleted = u.IsDeleted,
  74. Roles = roles
  75. };
  76. })];
  77. }
  78. }
  79. }