CleverStack/clever-accounts

View on GitHub
services/AccountService.js

Summary

Maintainability
B
5 hrs
Test Coverage
module.exports = function(Promise, Service, AccountModel, config, UserService, _) {
  return Service.extend({

    model: AccountModel,

    create: function(values, queryOptions) {
      var createAccount = this._super;

      queryOptions  = queryOptions || {};

      values.name   = values.firstName + ' ' + values.lastName;
      values.active = !config[ 'clever-accounts' ].requireConfirmation ? true : false;

      if (values.subDomain) {
        values.subDomain = values.subDomain;
      } else if (values.domain) {
        values.subDomain = values.domain.replace('http://', '').replace('www.', '').split('.')[0];
      }

      return new Promise(function(resolve, reject) {
        var account;

        this
          .transaction(queryOptions)
          .then(this.callback(function() {
            return createAccount.apply(this, [values, queryOptions]);
          }))
          .then(function(_account) {
            account = _account
            var userData = _.extend({}, {
              AccountId     : account.id,
              title         : values.title || null,
              firstName     : values.firstName,
              lastName      : values.lastName,
              email         : values.email,
              username      : values.username || values.email,
              password      : values.password,
              phone         : values.phone || null,

              active        : true,
              confirmed     : values.confirmed !== undefined ? values.confirmed : (config['clever-accounts'].emailConfirmation === true ? false : true),

              hasAdminRight : false
            });

            if (account.Roles && account.Roles.length) {
              userData.Role = account.Roles[0];
            }

            return UserService.create(userData, queryOptions);
          })
          .then(function(user) {
            return queryOptions.transaction.commit();
          })
          .then(function() {
            resolve(account);
          })
          .catch(function(err) {
            queryOptions
              .transaction
              .rollback()
              .then(reject.bind(null, err))
              .catch(reject);
          });
      }
      .bind(this));
    }
  });
};