コード例 #1
0
        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
                   ));
        }