public async Task ExecuteAsync(UploadDocumentCommand command, CancellationToken cancellationToken = default) { if (command == null) { throw new ArgumentNullException(nameof(command)); } if (cancellationToken.IsCancellationRequested) { _logger.LogInformation($"{nameof(UploadDocumentCommandHandler)}.{nameof(ExecuteAsync)} was cancelled before execution"); cancellationToken.ThrowIfCancellationRequested(); } using (var stream = command.File.OpenReadStream()) { await _fileClient.UploadAsync( fileName : $"{command.Subject}{Path.GetExtension(command.File.FileName)}", userId : command.Actor, stream : stream, cancellationToken : cancellationToken ); } var aggregate = _aggregateFactory.FromHistory <Document, DocumentState>(Enumerable.Empty <IEvent>()); if (aggregate == null) { throw new ArgumentNullException(nameof(aggregate)); } aggregate.Upload( subject: command.Subject, user: command.Actor, translationType: command.TranslationType, fileName: command.File.FileName, translationSubject: command.TranslationSubject ); await _aggregateRepository.SaveAsync(aggregate, command, 0, cancellationToken); }
public async Task ExecuteAsync(RegisterUserCommand command, CancellationToken cancellationToken = default) { if (command == null) { throw new ArgumentNullException(nameof(command)); } if (cancellationToken.IsCancellationRequested) { _logger.LogInformation($"{nameof(RegisterUserCommandHandler)}.{nameof(ExecuteAsync)} was cancelled before execution"); cancellationToken.ThrowIfCancellationRequested(); } var user = await _userManager.FindByEmailAsync(command.Email); if (user != null) { if (user.EmailConfirmed) { throw new EmailInUseException(); } else { await _userManager.GenerateEmailConfirmationTokenAsync(user); throw new UserNotVerifiedException(); } } user = new SIOUser { Id = command.Subject, Email = command.Email, FirstName = command.FirstName, LastName = command.LastName, UserName = command.Email, }; var userResult = await _userManager.CreateAsync(user); if (!userResult.Succeeded) { throw new UserCreationException(); } var token = await _userManager.GenerateEmailConfirmationTokenAsync(user); await _userManager.UpdateAsync(user); var aggregate = _aggregateFactory.FromHistory <User, UserState>(Enumerable.Empty <IEvent>()); if (aggregate == null) { throw new ArgumentNullException(nameof(aggregate)); } aggregate.Register( subject: user.Id, email: user.Email, firstName: user.FirstName, lastName: user.LastName, activationToken: token ); await _aggregateRepository.SaveAsync(aggregate, command, cancellationToken : cancellationToken); }