Присвязка: вычисление поля в зависимости от другого массива реляционных типов, подписка на призму с сервера nodejs - PullRequest
0 голосов
/ 26 июня 2019

Я стараюсь понять призму и graphql и застрял со следующей проблемой.

Предположим, у нас есть типов

type Queue {
  id: ID! @id
  title: String!
  slips: [Slip!]!
}

type Slip {
  id: ID! @id
  queue: Queue!
  user: User!
  position: Int! // << calculate this & subscribe to Slip
}

type User {
  id: ID! @id
  name: String!
  slips: [Slip!]!
}

Во-первых,когда запрашивает отношение скольжения или скольжения для поля 'position', я хочу вычислить позицию определенного слипа внутри массива слипов очереди .

В лучшем случае сервер nodejs должен каким-то образом подписаться на все очереди , чтобы иметь все текущие массивы скольжения очереди в качестве состояния для быстрого расчета.Это возможно?

Я пытался использовать фрагменты, но я не могу использовать это как fragment: "fragment queueId on Slip { Queue: id }". Есть ли способ сделать это с фрагментами?

const Slip = {
  position: {
    fragment: "fragment slipId on Slip { id }",
    async resolve(parent, { id }, { prisma, request }, info) {
      const userId = getUserId(request)

     // following ---does not work---
     const queue = await prisma.bindings.query.queues(
        {
          where: {
            slips: { slips_some: { id: parent.queue } }
          }
        },
        info
      )

      const index = queue.slips.indexOf(id)
      return index
    }
  }
}

Тогда также, если я хочу подписаться на квитанцию ​​, чтобы получить информацию, когда моя позиция меняется , как можно ли подписаться на Prisma Slip и подписаться на Массив слипов очереди одновременно?

Настроить базовые запросы и мутации очень просто, однако, занимаясь дополнительными вычислениями на стороне nodejs, я не уверен, как получить больше документации прямо сейчас.Я использую призменные привязки для удобного реляционного запроса полей.

Возможно, я подхожу к проблеме с неправильной стороны.Пожалуйста помогите мне понять, как подойти к этому с призмой, это высоко ценится .

Спасибо

РЕДАКТИРОВАТЬ:

поэтому для реляционного поля position Я был на правильном пути с фрагментами: fragment: "fragment slipId on Slip { id queue { id }}", который творит волшебство.Однако, когда я пытаюсь применить фрагмент к подписке, родительский аргумент имеет вид undefined:

slip: {
    fragment: "fragment slipId on Slip { id queue { id }}",
    subscribe(parent, { queueId }, { prisma, request }, info) {
      getUserId(request)

      console.log('parent', parent)

      return prisma.bindings.subscription.slip(
        { where: { node: { queue: { id: queueId } } } },
        info
      )
    }

Может кто-нибудь помочь мне, как реализовать фрагменты с подпиской на призменных привязках?

...