Pular para conteúdo

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:

  1. Remoção Precisa: Deleta apenas o item especificado pela chave
  2. Atomicidade: Operação completa ou não acontece (não deixa dados corrompidos)
  3. Segurança: Pode usar condições para validar antes de deletar
  4. Compliance: Cumprir requisitos de LGPD/GDPR removendo dados pessoais

Como funciona internamente?

Quando o DYNAMODB_DELETE é executado, o sistema:

  1. Autentica: Valida as credenciais AWS
  2. Localiza Item: Busca o item pela chave primária
  3. Valida Condição: Se houver ConditionExpression, verifica se é verdadeira
  4. Se condição falha: Retorna erro sem deletar
  5. Se condição passa ou não existe: Remove o item permanentemente
  6. 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

  1. Cancelar pedido: "Remover pedido que ainda não foi processado"
  2. Excluir conta: "Deletar perfil de usuário que solicitou exclusão (LGPD)"
  3. Limpar sessões expiradas: "Remover tokens de sessão antigos"
  4. 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: true para 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