У меня есть простой 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?





Я думаю, вы можете использовать deriveObjectType для Item. Он также может обрабатывать аннотацию @GraphQLField (в качестве альтернативы вы также можете использовать настройку макроса IncludeMethods). Вот пример:
implicit val ItemType = deriveObjectType[MyContext, Item]()
Очень признателен за ответ @tenshi'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!
}