如何使用Sangria的`@ GraphQLField`注释创建嵌套的GraphQL字段

时间:2018-05-30 02:02:11

标签: sangria

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

MyQueryQuery

的特征
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] status,其中price@GraphQLField注明了ion-navbar吗?

2 个答案:

答案 0 :(得分:1)

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

implicit val ItemType = deriveObjectType[MyContext, Item]()

答案 1 :(得分:0)

非常感谢@tenshi's回答!我尝试使用deriveObjectType,但收到类型错误:

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

但将deriveContextObjectTypeAddFields结合使用正在发挥作用:

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!
}