DYNAMODB_DELETE - Deletar Item
O que é este Node?
O DYNAMODB_DELETE é o node responsável por remover permanentemente um item de uma tabela DynamoDB usando sua chave primária.
Por que este Node existe?
Deletar dados é uma operação crítica que precisa ser controlada e precisa. O DYNAMODB_DELETE existe para:
- Remoção Precisa: Deleta apenas o item especificado pela chave
- Atomicidade: Operação completa ou não acontece (não deixa dados corrompidos)
- Segurança: Pode usar condições para validar antes de deletar
- Compliance: Cumprir requisitos de LGPD/GDPR removendo dados pessoais
Como funciona internamente?
Quando o DYNAMODB_DELETE é executado, o sistema:
- Autentica: Valida as credenciais AWS
- Localiza Item: Busca o item pela chave primária
- Valida Condição: Se houver ConditionExpression, verifica se é verdadeira
- Se condição falha: Retorna erro sem deletar
- Se condição passa ou não existe: Remove o item permanentemente
- Retorna: Confirmação de sucesso
Código interno (aws-executors.service.ts:339-347):
case 'deleteItem':
await dynamodb.delete({
TableName: data.tableName,
Key: data.key,
}).promise();
return {
success: true,
message: 'Item deleted successfully',
};
Quando você DEVE usar este Node?
Use DYNAMODB_DELETE sempre que precisar de remover dados permanentemente:
Casos de uso
- Cancelar pedido: "Remover pedido que ainda não foi processado"
- Excluir conta: "Deletar perfil de usuário que solicitou exclusão (LGPD)"
- Limpar sessões expiradas: "Remover tokens de sessão antigos"
- Remover dados temporários: "Deletar cache que não é mais necessário"
Quando NÃO usar DYNAMODB_DELETE
- Arquivar dados: Use UPDATE para mudar status ao invés de deletar
- Soft delete: Use UPDATE com campo
deleted: truepara manter histórico - Múltiplos itens: Use BatchWriteItem ou Scan + múltiplos Deletes
- Dados relacionados: Delete em ordem (filhos primeiro, pai depois)
Parâmetros Detalhados
accessKeyId (string, obrigatório)
O que é: Chave de acesso AWS.
Padrão: Nenhum (sempre obrigatório)
Flow completo para testar:
{
"name": "Teste DynamoDB Delete - Access Key",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "input_1",
"type": "input",
"position": { "x": 250, "y": 100 },
"data": {
"label": "Session ID",
"parameters": {
"message": "Digite o ID da sessão para deletar:",
"variableName": "session_id"
}
}
},
{
"id": "dynamodb_1",
"type": "dynamodb_delete",
"position": { "x": 400, "y": 100 },
"data": {
"label": "Deletar Sessão",
"parameters": {
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"region": "us-east-1",
"operation": "deleteItem",
"tableName": "Sessions",
"key": {
"sessionId": "{{session_id}}"
}
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 550, "y": 100 },
"data": {
"label": "Confirmação",
"parameters": {
"message": "Sessão deletada"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_1" },
{ "source": "input_1", "target": "dynamodb_1" },
{ "source": "dynamodb_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Digite um ID. Sessão será removida permanentemente.
secretAccessKey (string, obrigatório)
O que é: Chave secreta AWS.
Padrão: Nenhum (sempre obrigatório)
Flow completo para testar:
{
"name": "Teste DynamoDB Delete - Secret Key",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "email_1",
"type": "email",
"position": { "x": 250, "y": 100 },
"data": {
"label": "Email",
"parameters": {
"message": "Digite o email da conta a excluir:",
"variableName": "user_email"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 400, "y": 100 },
"data": {
"label": "Confirmação",
"parameters": {
"message": "⚠️ ATENÇÃO!\n\nVocê está prestes a excluir permanentemente a conta: {{user_email}}\n\nEsta ação é IRREVERSÍVEL.\n\nDigite CONFIRMAR para prosseguir:"
}
}
},
{
"id": "input_1",
"type": "input",
"position": { "x": 550, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "Digite CONFIRMAR:",
"variableName": "confirmation"
}
}
},
{
"id": "condition_1",
"type": "condition",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Confirmou?",
"parameters": {
"variable": "{{confirmation}}",
"operator": "=",
"value": "CONFIRMAR"
}
}
},
{
"id": "dynamodb_1",
"type": "dynamodb_delete",
"position": { "x": 850, "y": 50 },
"data": {
"label": "Deletar Conta",
"parameters": {
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"region": "sa-east-1",
"operation": "deleteItem",
"tableName": "Usuarios",
"key": {
"userId": "{{user_email}}"
}
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 1000, "y": 50 },
"data": {
"label": "Deletado",
"parameters": {
"message": "✅ Conta excluída com sucesso.\n\nTodos os seus dados foram removidos."
}
}
},
{
"id": "message_3",
"type": "message",
"position": { "x": 850, "y": 150 },
"data": {
"label": "Cancelado",
"parameters": {
"message": "❌ Exclusão cancelada.\n\nSua conta permanece ativa."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1000, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "email_1" },
{ "source": "email_1", "target": "message_1" },
{ "source": "message_1", "target": "input_1" },
{ "source": "input_1", "target": "condition_1" },
{ "source": "condition_1", "target": "dynamodb_1", "label": "true" },
{ "source": "condition_1", "target": "message_3", "label": "false" },
{ "source": "dynamodb_1", "target": "message_2" },
{ "source": "message_2", "target": "end_1" },
{ "source": "message_3", "target": "end_1" }
]
}
Teste: Digite email e "CONFIRMAR". Apenas com confirmação correta a conta é excluída.
region (string, obrigatório)
O que é: Região AWS da tabela.
Padrão: Nenhum (sempre obrigatório)
Flow completo para testar:
{
"name": "Teste DynamoDB Delete - Region",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 150 },
"data": { "label": "Início" }
},
{
"id": "input_1",
"type": "input",
"position": { "x": 250, "y": 150 },
"data": {
"label": "Log ID",
"parameters": {
"message": "Digite o ID do log para deletar:",
"variableName": "log_id"
}
}
},
{
"id": "switch_1",
"type": "switch",
"position": { "x": 400, "y": 150 },
"data": {
"label": "Região",
"parameters": {
"message": "Região do log?\n1️⃣ US\n2️⃣ Brasil",
"cases": [
{ "value": "1", "label": "US" },
{ "value": "2", "label": "BR" }
]
}
}
},
{
"id": "dynamodb_1",
"type": "dynamodb_delete",
"position": { "x": 550, "y": 100 },
"data": {
"label": "Delete US",
"parameters": {
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"region": "us-east-1",
"operation": "deleteItem",
"tableName": "Logs",
"key": { "logId": "{{log_id}}" }
}
}
},
{
"id": "dynamodb_2",
"type": "dynamodb_delete",
"position": { "x": 550, "y": 200 },
"data": {
"label": "Delete BR",
"parameters": {
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"region": "sa-east-1",
"operation": "deleteItem",
"tableName": "Logs",
"key": { "logId": "{{log_id}}" }
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 150 },
"data": {
"label": "Confirmação",
"parameters": {
"message": "Log deletado da região selecionada"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 850, "y": 150 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_1" },
{ "source": "input_1", "target": "switch_1" },
{ "source": "switch_1", "target": "dynamodb_1", "label": "1" },
{ "source": "switch_1", "target": "dynamodb_2", "label": "2" },
{ "source": "dynamodb_1", "target": "message_1" },
{ "source": "dynamodb_2", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Escolha região. Delete executa apenas naquela região.
tableName (string, obrigatório)
O que é: Nome da tabela DynamoDB.
Padrão: Nenhum (sempre obrigatório)
Flow completo para testar:
{
"name": "Teste DynamoDB Delete - Table Name",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "input_1",
"type": "input",
"position": { "x": 250, "y": 100 },
"data": {
"label": "Tabela",
"parameters": {
"message": "Nome da tabela:",
"variableName": "table_name"
}
}
},
{
"id": "input_2",
"type": "input",
"position": { "x": 400, "y": 100 },
"data": {
"label": "ID",
"parameters": {
"message": "ID do item para deletar:",
"variableName": "item_id"
}
}
},
{
"id": "dynamodb_1",
"type": "dynamodb_delete",
"position": { "x": 550, "y": 100 },
"data": {
"label": "Delete Dinâmico",
"parameters": {
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"region": "us-east-1",
"operation": "deleteItem",
"tableName": "{{table_name}}",
"key": {
"id": "{{item_id}}"
}
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Confirmação",
"parameters": {
"message": "Item deletado da tabela {{table_name}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 850, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_1" },
{ "source": "input_1", "target": "input_2" },
{ "source": "input_2", "target": "dynamodb_1" },
{ "source": "dynamodb_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Digite tabela e ID. Item será removido.
key (object, obrigatório)
O que é: Chave primária do item a deletar (Partition Key + Sort Key se houver).
Padrão: Nenhum (sempre obrigatório)
Flow completo para testar:
{
"name": "Teste DynamoDB Delete - Key",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 150 },
"data": { "label": "Início" }
},
{
"id": "message_1",
"type": "message",
"position": { "x": 250, "y": 150 },
"data": {
"label": "Iniciar",
"parameters": {
"message": "🗑️ Cancelar Pedido\n\nVamos remover seu pedido."
}
}
},
{
"id": "input_1",
"type": "input",
"position": { "x": 400, "y": 150 },
"data": {
"label": "Order ID",
"parameters": {
"message": "Digite o ID do pedido para cancelar:",
"variableName": "order_id"
}
}
},
{
"id": "dynamodb_1",
"type": "dynamodb_get",
"position": { "x": 550, "y": 150 },
"data": {
"label": "Verificar Pedido",
"parameters": {
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"region": "us-east-1",
"operation": "getItem",
"tableName": "Pedidos",
"key": {
"orderId": "{{order_id}}"
}
}
}
},
{
"id": "condition_1",
"type": "condition",
"position": { "x": 700, "y": 150 },
"data": {
"label": "Pedido Existe?",
"parameters": {
"variable": "{{dynamodb_1.item}}",
"operator": "exists"
}
}
},
{
"id": "condition_2",
"type": "condition",
"position": { "x": 850, "y": 100 },
"data": {
"label": "Pode Cancelar?",
"parameters": {
"variable": "{{dynamodb_1.item.status}}",
"operator": "=",
"value": "pendente"
}
}
},
{
"id": "dynamodb_2",
"type": "dynamodb_delete",
"position": { "x": 1000, "y": 50 },
"data": {
"label": "Deletar Pedido",
"parameters": {
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"region": "us-east-1",
"operation": "deleteItem",
"tableName": "Pedidos",
"key": {
"orderId": "{{order_id}}"
}
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 1150, "y": 50 },
"data": {
"label": "Cancelado",
"parameters": {
"message": "✅ Pedido cancelado!\n\n🆔 ID: {{order_id}}\n\nO pedido foi removido do sistema."
}
}
},
{
"id": "message_3",
"type": "message",
"position": { "x": 1000, "y": 150 },
"data": {
"label": "Não Pode Cancelar",
"parameters": {
"message": "❌ Não é possível cancelar!\n\nO pedido {{order_id}} já está em processamento ou foi enviado.\n\nStatus: {{dynamodb_1.item.status}}"
}
}
},
{
"id": "message_4",
"type": "message",
"position": { "x": 850, "y": 200 },
"data": {
"label": "Não Encontrado",
"parameters": {
"message": "❌ Pedido não encontrado!\n\nID {{order_id}} não existe no sistema."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1150, "y": 125 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "input_1" },
{ "source": "input_1", "target": "dynamodb_1" },
{ "source": "dynamodb_1", "target": "condition_1" },
{ "source": "condition_1", "target": "condition_2", "label": "true" },
{ "source": "condition_1", "target": "message_4", "label": "false" },
{ "source": "condition_2", "target": "dynamodb_2", "label": "true" },
{ "source": "condition_2", "target": "message_3", "label": "false" },
{ "source": "dynamodb_2", "target": "message_2" },
{ "source": "message_2", "target": "end_1" },
{ "source": "message_3", "target": "end_1" },
{ "source": "message_4", "target": "end_1" }
]
}
Teste: Digite ID de pedido. Só deleta se existir e status for "pendente".
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| accessKeyId | string | Sim | Chave de acesso AWS |
| secretAccessKey | string | Sim | Chave secreta AWS |
| region | string | Sim | Região AWS |
| operation | string | Sim | Tipo de operação (sempre "deleteItem") |
| tableName | string | Sim | Nome da tabela |
| key | object | Sim | Chave primária do item a deletar |
Exemplo 1: Cancelar Pedido Pendente
Objetivo: Demonstrar deleção segura com validação prévia de status.
JSON para Importar
{
"name": "Cancelar Pedido - Delete Seguro",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 250 },
"data": { "label": "Início" }
},
{
"id": "message_1",
"type": "message",
"position": { "x": 250, "y": 250 },
"data": {
"label": "Boas-vindas",
"parameters": {
"message": "🗑️ Cancelamento de Pedido\n\nVocê pode cancelar pedidos que ainda não foram processados."
}
}
},
{
"id": "input_1",
"type": "input",
"position": { "x": 400, "y": 250 },
"data": {
"label": "Order ID",
"parameters": {
"message": "Digite o ID do pedido para cancelar:",
"variableName": "order_id"
}
}
},
{
"id": "dynamodb_1",
"type": "dynamodb_get",
"position": { "x": 550, "y": 250 },
"data": {
"label": "Buscar Pedido",
"parameters": {
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"region": "sa-east-1",
"operation": "getItem",
"tableName": "Pedidos",
"key": {
"orderId": "{{order_id}}"
}
}
}
},
{
"id": "condition_1",
"type": "condition",
"position": { "x": 700, "y": 250 },
"data": {
"label": "Existe?",
"parameters": {
"variable": "{{dynamodb_1.item}}",
"operator": "exists"
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 850, "y": 200 },
"data": {
"label": "Detalhes",
"parameters": {
"message": "📦 Detalhes do Pedido:\n\n🆔 ID: {{dynamodb_1.item.orderId}}\n💰 Valor: R$ {{dynamodb_1.item.valor}}\n📊 Status: {{dynamodb_1.item.status}}\n📅 Data: {{dynamodb_1.item.data}}\n\n⚠️ Confirmar cancelamento?\nDigite SIM para confirmar:"
}
}
},
{
"id": "input_2",
"type": "input",
"position": { "x": 1000, "y": 200 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "Digite SIM:",
"variableName": "confirmacao"
}
}
},
{
"id": "condition_2",
"type": "condition",
"position": { "x": 1150, "y": 200 },
"data": {
"label": "Confirmou?",
"parameters": {
"variable": "{{confirmacao}}",
"operator": "=",
"value": "SIM"
}
}
},
{
"id": "dynamodb_2",
"type": "dynamodb_delete",
"position": { "x": 1300, "y": 150 },
"data": {
"label": "Deletar Pedido",
"parameters": {
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"region": "sa-east-1",
"operation": "deleteItem",
"tableName": "Pedidos",
"key": {
"orderId": "{{order_id}}"
}
}
}
},
{
"id": "message_3",
"type": "message",
"position": { "x": 1450, "y": 150 },
"data": {
"label": "Cancelado",
"parameters": {
"message": "✅ Pedido Cancelado!\n\n🆔 ID: {{order_id}}\n💰 Valor: R$ {{dynamodb_1.item.valor}}\n\nO pedido foi removido do sistema.\n\nEm até 5 dias úteis o valor será estornado."
}
}
},
{
"id": "message_4",
"type": "message",
"position": { "x": 1300, "y": 250 },
"data": {
"label": "Não Confirmado",
"parameters": {
"message": "❌ Cancelamento não confirmado.\n\nO pedido permanece ativo."
}
}
},
{
"id": "message_5",
"type": "message",
"position": { "x": 850, "y": 300 },
"data": {
"label": "Não Encontrado",
"parameters": {
"message": "❌ Pedido não encontrado!\n\nID {{order_id}} não existe no sistema."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1450, "y": 225 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "input_1" },
{ "source": "input_1", "target": "dynamodb_1" },
{ "source": "dynamodb_1", "target": "condition_1" },
{ "source": "condition_1", "target": "message_2", "label": "true" },
{ "source": "condition_1", "target": "message_5", "label": "false" },
{ "source": "message_2", "target": "input_2" },
{ "source": "input_2", "target": "condition_2" },
{ "source": "condition_2", "target": "dynamodb_2", "label": "true" },
{ "source": "condition_2", "target": "message_4", "label": "false" },
{ "source": "dynamodb_2", "target": "message_3" },
{ "source": "message_3", "target": "end_1" },
{ "source": "message_4", "target": "end_1" },
{ "source": "message_5", "target": "end_1" }
]
}
Saída esperada:
Sistema: 🗑️ Cancelamento de Pedido
Você pode cancelar pedidos que ainda não foram processados.
Sistema: Digite o ID do pedido para cancelar:
Usuário: PED-12345
Sistema: 📦 Detalhes do Pedido:
🆔 ID: PED-12345
💰 Valor: R$ 299.90
📊 Status: pendente
📅 Data: 2025-10-10
⚠️ Confirmar cancelamento?
Digite SIM para confirmar:
Usuário: SIM
Sistema: ✅ Pedido Cancelado!
🆔 ID: PED-12345
💰 Valor: R$ 299.90
O pedido foi removido do sistema.
Em até 5 dias úteis o valor será estornado.
Exemplo 2: Excluir Conta (LGPD)
Objetivo: Demonstrar deleção de dados pessoais com dupla confirmação (compliance LGPD).
JSON para Importar
{
"name": "Excluir Conta - LGPD Compliance",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 250 },
"data": { "label": "Início" }
},
{
"id": "message_1",
"type": "message",
"position": { "x": 250, "y": 250 },
"data": {
"label": "Aviso LGPD",
"parameters": {
"message": "🔒 Exclusão de Conta (LGPD)\n\n⚠️ ATENÇÃO IMPORTANTE:\n\n• Todos os seus dados serão PERMANENTEMENTE deletados\n• Histórico, pedidos e preferências serão perdidos\n• Esta ação é IRREVERSÍVEL\n• Você tem 30 dias para solicitar reativação\n\nDeseja continuar?"
}
}
},
{
"id": "email_1",
"type": "email",
"position": { "x": 400, "y": 250 },
"data": {
"label": "Email",
"parameters": {
"message": "Digite seu email para confirmar:",
"variableName": "user_email"
}
}
},
{
"id": "dynamodb_1",
"type": "dynamodb_get",
"position": { "x": 550, "y": 250 },
"data": {
"label": "Buscar Usuário",
"parameters": {
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"region": "us-east-1",
"operation": "getItem",
"tableName": "Usuarios",
"key": {
"userId": "{{user_email}}"
}
}
}
},
{
"id": "condition_1",
"type": "condition",
"position": { "x": 700, "y": 250 },
"data": {
"label": "Usuário Existe?",
"parameters": {
"variable": "{{dynamodb_1.item}}",
"operator": "exists"
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 850, "y": 200 },
"data": {
"label": "Dados Encontrados",
"parameters": {
"message": "👤 Conta Encontrada:\n\n📧 Email: {{dynamodb_1.item.email}}\n✍️ Nome: {{dynamodb_1.item.nome}}\n📅 Membro desde: {{dynamodb_1.item.dataCadastro}}\n\n⚠️ ÚLTIMA CONFIRMAÇÃO:\n\nDigite: EXCLUIR PERMANENTEMENTE"
}
}
},
{
"id": "input_1",
"type": "input",
"position": { "x": 1000, "y": 200 },
"data": {
"label": "Confirmação Final",
"parameters": {
"message": "Digite a frase completa:",
"variableName": "confirmacao_final"
}
}
},
{
"id": "condition_2",
"type": "condition",
"position": { "x": 1150, "y": 200 },
"data": {
"label": "Confirmação Correta?",
"parameters": {
"variable": "{{confirmacao_final}}",
"operator": "=",
"value": "EXCLUIR PERMANENTEMENTE"
}
}
},
{
"id": "dynamodb_2",
"type": "dynamodb_delete",
"position": { "x": 1300, "y": 150 },
"data": {
"label": "Deletar Usuário",
"parameters": {
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"secretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"region": "us-east-1",
"operation": "deleteItem",
"tableName": "Usuarios",
"key": {
"userId": "{{user_email}}"
}
}
}
},
{
"id": "message_3",
"type": "message",
"position": { "x": 1450, "y": 150 },
"data": {
"label": "Conta Excluída",
"parameters": {
"message": "✅ Conta Excluída com Sucesso\n\n🔒 Seus dados foram permanentemente removidos conforme LGPD.\n\n📧 Email: {{user_email}}\n⏰ Data: 12/10/2025\n\nVocê tem 30 dias para solicitar reativação.\n\nAté breve! 👋"
}
}
},
{
"id": "message_4",
"type": "message",
"position": { "x": 1300, "y": 250 },
"data": {
"label": "Cancelado",
"parameters": {
"message": "❌ Exclusão cancelada.\n\nFrase de confirmação incorreta.\nSua conta permanece ativa."
}
}
},
{
"id": "message_5",
"type": "message",
"position": { "x": 850, "y": 300 },
"data": {
"label": "Email Não Encontrado",
"parameters": {
"message": "❌ Email não encontrado!\n\n{{user_email}} não está cadastrado no sistema."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1450, "y": 225 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "email_1" },
{ "source": "email_1", "target": "dynamodb_1" },
{ "source": "dynamodb_1", "target": "condition_1" },
{ "source": "condition_1", "target": "message_2", "label": "true" },
{ "source": "condition_1", "target": "message_5", "label": "false" },
{ "source": "message_2", "target": "input_1" },
{ "source": "input_1", "target": "condition_2" },
{ "source": "condition_2", "target": "dynamodb_2", "label": "true" },
{ "source": "condition_2", "target": "message_4", "label": "false" },
{ "source": "dynamodb_2", "target": "message_3" },
{ "source": "message_3", "target": "end_1" },
{ "source": "message_4", "target": "end_1" },
{ "source": "message_5", "target": "end_1" }
]
}
Saída esperada:
Sistema: 🔒 Exclusão de Conta (LGPD)
⚠️ ATENÇÃO IMPORTANTE:
• Todos os seus dados serão PERMANENTEMENTE deletados
• Histórico, pedidos e preferências serão perdidos
• Esta ação é IRREVERSÍVEL
• Você tem 30 dias para solicitar reativação
Deseja continuar?
Sistema: Digite seu email para confirmar:
Usuário: jose@example.com
Sistema: 👤 Conta Encontrada:
📧 Email: jose@example.com
✍️ Nome: José Roberto Silva
📅 Membro desde: 2025-01-15
⚠️ ÚLTIMA CONFIRMAÇÃO:
Digite: EXCLUIR PERMANENTEMENTE
Usuário: EXCLUIR PERMANENTEMENTE
Sistema: ✅ Conta Excluída com Sucesso
🔒 Seus dados foram permanentemente removidos conforme LGPD.
📧 Email: jose@example.com
⏰ Data: 12/10/2025
Você tem 30 dias para solicitar reativação.
Até breve! 👋
Resposta do Node
{
"success": true,
"message": "Item deleted successfully"
}
Boas Práticas
✅ SIM:
- SEMPRE validar se item existe antes de deletar (GET primeiro)
- Implementar dupla confirmação para deleções críticas
- Considerar soft delete (UPDATE status ao invés de DELETE)
- Registrar log de quem deletou e quando (auditoria)
- Usar ConditionExpression para deletar apenas em condições específicas
- Fazer backup antes de deleções em massa
❌ NÃO:
- Deletar sem confirmação do usuário
- Fazer delete em loop (use BatchWriteItem)
- Deletar dados sem verificar dependências
- Esquecer de deletar dados relacionados (órfãos)
- Permitir delete de items críticos sem autenticação forte
- Deletar sem possibilidade de recuperação (considere soft delete)
Dicas
💡 Dica 1: Para a maioria dos casos, soft delete é melhor: UPDATE status = 'deleted' ao invés de DELETE. Mantém histórico e permite recuperação.
💡 Dica 2: DELETE não falha se item não existe! Sempre retorna sucesso. Faça GET primeiro se precisar confirmar existência.
💡 Dica 3: Use ConditionExpression para delete seguro: attribute_exists(id) AND #status = :pending garante que só deleta se item existe e tem status correto.
💡 Dica 4: Para LGPD/GDPR, documente todas as deleções: quem solicitou, quando, IP, etc. Crie tabela de audit log.
💡 Dica 5: DELETE é permanente e imediato. Para dados importantes, implemente período de "quarentena" (30 dias) antes da deleção real.
Próximo Node
→ DYNAMODB_PUT - Inserir item ao invés de deletar → DYNAMODB_UPDATE - Soft delete com UPDATE → DYNAMODB_GET - Verificar item antes de deletar