Как создать вложенные поля GraphQL с помощью аннотации Sangria `@ GraphQLField` - PullRequest
0 голосов
/ 30 мая 2018

У меня есть простой 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], который имеет свойства status и price с пометкой @GraphQLField?

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Действительно ценю @ tenhi's ответ!Я пытался использовать 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 = _ => ()
        )
      ))
    )

И схема выглядитхорошо, выход:

type Query {
  item: Item!
}
0 голосов
/ 30 мая 2018

Я думаю, вы можете использовать deriveObjectType для Item.Он также может обрабатывать аннотацию @GraphQLField (в качестве альтернативы вы также можете использовать настройку макроса IncludeMethods).Вот пример:

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