1

我有一个简单case class MyContext(queries: Query)的方法提供给架构:sangria.schema.Schema(deriveContextObjectType[MyContext, Query, Unit](_.queries)

MyQuery是一个特征Query

trait MyQuery {
  @GraphQLField
  def item(ctx: Context[MyContext, Unit])(id: String) ... 
}

这很好用。但是如果我想嵌套解析器怎么办?

query { 
   item { 
     status # status is resolved from source B
     price # price is resolved from source C
   }
 }

这有可能实现吗?我会返回一个ObjectType[Item]具有属性statusprice用 注释的@GraphQLField吗?

4

2 回答 2

1

非常感谢@tenshi 的回答!我尝试使用deriveObjectType但遇到类型错误:

type mismatch;
 found   : sangria.schema.Context[MyContext,Item]
 required: sangria.schema.Context[MyContext,Unit]

但是deriveContextObjectType结合使用AddFields是有效的:

def schema = sangria.schema.Schema(
    deriveContextObjectType[MyContext, Query, Unit](_.queries,
      AddFields(
        Field(
          name = "item",
          fieldType = deriveContextObjectType[MyContext, Item, Unit](_ => new Item),
          resolve = _ => ()
        )
      ))
    )

Schema 看起来不错,产生:

type Query {
  item: Item!
}
于 2018-05-30T15:43:00.187 回答
1

我认为您可以deriveObjectType使用Item. 它还能够处理@GraphQLField注释(作为替代方案,您也可以使用IncludeMethods宏设置)。这是一个例子:

implicit val ItemType = deriveObjectType[MyContext, Item]()
于 2018-05-30T12:01:33.297 回答