using Ardalis.Result; using DispatchR.Abstractions.Send; using Microsoft.EntityFrameworkCore; using Musify.Application.Contracts.Infrastructure; using Musify.Application.Users.Contracts; namespace Musify.Application.Users.Queries.GetUserByKeycloakId { public class GetUserByKeycloakQueryHandler(IDatabase database, IKeycloakUserService keycloakUserClient) : IRequestHandler>> { public async Task> Handle(GetUserByKeycloakQuery request, CancellationToken cancellationToken) { var user = await database.Users .AsNoTracking() .SingleOrDefaultAsync(u => u.Id == request.Id, cancellationToken); if (user is null) return Result.NotFound("User not found."); var keycloakUser = await keycloakUserClient.GetUserByIdAsync(user.Id.ToString(), cancellationToken); if (!keycloakUser.IsSuccess) return Result.NotFound("Keycloak user not found."); return Result.Success(new UserResponse( user.Id.ToString(), keycloakUser.Value.Name, keycloakUser.Value.FirstName, keycloakUser.Value.SecondName, user.CreatedAt, user.UpdatedAt)); } } }