using Features.Users.Dtos;
using Features.Users.Services;
using MediatR;
namespace Features.Users.Commands.Authentication.RefreshToken;
///
/// Handles by validating the refresh token and issuing a new
/// access/refresh token pair.
///
public class RefreshTokenHandler(ITokenService tokenService)
: IRequestHandler
{
///
/// Thrown when the refresh token is invalid or expired, or when the user account it refers to no
/// longer exists.
///
public async Task Handle(
RefreshTokenCommand request,
CancellationToken cancellationToken
)
{
RefreshTokenResult result = await tokenService.RefreshTokenAsync(request.RefreshToken);
return new LoginPayload(
result.UserId,
result.Username,
result.RefreshToken,
result.AccessToken
);
}
}