I'm modeling a User object with graphql for a react native app using amplify and appsync. I need to update the name field after creating the User but I am getting a DynamoDB: ConditionalCheckFailedException. Creating users and querying the User table works fine, I just can't update the fields of the existing object.
I am defining the User type within my project directory (amplify/backend/api/schema.graphql) and letting the amplify CLI generate GraphQL statements (queries, mutations and subscription) based on my schema types.
The schema I'm using:
type User @model @auth(rules: [{allow: owner}]) {
username: String!
name: String
}
type Mutation {
createUser(input: CreateUserInput!, condition: ModelUserConditionInput): User
updateUser(input: UpdateUserInput!, condition: ModelUserConditionInput): User
deleteUser(input: DeleteUserInput!, condition: ModelUserConditionInput): User
}
input UpdateUserInput {
username: String
name: String
}
I run a mutation to create a User with the credentials of the logged-in user. From the AppSync console, I log in as the Cognito user with same username (745ab477-5702-4f8d-b938-a987a3d9d192) and run this mutation:
mutation updateUser{
updateUser(input: {
name: "James"
}
condition:{
username: {eq: "745ab477-5702-4f8d-b938-a987a3d9d192"}
}){
username
name
}
}
Which produces:
{
"data": {
"updateUser": null
},
"errors": [
{
"path": [
"updateUser"
],
"data": null,
"errorType": "DynamoDB:ConditionalCheckFailedException",
"errorInfo": null,
"locations": [
{
"line": 40,
"column": 5,
"sourceName": null
}
],
"message": "The conditional request failed (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ConditionalCheckFailedException; Request ID: HND4VSCK8HLM5NC08VDEV51CORVV4KQNSO5AEMVJF66Q9ASUAAJG)"
}
]
}
This is the DynamoDB User table after adding the current user: