Files
2026-07-21 14:08:10 +07:00

86 lines
3.3 KiB
C#

using Indotalent.Infrastructure.Database;
using MediatR;
using Microsoft.EntityFrameworkCore;
namespace Indotalent.Features.Setting.SystemUser.Cqrs;
public class GetSystemUserByIdResponse
{
public string? Id { get; set; }
public string? FullName { get; set; }
public string? Email { get; set; }
public string? PhoneNumber { get; set; }
public string? UserName { get; set; }
public bool EmailConfirmed { get; set; }
public bool PhoneNumberConfirmed { get; set; }
public bool TwoFactorEnabled { get; set; }
public bool IsActive { get; set; }
public bool LockoutEnabled { get; set; }
public DateTimeOffset? LockoutEnd { get; set; }
public int AccessFailedCount { get; set; }
public string? SsoIdFirebase { get; set; }
public string? SsoIdKeycloak { get; set; }
public string? SsoIdAzure { get; set; }
public string? SsoIdAws { get; set; }
public string? SsoIdOther1 { get; set; }
public string? SsoIdOther2 { get; set; }
public string? SsoIdOther3 { get; set; }
public DateTime CreatedAt { get; set; }
public DateTime? LastLoginAt { get; set; }
public DateTime? UpdatedAt { get; set; }
public List<string> UserRoles { get; set; } = new();
public string? AvatarFile { get; set; }
}
public record GetSystemUserByIdQuery(string Id) : IRequest<GetSystemUserByIdResponse?>;
public class GetSystemUserByIdHandler : IRequestHandler<GetSystemUserByIdQuery, GetSystemUserByIdResponse?>
{
private readonly AppDbContext _context;
public GetSystemUserByIdHandler(AppDbContext context) => _context = context;
public async Task<GetSystemUserByIdResponse?> Handle(GetSystemUserByIdQuery request, CancellationToken cancellationToken)
{
var user = await _context.Users
.AsNoTracking()
.Where(x => x.Id == request.Id)
.Select(x => new GetSystemUserByIdResponse
{
Id = x.Id,
FullName = x.FullName,
Email = x.Email,
PhoneNumber = x.PhoneNumber,
UserName = x.UserName,
EmailConfirmed = x.EmailConfirmed,
PhoneNumberConfirmed = x.PhoneNumberConfirmed,
TwoFactorEnabled = x.TwoFactorEnabled,
IsActive = x.IsActive,
LockoutEnabled = x.LockoutEnabled,
LockoutEnd = x.LockoutEnd,
AccessFailedCount = x.AccessFailedCount,
SsoIdFirebase = x.SsoIdFirebase,
SsoIdKeycloak = x.SsoIdKeycloak,
SsoIdAzure = x.SsoIdAzure,
SsoIdAws = x.SsoIdAws,
SsoIdOther1 = x.SsoIdOther1,
SsoIdOther2 = x.SsoIdOther2,
SsoIdOther3 = x.SsoIdOther3,
CreatedAt = x.CreatedAt,
LastLoginAt = x.LastLoginAt,
UpdatedAt = x.UpdatedAt,
AvatarFile = x.AvatarFile,
})
.FirstOrDefaultAsync(cancellationToken);
if (user == null) return null;
user.UserRoles = await (from ur in _context.UserRoles
join r in _context.Roles on ur.RoleId equals r.Id
where ur.UserId == user.Id
select r.Name!)
.ToListAsync(cancellationToken);
return user;
}
}