0

When the user does not send $context.arguments.input.isActive I replace this null value to a default one, like this:

#set($isActive = $utils.defaultIfNullOrEmpty($context.arguments.input.isActive, true))

But for some reason, this isActive is saved as null.

For example:

I have defined in the schema.graphql this mutation:

type Mutation {
  updateAccount(input: AccountInput!): Boolean
    @aws_auth(cognito_groups: ["SuperAdmin"])
}

input AccountInput {
  id: ID!
  name: String!
  picture: String!
  isActive: Boolean
}

So, when the user does not send the isActive, like this:

mutation {
  updateAccount(input: {
    id: "xxxxx"
    name: "xxxxx"
    picture: "public/xxxxx/xxxxxx.jpg"
  })
}

The isActive value is saved as null. And should be saved as true

Here's the complete code of the Resolver of updateAccount:

#set($id = $context.arguments.input.id)
#set($currentDate = $utils.time.nowISO8601())

#set($isActive = $utils.defaultIfNullOrEmpty($context.arguments.input.isActive, true))

{
  "version": "2018-05-29",
  "operation": "UpdateItem",
  "key": {
    "id": $utils.dynamodb.toDynamoDBJson($id)
  },
  "update": {
    "expression": "SET #name = :name, #picture = :picture, #isActive = :isActive, #updatedAt = :updatedAt",
    "expressionNames": {
      "#name": "name",
      "#picture": "picture",
      "#isActive": "isActive",
      "#updatedAt": "updatedAt"
    },
    "expressionValues": {
      ":name": $utils.dynamodb.toDynamoDBJson($context.arguments.input.name),
      ":picture": $utils.dynamodb.toDynamoDBJson($context.arguments.input.picture),
      ":isActive": $utils.dynamodb.toDynamoDBJson($isActive),
      ":updatedAt": $util.dynamodb.toDynamoDBJson($currentDate)
    }
  },
  "condition": {
    "expression": "attribute_exists(id)"
  }
}

Andrés Montoya
  • 4,079
  • 4
  • 18
  • 33

1 Answers1

1

I could fix it like this:

#set($isActive = true)

#if(!$utils.isNull($context.arguments.input.isActive))
  #set($isActive = $context.arguments.input.isActive)
#end

But why:

#set($isActive = $utils.defaultIfNullOrEmpty($context.arguments.input.isActive, true))

does not work for me?

Andrés Montoya
  • 4,079
  • 4
  • 18
  • 33