Expressões de condição da transação
As expressões de condição da transação estão disponíveis em solicitações de todos os quatro tipos de operações em TransactWriteItems, ou seja, PutItem, DeleteItem, UpdateItem e ConditionCheck.
Em PutItem, DeleteItem e UpdateItem, a expressão de condição da transação é opcional. Em ConditionCheck, a expressão de condição da transação é necessária.
Exemplo 1
A função transacional DeleteItem a seguir não tem uma expressão de condição. Como resultado, ele exclui o item no DynamoDB.
import { util } from '@aws-appsync/utils'; export function request(ctx) { const { postId } = ctx.args; return { operation: 'TransactWriteItems', transactItems: [ { table: 'posts', operation: 'DeleteItem', key: util.dynamodb.toMapValues({ postId }), } ], }; }
Exemplo 2
O manipulador da solicitação da função transacional DeleteItem a seguir possui uma expressão de condição da transação que permite que a operação seja bem-sucedida apenas se o autor dessa postagem for igual a determinado nome.
import { util } from '@aws-appsync/utils'; export function request(ctx) { const { postId, authorName} = ctx.args; return { operation: 'TransactWriteItems', transactItems: [ { table: 'posts', operation: 'DeleteItem', key: util.dynamodb.toMapValues({ postId }), condition: util.transform.toDynamoDBConditionExpression({ authorName: { eq: authorName }, }), } ], }; }
Se a verificação de condição falhar, causará TransactionCanceledException e os detalhes de erro serão retornados em ctx.result.cancellationReasons. Observe que, por padrão, o item antigo no DynamoDB que fez a verificação da condição falhar será retornado em ctx.result.cancellationReasons.
Especificação de uma condição
Os objetos da solicitação PutItem, UpdateItem e DeleteItem permitem que uma seção condition opcional seja especificada. Se omitida, nenhuma verificação de condição é feita. Se especificada, a condição deve ser verdadeira para que a operação seja bem-sucedida. A ConditionCheck deve ter uma seção condition a ser especificada. A condição deve ser verdadeira para que toda a transação seja bem-sucedida.
A seção condition tem a seguinte estrutura:
type TransactConditionCheckExpression = { expression: string; expressionNames?: { [key: string]: string }; expressionValues?: { [key: string]: string }; returnValuesOnConditionCheckFailure: boolean; };
Os campos a seguir especificam a condição:
-
expression -
A própria expressão de atualização. Para obter mais informações sobre como gravar expressões de condição, consulte a Documentação ConditionExpressions do DynamoDB. Esse campo deve ser especificado.
-
expressionNames -
As substituições para espaços reservados de nome do atributo da expressão, na forma de pares de chave/valor. A chave corresponde a um espaço reservado de nome usado na expressão e o valor deve ser uma string que corresponde ao nome do atributo do item no DynamoDB. Esse campo é opcional e deve ser preenchido apenas por substituições para espaços reservados de nome do atributo da expressão usados na expressão.
-
expressionValues -
As substituições para espaços reservados de valor do atributo da expressão, na forma de pares chave-valor. A chave corresponde a um espaço reservado de valor usado na expressão e o valor deve ser um valor digitado. Para obter mais informações sobre como especificar um "valor digitado", consulte Sistema de tipo (Mapeamento de solicitação). Isso deve ser especificado. Esse campo é opcional e deve ser preenchido apenas por substituições para espaços reservados de valor do atributo da expressão usados na expressão.
-
returnValuesOnConditionCheckFailure -
Especifique se deseja recuperar o item no DynamoDB quando houver falha na verificação de condição. O item recuperado estará em
ctx.result.cancellationReasons[<index>].item, onde<index>é o índice do item de solicitação cuja verificação de condição falhou. Esse valor padrão é verdadeiro.