我很好奇是否可以将案例类的字段定义为延迟,同时仍然使用deriveObjectType
宏来定义其他所有内容。
这是一个例子。仪表板包含一系列选项卡:
case class Tab(id: Long, dashboardId: Long, name: String, order: Long)
case class Dashboard(id: Long, name: String, tabs: Seq[Tab])
我正在Dashboard.tabs
使用 a 推迟该字段的解析Fetcher
,并且我想继续使用deriveObjectType
宏(如果可能)。所以这就是我定义我ObjectType
的 s 的方式:
val TabType = deriveObjectType[Unit, Dashboard]()
val DashboardType = deriveObjectType[Unit, Dashboard](
AddFields(
fields =
Field(
name = "tabs",
fieldType = ListType(TabType),
resolve = ctx => {
TabsFetcher.fetcher.defer(ctx.value.id)
}
)
)
)
但是,当我运行代码时,出现以下错误:
sangria.schema.NonUniqueFieldsError: All fields within 'Dashboard' type should have unique names! Non-unique fields: 'tabs'.
如果我tabs
从案例类中删除该字段,Dashboard
错误就会消失,但我会失去使用案例类的一些好处(尤其是在单元测试中)。如果我避免使用deriveObjectType
宏(并手动定义Dashboard
's ObjectType
),那么我将失去宏的好处(更少的样板)。
所以,我很好奇是否有更好的方法或另一种方法来解决这个问题,DashboardType
而不是在不使用宏或从案例类中删除tags
字段的情况下定义。Dashboard
(我希望可能有某种@GraphQLDeferred
注释可以应用于该Dashboard.tabs
领域或类似的东西???)