Я тестирую sangria для создания сервера graphql / relay. У меня очень простой класс User:
case class User(
id: Int,
username: String,
gender: Gender.Value)
Я хочу разрешить запросы по идентификатору или имени пользователя. Я создал схему, которая позволяет это, но поля имеют разные имена:
val Query = ObjectType(
"Query", fields[UserRepo, Unit](
Field("user", OptionType(User),
arguments = ID :: Nil,
resolve = ctx => ctx.ctx.getUser(ctx arg ID)),
Field("userByUsername", OptionType(User),
arguments = Username :: Nil,
resolve = ctx => ctx.ctx.getUserByUsername(ctx arg Username))
))
К сожалению, мне нужно запросить их с разными именами полей, user
и userByUsername
, например:
curl -G localhost:8080/graphql
--data-urlencode 'query={userByUsername(username: "Leia Skywalker") {id, username, gender}}'
or
curl -G localhost:8080/graph
--data-urlencode "query={user(id: 1025) {id, username, gender}}"
Как я могу создать схему, которая позволяет запрашивать одно поле с именем user
по идентификатору или имени пользователя? Например. оба следующих элемента должны возвращать один и тот же объект пользователя:
curl -G localhost:8080/graphql
--data-urlencode 'query={user(username: "Leia Skywalker") {id, username, gender}}'
or
curl -G localhost:8080/graph
--data-urlencode "query={user(id: 1025) {id, username, gender}}"