IdentityUserReader.cs 2.9 KB

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