public async Task <AuthenticatedUserCreatedEvent> HandleAsync(CreateAuthenticatedUserCommand command, CancellationToken cancellationToken) { var sub = _subAccessors.First(sa => sa.Sub != null).Sub; if (await _usersCollection.CountAsync(u => u.Sub == sub, cancellationToken: cancellationToken) > 0) { throw new UserAlreadyExistsException ( sub ); } if (await _usersCollection.CountAsync(u => u.EmailAddress == command.EmailAddress, cancellationToken: cancellationToken) > 0) { throw new EmailAddressAlreadyTakenException ( command.EmailAddress ); } var user = new User { Sub = sub, Name = command.Name, EmailAddress = command.EmailAddress }; await _usersCollection.InsertOneAsync(user, cancellationToken : cancellationToken); _authenticatedUserAccessor.Reload(); return(new AuthenticatedUserCreatedEvent ( command.Name, command.EmailAddress )); }