using MediatR;
using ChatService.Domain.AggregatesModel.UserAggregate;
namespace ChatService.API.Application.Commands.Keys;
///
/// EN: Handler for RotatePreKeyCommand.
/// VI: Handler cho RotatePreKeyCommand.
///
public class RotatePreKeyCommandHandler : IRequestHandler
{
private readonly IChatUserRepository _chatUserRepository;
private readonly ILogger _logger;
public RotatePreKeyCommandHandler(
IChatUserRepository chatUserRepository,
ILogger logger)
{
_chatUserRepository = chatUserRepository;
_logger = logger;
}
public async Task Handle(RotatePreKeyCommand request, CancellationToken cancellationToken)
{
_logger.LogInformation("Rotating pre-key for user {ChatUserId}", request.ChatUserId);
var user = await _chatUserRepository.GetByIdAsync(request.ChatUserId, cancellationToken);
if (user == null)
{
throw new InvalidOperationException($"Chat user {request.ChatUserId} not found");
}
user.RotateSignedPreKey(request.NewSignedPreKey, request.NewSignedPreKeySignature);
_chatUserRepository.Update(user);
await _chatUserRepository.UnitOfWork.SaveEntitiesAsync(cancellationToken);
_logger.LogInformation("Pre-key rotated for user {ChatUserId}", request.ChatUserId);
return new RotatePreKeyResult(DateTime.UtcNow);
}
}