Служба Appsync «Batch Create» Resolver выдает ошибку «шаблон отображения» - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь создать преобразователь для созданной мной мутации BatchCreateIngredients, но когда я запускаю мутацию, я получаю сообщение об ошибке типа MappingTemplate, и я не уверен, почему.

Имя моей таблицыявляется IngredientsTable, и я не использую никакой проверки Cognito.

Мутация:

mutation batchCreateIngredient {
  batchCreateIngredients(
    input: [
    {name: "Cookie" vegan: VEGAN glutenfree: GLUTENFREE},
    {name: "Pizza", vegan: VEGAN, glutenfree: GLUTENFREE},
]) {
    items{
      id
      name
      vegan
    }
  }
}

Сообщение об ошибке:

{
  "data": {
    "batchCreateIngredients": null
  },
  "errors": [
    {
      "path": [
        "batchCreateIngredients"
      ],
      "data": null,
      "errorType": "MappingTemplate",
      "errorInfo": null,
      "locations": [
        {
          "line": 6,
          "column": 3,
          "sourceName": null
        }
      ],
      "message": "Item list elements can't be null for table 'IngredientTable' at path '$[tables]'"
    }
  ]
}

Соответствующие части моей схемы:

input CreateIngredientInput {
    name: String!
    vegan: Vegan!
    glutenfree: GlutenFree!
    popularity: Int
}

enum GlutenFree {
    GLUTENFREE
    CONTAINS_GLUTEN
    UNKNOWN
}

type Ingredient {
    name: String!
    id: ID!
    vegan: Vegan
    glutenfree: GlutenFree
    popularity: Int
}

type IngredientConnection {
    items: [Ingredient]
    nextToken: String
}

type Mutation {
    createIngredient(input: CreateIngredientInput!): Ingredient
    batchCreateIngredients(input: [CreateIngredientInput]): IngredientConnection
    updateIngredient(input: UpdateIngredientInput!): Ingredient
    deleteIngredient(input: DeleteIngredientInput!): Ingredient
}

enum Vegan {
    VEGAN
    NON_VEGAN
    UNKNOWN
}

Resolver для BatchCreateIngredients:

#set($ingdata = [])
#foreach($ing in ${ctx.args.input})
    $util.qr($ingdata.add($util.dynamodb.toMapValues($item)))
#end

{
    "version" : "2018-05-29",
    "operation" : "BatchPutItem",
    "tables" : {
        "IngredientTable": $utils.toJson($ingdata)
    }
}

1 Ответ

0 голосов
/ 18 апреля 2019

Из того, что я могу сказать, похоже, проблема в шаблоне сопоставления запросов. Вы вызвали переменную цикла $ ing, но передаете "$ item" в функцию toMapValues. Можете ли вы попробовать изменить «item» на «ing»?

...