Prisma绑定:根据其他关系类型数组计算字段,从Node.js服务器订阅pyramida

时间:2019-06-26 11:11:00

标签: graphql prisma prisma-graphql graphql-subscriptions

我正在努力理解pyramida和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!]!
}

首先,当查询“位置”字段的票据或票据关系时,我要计算特定票据在Queue票据中的位置阵列

最好 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的便笺并预订队列的便笺阵列吗?

设置基本查询和变异非常容易,但是当在nodejs方面进行更多计算时,我不确定现在如何获取更多文档。我正在使用pyramida绑定方便地进行关系字段查询。

也许我是从错误的角度解决问题。 请帮助,以了解如何使用prisma进行处理,它受到了的赞赏

谢谢

编辑:

因此对于关系字段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
      )
    }

任何人都可以帮助我如何实现带有对方棱镜绑定的订阅的片段吗?

0 个答案:

没有答案