graphql мутация и база

Я начинаю работать с graphQL с couchbase, и у меня возникает небольшая проблема, когда я запускаю мутацию, что я делаю, это сохранить 2 объекта:

key: email@email.it
{
    type: 'credential',
    user_id: 'xxxx-xxxx-xxxx-xxxx',
    password: 'jknelkjf'
}

key: xxxx-xxxx-xxxx-xxxx
{
    type: 'user',
    name: 'aaaa',
    surname: 'bbbb'
}

это моя мутационная функция:

export default {
  createUser: {
    type: User,
    args: {
      email: { type: GraphQLString },
      password: { type: GraphQLString },
      name: { type: GraphQLString },
      surname: { type: GraphQLString }      
    },
    resolve(source, args, req) {

      const _id = uuid();
      return new Promise((resolve, reject) => {

        bcrypt.hash(args.password, 10)
        .then(hash => req.db.insert({}, args.email, {
          password: hash,
          user_id: _id,
          type: "credential"
        }))
        .then(cred => req.db.insert({}, cred.user_id, {
          name: args.name,
          surname: args.surname,
          type: "user"
        }))
        .then(user => {
          return resolve(user);
        })
        .catch(err => {
          return reject(err);
        });

      });
    }
  }
}

а это мои схемы

export const UserCredential = new GraphQLObjectType({
  name: 'UserCredential',
  fields: () => ({
    user_id: { type: GraphQLString },
    type: { type: GraphQLString },
    id: { type: GraphQLString },
    password: { type: GraphQLString }
  })
});

export const User = new GraphQLObjectType({
  name: 'User',
  fields: () => ({
    name: { type: GraphQLString },
    surname: { type: GraphQLString },
    type: { type: GraphQLString },
    id: { type: GraphQLString },
    credential: {
      type: UserCredential,
      resolve: (root, args, req) => {
        const query = `SELECT META(credential).id,credential.* FROM {{bucket}} as credential WHERE credential.type="credential" AND credential.user_id=$1`;
        return new Promise((resolve, reject) => {
          req.db.runQuery(null, query, [root.id])
          .then((res) => {
            return resolve(res[0]);
          })
          .catch((err) => {
            return reject(err);
          })
        });
      }
    }
  })
});

проблема в том, что когда я запускаю мутацию, результатом является пользовательский объект с полем учетных данных null, но если я добавляю тайм-аут на разрешение мутации, я получаю пользователя с учетным объектом... функция вставки выглядит примерно так этот:

db.insert(result => {
    return db.find(result.id)
})

Есть ли у вас какие-либо рекомендации?

0 ответов

Другие вопросы по тегам