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); } }