using Ardalis.Result; using Mediator; using Microsoft.EntityFrameworkCore; using Musify.Application.Contracts.Infrastructure; using Musify.Application.Users.Queries; using Musify.Application.Users.Responses; namespace Musify.Application.Users.Handlers { public class GetUserByIdQueryHandler(IDatabase database, IKeycloakUserService keycloakUserClient) : IQueryHandler > { public async ValueTask> Handle(GetUserByIdQuery 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"); KeycloakUserResponse keycloakUser; try { keycloakUser = await keycloakUserClient.GetUserByIdAsync(user.Id.ToString(), cancellationToken); } catch { return Result.Error("Keycloak user not found"); } return Result.Success(new UserResponse( user.Id.ToString(), keycloakUser.Name, keycloakUser.FirstName, keycloakUser.SecondName, user.CreatedAt, user.UpdatedAt)); } } }