Обновление мутаций в GraphQL с помощью Appsync - PullRequest
0 голосов
/ 14 февраля 2020

У меня возникли проблемы с мутациями обновления при реакции-нативе и усилении.

addProfileDetails = async (sub) => {
    let UserDetails = await API.graphql(graphqlOperation(mutations.updatePeople, {updatePeopleInput: 
         {
            UserID: sub,
            Organization: "Organization"
            Name: "name"
        }
    }));
    console.log(UserDetails);
  };

Этот код не генерирует никаких ошибок, и он почти такой же, как и код, который я использовал для создания запись во-первых, которая работает.

, но возвращает эти данные и фактически не обновляет запись как задумано.

Object {
  "data": Object {
    "updatePeople": null,
  },
}

Я проверил этот запрос на запрос appsyn c редактор:

mutation update {
  updatePeople (updatePeopleInput: {
    PersonID: "XXXXXXXXXXXXXXXXXXXXXXXXXX",
    Gender: "Male"
  })
    {
    PersonID
    Gender
  }
}

И он возвращает то же самое. Создание мутаций, работа запросов. Я не понимаю, что здесь происходит.

Любое понимание того, что я делаю неправильно, было бы полезно. Кроме того, если вам нужна схема или код мутации, я могу предоставить это.

1 Ответ

0 голосов
/ 21 февраля 2020

Я понял это.

Оказывается, преобразователи по умолчанию, созданные Appsyn c, просто не работают обновления мутаций в моей RDS.

Я решил это, изменив преобразователи запросов :

#set( $updateList = {} )
#foreach( $entry in $ctx.args.updatePeopleInput.keySet() )
  #set( $discard = $updateList.put($entry, "'$ctx.args.updatePeopleInput[$entry]'") )
#end
#set( $update = $updateList.toString().replace("{","").replace("}","") )
{
  "version": "2018-05-29",
  "statements":   [
    $util.toJson("UPDATE People SET Gender='$ctx.args.updatePeopleInput.Gender', Username='$ctx.args.updatePeopleInput.Username' WHERE PersonID='$ctx.args.updatePeopleInput.PersonID'"),
    $util.toJson("SELECT * FROM People WHERE PersonID='$ctx.args.updatePeopleInput.PersonID'")
    ]
}

до того, как это было:

#set( $updateList = {} )
#foreach( $entry in $ctx.args.updatePeopleInput.keySet() )
  #set( $discard = $updateList.put($entry, "'$ctx.args.updatePeopleInput[$entry]'") )
#end
#set( $update = $updateList.toString().replace("{","").replace("}","") )
{
  "version": "2018-05-29",
  "statements":   [
    $util.toJson("UPDATE People SET $update WHERE PersonID='$ctx.args.updatePeopleInput.PersonID'"),
    $util.toJson("SELECT * FROM People WHERE PersonID='$ctx.args.updatePeopleInput.PersonID'")
    ]
}

Очевидно, что $ update не работает, и вы должны явно назвать переменные, которые должны быть установлены.

...