我正在努力理解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
)
}
任何人都可以帮助我如何实现带有对方棱镜绑定的订阅的片段吗?