Как получить отношения в GraphQL?

У меня есть следующая модель данных в prisma.

type User {
  id: ID! @unique
  name: String!
  email: String! @unique
  password: String!
  ...etc
  userTypeA: UserTypeA @relation(name: "UserOnUserTypeA")
  userTypeB: UserTypeB @relation(name: "UserOnUserTypeB")
}

type UserTypeA {
  id: ID! @unique
  user: User @relation(name: "UserOnUserTypeA")
  userTypeB: [userTypeB!]!
}

type UserTypeB {
  id: ID! @unique
  user: User @relation(name: "UserOnUserTypeB")
  userTypeA: UserTypeA!
  ...etc
}

У меня также есть 2 распознавателя, один для регистрации, который возвращает только UserTypeA, а другой для входа в систему, который возвращает любого пользователя.

async register(parent, args, ctx, info) {
    args.email = args.email.toLowerCase();
    const password = await bcrypt.hash(args.password, 10);
    const user = await ctx.db.mutation.createUser(
      {
        data: {
          ...args,
          password
        }
      },
      info
    );
    const userTypeA = await ctx.db.mutation.createUserTypeA(
      {
        data: {
          user: {
            connect: {
              id: user.id
            }
          }
        }
      },
      info
    );
    const token = jwt.sign({ userId: userTypeA.id }, process.env.APP_SECRET);
    ctx.response.cookie("token", token, {
      httpOnly: true,
      maxAge: 1000 * 60 * 60 * 24 * 365
    });
    return userTypeA;
  },

async login(parent, { email, password }, ctx, info) {
    const user = await ctx.db.query.user({ where: { email: email } });
    if (!user) {
      throw new Error("No user found");
    }
    const valid = await bcrypt.compare(password, user.password);
    if (!valid) {
      throw new Error("Invalid Password!");
    }
    const token = jwt.sign({ userId: user.id }, process.env.APP_SECRET);
    ctx.response.cookie("token", token, {
      httpOnly: true,
      maxAge: 1000 * 60 * 60 * 24 * 365
    });
    return user;
  },

Мутация регистра правильно возвращает UserTypeA, и я могу найти вложенную информацию из модели пользователя. Однако, когда я использую мутацию входа в систему, я получаю информацию о пользователе, но вложенный UserTypeA имеет значение null.

В руководстве Веса Боса Расширенный ответ, где он создает приложение полного стека с помощью React и GraphQL/Prisma (интернет-магазин), он использует те же преобразователи и получает вложенную информацию о пользователе (например, элементы корзины), которые определены в модели. как отношения.

PS. Имейте в виду, что я новичок в GraphQL/Prisma. Спасибо!

Я думаю, вам нужно написать преобразователи запросов для UserTypeA и UserTypeB.

Soulimane Mammar 08.03.2019 00:58
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
1
1
52
0

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