Files
Musify/Application/Users/Queries/GetUserByKeycloakId/GetUserByKeycloakQueryHandler.cs
T
2026-03-20 09:41:43 +01:00

36 lines
1.3 KiB
C#

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<GetUserByKeycloakQuery, Task<Result<UserResponse>>>
{
public async Task<Result<UserResponse>> 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));
}
}
}