Я получаю следующую ошибку времени выполнения при вызове моей мутации createTest. У меня есть входной объект, который называется testCreationRequest
, который содержит как перечисление, так и другой пользовательский тип, который также содержит перечисление. Я получаю одинаковую ошибку для обоих этих случаев. Я попытался переопределить форматеры json и несколько вещей, касающихся последствий, и заменить значения на сангрии InputObjectType
ReplaceInputField
. Я все еще очень плохо знаком с этим стеком программирования (включая язык), но кажется, что он должен быть тривиальным.
Argument 'testCreationRequest' has invalid value: At path '/testEnum': error.expected.validenumvalue (line 2, column 35):\n createTest(testCreationRequest: {id: \"testing\", testEnum: ONE, nestedInputObject: {id: \"some test\", testTwoEnum: LEVELTWO}})
Ниже приведен мой запрос graphql
mutation {
createTest(testCreationRequest: {
id: "testing",
testEnum: ONE,
nestedInputObject: {
id: "some test",
testTwoEnum: LEVELTWO
}
}) {
id
}
}
Следующий фрагмент содержит мои типы графиков
package models.api.graphql
import graphql.GraphQLContext
import models.db.Test.{Test, TestCreationRequest, NestedInput}
import sangria.schema._
import sangria.macros.derive._
import sangria.marshalling.playJson._
import scala.collection.immutable
object TestModels {
implicit val TestType: ObjectType[GraphQLContext, Test] =
deriveObjectType[Unit, Test](
ObjectTypeDescription("Test")
)
implicit val TestTwoEnumType: EnumType[models.enums.TestTwoEnumType] = EnumType(
"TestTwoEnumType",
Some("testing two..."),
List(
EnumValue("LEVELONE",
value = models.enums.TestTwoEnumType.LevelOne),
EnumValue("LEVELTWO",
value = models.enums.TestTwoEnumType.LevelTwo),
EnumValue("LEVELTHREE",
value = models.enums.TestTwoEnumType.LevelThree)
)
)
implicit val TestEnumType: EnumType[models.enums.TestEnumType] = EnumType(
"TestEnumType",
Some("testing..."),
List(
EnumValue("ONE",
value = models.enums.TestEnumType.One),
EnumValue("TWO",
value = models.enums.TestEnumType.Two),
EnumValue("THREE",
value = models.enums.TestEnumType.Three)
)
)
implicit val NestedType: InputObjectType[NestedInput] = deriveInputObjectType[NestedInput]()
implicit lazy val TestCreationRequestType: InputObjectType[TestCreationRequest] =
deriveInputObjectType[TestCreationRequest](
ReplaceInputField("testEnum", InputField("testEnum", TestEnumType)),
ReplaceInputField("nestedInputObject", InputField("nestedInputObject", OptionInputType(NestedType)))
)
val TestCreationRequestArg: Argument[TestCreationRequest] = Argument("testCreationRequest", TestCreationRequestType)
}
А вот и модели, и перечисления.
package models.db.Test
import models.enums.{TestEnumType, TestTwoEnumType}
import play.api.libs.json.{Json, OFormat}
case class NestedInput (
id: String,
testTwoEnum: Option[TestTwoEnumType]
)
object NestedInput {
implicit val format: OFormat[NestedInput] = Json.format[NestedInput]
}
case class TestCreationRequest (
id: String,
testEnum: TestEnumType,
nestedInputObject: Option[NestedInput]
)
object TestCreationRequest {
implicit val format: OFormat[TestCreationRequest] = Json.format[TestCreationRequest]
}
package models.db.Test
import play.api.libs.json.{Json, OFormat, OWrites, Reads}
case class Test(
id: String
)
object Test {
implicit val reads: Reads[Test] = Json.reads[Test]
implicit val writes: OWrites[Test] = Json.writes[Test]
implicit val format: OFormat[Test] = Json.format[Test]
}
package models.enums
import enumeratum._
import play.api.libs.json.{Format}
import scala.collection.immutable
sealed trait TestEnumType extends EnumEntry
object TestEnumType extends Enum[TestEnumType] with PlayJsonEnum[TestEnumType] {
val values: immutable.IndexedSeq[TestEnumType] = findValues
case object One extends TestEnumType
case object Two extends TestEnumType
case object Three extends TestEnumType
override implicit val jsonFormat: Format[TestEnumType] = EnumFormats.formats(TestEnumType)
}
package models.enums
import enumeratum._
import play.api.libs.json.{Format}
import scala.collection.immutable
sealed trait TestTwoEnumType extends EnumEntry
object TestTwoEnumType extends Enum[TestTwoEnumType] with PlayJsonEnum[TestTwoEnumType] {
val values: immutable.IndexedSeq[TestTwoEnumType] = findValues
case object LevelOne extends TestTwoEnumType
case object LevelTwo extends TestTwoEnumType
case object LevelThree extends TestTwoEnumType
override implicit val jsonFormat: Format[TestTwoEnumType] = EnumFormats.formats(TestTwoEnumType)
}
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация. Любая помощь приветствуется:)