问题标签 [sangria]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
scala - Sangria GraphQL:如何混合延迟字段、派生对象类型和案例类
我很好奇是否可以将案例类的字段定义为延迟,同时仍然使用deriveObjectType
宏来定义其他所有内容。
这是一个例子。仪表板包含一系列选项卡:
我正在Dashboard.tabs
使用 a 推迟该字段的解析Fetcher
,并且我想继续使用deriveObjectType
宏(如果可能)。所以这就是我定义我ObjectType
的 s 的方式:
但是,当我运行代码时,出现以下错误:
如果我tabs
从案例类中删除该字段,Dashboard
错误就会消失,但我会失去使用案例类的一些好处(尤其是在单元测试中)。如果我避免使用deriveObjectType
宏(并手动定义Dashboard
's ObjectType
),那么我将失去宏的好处(更少的样板)。
所以,我很好奇是否有更好的方法或另一种方法来解决这个问题,DashboardType
而不是在不使用宏或从案例类中删除tags
字段的情况下定义。Dashboard
(我希望可能有某种@GraphQLDeferred
注释可以应用于该Dashboard.tabs
领域或类似的东西???)
scala - 将字段参数(例如分页参数)传递给延迟的“Fetcher”的最佳方式是什么?
下面是我当前如何处理延迟字段参数的示例。
一个Parent
类包含一个延迟Page
的Child
对象。子项的分页参数在children
字段上定义。我需要能够将分页参数连同父 ID 一起传递给 deferred Fetcher
,所以我将它们与父 ID 一起捆绑在一个临时DeferredChildInput
对象中,然后将它们传递给Fetcher
. 相应DeferredChildResult
的返回查询的结果 (the Page[Child]
) 和 the DeferredChildInput
(use in the HasId
)。
问题是,有没有更好的方法将字段参数和父 id 传递给 deferred Fetcher
?
scala - 具有 EitherT 结果的 Sangria GraphQL Schema
我正在将 Sangria 用于 Play 应用程序,目前正在努力实现架构定义。问题是,服务没有直接返回所需的对象,它返回一个包含该对象的 EitherT。
下面是一些代码示例
案例类
用户服务
如果服务将返回 aUser
而不是 aEitherT[Future, AbstractError, User]
我将派生这样的架构:
架构
我是否必须实现一个额外的层来User
从EitherT
对象中提取,或者是否有另一种方法来处理这种情况?
scala - GraphQL 将 @include 逻辑传递给存储库调用
我有一个查询
根据withComments
变量,我可以抓取带有或不带有评论的提要。有用。但似乎桑格利亚汽酒无论如何都必须获得带有评论的提要(对我来说性能问题是什么),即使我不需要它们并传递withComments
值false
:
什么是在对象中包含/排除继承列表(比如关系)的正确方法,如果我不从存储库中选择所有数据@include
,让存储库知道它?
如果解决方案是进行两个查询feed
,feedWithComments
我看不到@include
.
scala - 使用 Sangria 进行查询设计以防止开销
我有一个关于架构/查询设计的问题。
让我们假设有一个Study
模型。
Study
可以有多个后继者,所以显然有parentId
字段。
User
from context 可以访问研究,因此我们希望将所有可访问的研究作为树返回到 UI。所以查询字段可以是这样的
在该accessibleStudies
方法中,我们向 DB 请求数据并准备可以在 UI 上作为树查看的列表。
现在有趣的部分。
StudyNode
应该有额外的字段 - progress
,它可以计算为所有后继者进度的递归总和,所以我们每次都需要整个progress
可访问的研究列表来获取单个节点。如此简单的方法
将导致巨大的开销,因为我们需要一次又一次地为每个节点获取可访问的研究。不过好像里面计算进度比较方便StudyQueries.accessibleStudies
,所以我们会有类似prepare的东西Map[EntityId, Progress]
,StudyNode
现在定义可以这样修改
但这对我来说似乎不是一个干净的解决方案。此外,我必须手动检查ctx.astFields
以验证是否progress
正在调用该字段。现在我想知道是否有更好的方法来处理这种情况。
scala - 看不懂 Fetcher.rel
我有以下案例类:
它们代表一个简单的模式,其中一个Organization
可以有多个Event
.
基本上我试图定义两个graphql查询:一个列出所有组织及其嵌套事件,第二个查询是另一种方式:列出所有事件及其相应的组织。在这两种情况下,我都想避免 N+1 查询。我认为两个查询都可以在 2 个 SQL 查询中运行。
为了解决这个问题,我查看了高级 Fetch API,特别是该Fetcher.rel
部分。如果我理解正确,我需要定义这样的关系 :val byOrganization = Relation[Event, OrganizationId]("byOrganization", e => Seq(e.organizationId))
然后是 a Fetcher.rel
,但我不能让它工作。
这是我的架构定义的完整代码:
它无法编译,我收到此错误: ound :
你能帮我找出我错过了什么吗?
scala - 斯卡拉。Sangria.Print json 模式
我正在通过 Scala 在 Scala 上使用 GraphQL Sangria
。我也在使用apollo-codegen
.
我想定义我的架构一次,所以我通过以下方式将我的架构从后端导出到前端:
问题是桑格利亚汽酒的renderPretty
打印schemaAst
格式。但apollo-codegen
期望json
格式。
如何以sangria
json 格式制作渲染模式?或者也许无痛转换schemaAst
为json
via SBT
?
scala - 对 ObjectType 和 InputObjectType 使用相同的对象
我有一个这样定义的模型对象:
这是我在桑格利亚汽酒模式定义中尝试做的事情:
我需要将其定义OrganizationFields
为ObjectType
能够Organization
在我的 graphql 查询中使用以及ObjectInputType
能够在我的 graphql 突变中使用它作为输入。问题是我在运行时遇到以下异常:
Type name 'OrganizationFields' is used for several conflicting GraphQL type kinds: ObjectType, InputObjectType. Conflict found in an argument 'organization' defined in field 'createOrganization' of 'Mutation' type
有没有办法让它工作?
scala - 如何在 GraphQL Sangria 中将 Scala Map[String, Seq[String]] 转换为 MapType
我正在尝试在 GraphQL Sangria 中使用Map[String, Seq[String]]
Scala MapType
。我认为可以使用的方式是:
scala - Sangria GraphQL Context 会变得太大?
您如何构建此处描述的上下文对象,使其不包含您的架构可能需要的所有服务?
在示例 StarWars 架构中,所有字段都使用相同的上下文(CharacterRepo) 进行解析。
我的上下文可能包含 50 种不同的服务?