SUPABASE_UPDATE - Atualizar Registro no Supabase
O que é este Node?
O SUPABASE_UPDATE é o node responsável por atualizar um registro existente em uma tabela Supabase. Ele modifica campos específicos de um registro identificado pelo ID e retorna o registro atualizado.
Por que este Node existe?
Dados mudam constantemente em aplicações reais. O SUPABASE_UPDATE existe para:
- Atualizar informações: Modificar dados desatualizados de usuários, pedidos, produtos, etc.
- Alterar status: Mudar status de pedidos (pendente → confirmado), usuários (ativo → inativo), etc.
- Incrementar valores: Atualizar contadores, pontuações, saldos
- Corrigir dados: Permitir que usuários editem informações cadastradas
- Registrar mudanças: Atualizar timestamps, logs de última atividade
Como funciona internamente?
Quando o SUPABASE_UPDATE é executado, o sistema:
- Valida configuração: Verifica se host e serviceRole do Supabase estão configurados
- Cria cliente: Inicializa conexão com Supabase usando credenciais fornecidas
- Substitui variáveis no ID: Processa rowId substituindo variáveis do contexto (ex:
{{userId}}) - Substitui variáveis nos updates: Processa objeto
updatessubstituindo variáveis (ex:{{novoNome}}) - Executa UPDATE: Atualiza registro na tabela WHERE id = rowId com dados de updates
- Se não encontrado: Retorna erro indicando que registro não existe
- Se sucesso: Retorna registro completo após atualização
- Salva em variável: Armazena registro atualizado na variável especificada
Código interno (supabase.executor.ts:147-169):
private async updateRow(
supabase: SupabaseClient,
table: string,
rowId: string,
updates: Record<string, any>,
context: ExecutionContext,
): Promise<any> {
const replacedId = this.replaceVariables(rowId, context.variables);
const replacedUpdates = this.replaceObjectVariables(updates, context.variables);
const { data, error } = await supabase
.from(table)
.update(replacedUpdates)
.eq('id', replacedId)
.select()
.single();
if (error) {
throw new Error(`Supabase update error: ${error.message}`);
}
return data;
}
Quando você DEVE usar este Node?
Use SUPABASE_UPDATE sempre que precisar de modificar um registro existente:
Casos de uso
- Atualizar status de pedido: "Mudar pedido de 'pendente' para 'enviado'"
- Editar perfil de usuário: "Permitir que cliente atualize nome, email, telefone"
- Marcar como lido: "Atualizar flag de mensagem/notificação para 'lida'"
- Incrementar contador: "Adicionar +1 em quantidade de acessos do usuário"
- Registrar última atividade: "Atualizar campo last_seen com timestamp atual"
Quando NÃO usar SUPABASE_UPDATE
- Criar novo registro: Use SUPABASE_INSERT para inserir dados
- Deletar registro: Use SUPABASE_DELETE para remover dados
- Atualizar múltiplos registros: Atualmente suporta apenas 1 registro por execução
Parâmetros Detalhados
operation (string, obrigatório)
O que é: Tipo da operação Supabase a ser executada. Para este node, sempre deve ser "update".
Padrão: Nenhum (obrigatório)
Flow completo para testar:
{
"name": "Teste Supabase Update - Operation",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "supabase_1",
"type": "supabase",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Atualizar Status",
"operation": "update",
"config": {
"host": "https://seu-projeto.supabase.co",
"serviceRole": "sua-service-role-key"
},
"table": "orders",
"rowId": "uuid-do-pedido",
"updates": {
"status": "confirmed"
},
"responseVariable": "pedidoAtualizado"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "Pedido atualizado! Novo status: {{pedidoAtualizado.status}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "supabase_1" },
{ "source": "supabase_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Configure suas credenciais e um ID válido. O sistema deve atualizar o status do pedido.
config (object, obrigatório)
O que é: Objeto contendo as credenciais de conexão com Supabase (host e serviceRole).
Padrão: Nenhum (obrigatório)
Flow completo para testar:
{
"name": "Teste Supabase Update - Config",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "supabase_1",
"type": "supabase",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Testar Update",
"operation": "update",
"config": {
"host": "https://xyzcompany.supabase.co",
"serviceRole": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
},
"table": "users",
"rowId": "user-123",
"updates": {
"last_seen": "2025-01-15T10:00:00Z"
},
"responseVariable": "usuarioAtualizado"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Sucesso",
"parameters": {
"message": "Última visita atualizada: {{usuarioAtualizado.last_seen}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "supabase_1" },
{ "source": "supabase_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Use suas credenciais reais do Supabase. Se a configuração estiver correta, deve atualizar o usuário.
table (string, obrigatório)
O que é: Nome da tabela no Supabase onde atualizar o registro.
Padrão: Nenhum (obrigatório)
Flow completo para testar:
{
"name": "Teste Supabase Update - Table",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "supabase_1",
"type": "supabase",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Atualizar Produto",
"operation": "update",
"config": {
"host": "https://seu-projeto.supabase.co",
"serviceRole": "sua-service-role-key"
},
"table": "products",
"rowId": "prod-123",
"updates": {
"stock": 50,
"available": true
},
"responseVariable": "produtoAtualizado"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "Estoque atualizado: {{produtoAtualizado.stock}} unidades"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "supabase_1" },
{ "source": "supabase_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Use uma tabela existente no seu banco Supabase. O sistema deve atualizar o produto.
rowId (string, obrigatório)
O que é: ID do registro que você deseja atualizar. Aceita variáveis (ex: {{userId}}).
Padrão: Nenhum (obrigatório)
Flow completo para testar:
{
"name": "Teste Supabase Update - RowId Dinâmico",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "input_1",
"type": "input",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Pedir ID",
"parameters": {
"message": "Digite o ID do pedido que deseja atualizar:",
"variableName": "pedidoId"
}
}
},
{
"id": "input_2",
"type": "input",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Novo Status",
"parameters": {
"message": "Digite o novo status (pending, confirmed, shipped, delivered):",
"variableName": "novoStatus"
}
}
},
{
"id": "supabase_1",
"type": "supabase",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Atualizar Pedido",
"operation": "update",
"config": {
"host": "https://seu-projeto.supabase.co",
"serviceRole": "sua-service-role-key"
},
"table": "orders",
"rowId": "{{pedidoId}}",
"updates": {
"status": "{{novoStatus}}",
"updated_at": "{{_timestamp}}"
},
"responseVariable": "pedido"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Sucesso",
"parameters": {
"message": "Pedido {{pedido.id}} atualizado para: {{pedido.status}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1100, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_1" },
{ "source": "input_1", "target": "input_2" },
{ "source": "input_2", "target": "supabase_1" },
{ "source": "supabase_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Digite um ID de pedido válido e novo status. O sistema deve atualizar o pedido.
updates (object, obrigatório)
O que é: Objeto contendo os campos a serem atualizados. Cada chave é um campo da tabela e cada valor é o novo valor. Aceita variáveis.
Padrão: Nenhum (obrigatório)
Flow completo para testar:
{
"name": "Teste Supabase Update - Updates Múltiplos",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "input_1",
"type": "input",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Novo Nome",
"parameters": {
"message": "Digite seu novo nome:",
"variableName": "novoNome"
}
}
},
{
"id": "email_1",
"type": "email",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Novo Email",
"parameters": {
"message": "Digite seu novo email:",
"variableName": "novoEmail"
}
}
},
{
"id": "supabase_1",
"type": "supabase",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Atualizar Perfil",
"operation": "update",
"config": {
"host": "https://seu-projeto.supabase.co",
"serviceRole": "sua-service-role-key"
},
"table": "users",
"rowId": "user-123",
"updates": {
"name": "{{novoNome}}",
"email": "{{novoEmail}}",
"updated_at": "{{_timestamp}}"
},
"responseVariable": "usuarioAtualizado"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Confirmar",
"parameters": {
"message": "Perfil atualizado!\n\nNome: {{usuarioAtualizado.name}}\nEmail: {{usuarioAtualizado.email}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1100, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_1" },
{ "source": "input_1", "target": "email_1" },
{ "source": "email_1", "target": "supabase_1" },
{ "source": "supabase_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Digite novo nome e email. O sistema deve atualizar ambos os campos do usuário.
responseVariable (string, obrigatório)
O que é: Nome da variável onde o registro atualizado será armazenado para uso posterior no fluxo.
Padrão: Nenhum (obrigatório)
Flow completo para testar:
{
"name": "Teste Supabase Update - ResponseVariable",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "supabase_1",
"type": "supabase",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Marcar como Lido",
"operation": "update",
"config": {
"host": "https://seu-projeto.supabase.co",
"serviceRole": "sua-service-role-key"
},
"table": "notifications",
"rowId": "notif-123",
"updates": {
"read": true,
"read_at": "{{_timestamp}}"
},
"responseVariable": "notificacao"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Status",
"parameters": {
"message": "Notificação marcada como lida"
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Detalhes",
"parameters": {
"message": "Título: {{notificacao.title}}\nLida em: {{notificacao.read_at}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "supabase_1" },
{ "source": "supabase_1", "target": "message_1" },
{ "source": "message_1", "target": "message_2" },
{ "source": "message_2", "target": "end_1" }
]
}
Teste: O registro atualizado deve estar acessível em múltiplos nodes subsequentes.
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| operation | string | Sim | Tipo de operação: "update" |
| config | object | Sim | Credenciais Supabase (host, serviceRole) |
| config.host | string | Sim | URL do projeto Supabase |
| config.serviceRole | string | Sim | Service Role Key do Supabase |
| table | string | Sim | Nome da tabela |
| rowId | string | Sim | ID do registro a atualizar |
| updates | object | Sim | Campos a atualizar (campo: novo_valor) |
| responseVariable | string | Sim | Nome da variável para armazenar registro atualizado |
Exemplo 1: Atualizar Status de Pedido
Objetivo: Permitir equipe mudar status de pedidos conforme progresso (pendente → confirmado → enviado → entregue).
JSON para Importar
{
"name": "Atualizar Status de Pedido - Supabase Update",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "message_1",
"type": "message",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Menu",
"parameters": {
"message": "Sistema de Atualização de Pedidos"
}
}
},
{
"id": "input_1",
"type": "input",
"position": { "x": 500, "y": 100 },
"data": {
"label": "ID Pedido",
"parameters": {
"message": "Digite o número do pedido:",
"variableName": "orderId"
}
}
},
{
"id": "switch_1",
"type": "switch",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Escolher Ação",
"parameters": {
"message": "Escolha o novo status:\n\n1 - Confirmar Pedido\n2 - Marcar como Enviado\n3 - Marcar como Entregue\n4 - Cancelar Pedido",
"variableName": "opcao",
"cases": {
"1": "confirmar",
"2": "enviar",
"3": "entregar",
"4": "cancelar"
}
}
}
},
{
"id": "supabase_1",
"type": "supabase",
"position": { "x": 900, "y": 50 },
"data": {
"label": "Confirmar",
"operation": "update",
"config": {
"host": "https://empresa.supabase.co",
"serviceRole": "service-role-key"
},
"table": "orders",
"rowId": "{{orderId}}",
"updates": {
"status": "confirmed",
"confirmed_at": "{{_timestamp}}"
},
"responseVariable": "pedido"
}
},
{
"id": "supabase_2",
"type": "supabase",
"position": { "x": 900, "y": 150 },
"data": {
"label": "Enviar",
"operation": "update",
"config": {
"host": "https://empresa.supabase.co",
"serviceRole": "service-role-key"
},
"table": "orders",
"rowId": "{{orderId}}",
"updates": {
"status": "shipped",
"shipped_at": "{{_timestamp}}"
},
"responseVariable": "pedido"
}
},
{
"id": "supabase_3",
"type": "supabase",
"position": { "x": 900, "y": 250 },
"data": {
"label": "Entregar",
"operation": "update",
"config": {
"host": "https://empresa.supabase.co",
"serviceRole": "service-role-key"
},
"table": "orders",
"rowId": "{{orderId}}",
"updates": {
"status": "delivered",
"delivered_at": "{{_timestamp}}"
},
"responseVariable": "pedido"
}
},
{
"id": "supabase_4",
"type": "supabase",
"position": { "x": 900, "y": 350 },
"data": {
"label": "Cancelar",
"operation": "update",
"config": {
"host": "https://empresa.supabase.co",
"serviceRole": "service-role-key"
},
"table": "orders",
"rowId": "{{orderId}}",
"updates": {
"status": "cancelled",
"cancelled_at": "{{_timestamp}}"
},
"responseVariable": "pedido"
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 1100, "y": 200 },
"data": {
"label": "Confirmação",
"parameters": {
"message": "Pedido #{{pedido.order_number}} atualizado!\n\nStatus: {{pedido.status}}\nCliente: {{pedido.customer_name}}\nValor: R$ {{pedido.total}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1300, "y": 200 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "input_1" },
{ "source": "input_1", "target": "switch_1" },
{ "source": "switch_1", "target": "supabase_1", "label": "confirmar" },
{ "source": "switch_1", "target": "supabase_2", "label": "enviar" },
{ "source": "switch_1", "target": "supabase_3", "label": "entregar" },
{ "source": "switch_1", "target": "supabase_4", "label": "cancelar" },
{ "source": "supabase_1", "target": "message_2" },
{ "source": "supabase_2", "target": "message_2" },
{ "source": "supabase_3", "target": "message_2" },
{ "source": "supabase_4", "target": "message_2" },
{ "source": "message_2", "target": "end_1" }
]
}
Saída esperada:
Sistema: Sistema de Atualização de Pedidos
Sistema: Digite o número do pedido:
Usuário: ORD-12345
Sistema: Escolha o novo status:
1 - Confirmar Pedido
2 - Marcar como Enviado
3 - Marcar como Entregue
4 - Cancelar Pedido
Usuário: 2
Sistema: Pedido #ORD-12345 atualizado!
Status: shipped
Cliente: João Silva
Valor: R$ 299.90
Exemplo 2: Editar Perfil de Usuário
Objetivo: Permitir que usuário atualize seus dados cadastrais.
JSON para Importar
{
"name": "Editar Perfil - Supabase Update",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "message_1",
"type": "message",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Menu",
"parameters": {
"message": "Vamos atualizar seu perfil. Você pode alterar:\n\n- Nome\n- Email\n- Telefone\n- Empresa"
}
}
},
{
"id": "input_1",
"type": "input",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Novo Nome",
"parameters": {
"message": "Digite seu novo nome (ou 'pular' para manter atual):",
"variableName": "novoNome"
}
}
},
{
"id": "email_1",
"type": "email",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Novo Email",
"parameters": {
"message": "Digite seu novo email (ou 'pular'):",
"variableName": "novoEmail",
"optional": true
}
}
},
{
"id": "phone_1",
"type": "phone",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Novo Telefone",
"parameters": {
"message": "Digite seu novo telefone (ou 'pular'):",
"variableName": "novoTelefone",
"optional": true
}
}
},
{
"id": "input_2",
"type": "input",
"position": { "x": 1100, "y": 100 },
"data": {
"label": "Nova Empresa",
"parameters": {
"message": "Digite o nome da sua empresa (ou 'pular'):",
"variableName": "novaEmpresa"
}
}
},
{
"id": "supabase_1",
"type": "supabase",
"position": { "x": 1300, "y": 100 },
"data": {
"label": "Atualizar Dados",
"operation": "update",
"config": {
"host": "https://app.supabase.co",
"serviceRole": "service-role-key"
},
"table": "users",
"rowId": "{{_userId}}",
"updates": {
"name": "{{novoNome}}",
"email": "{{novoEmail}}",
"phone": "{{novoTelefone}}",
"company": "{{novaEmpresa}}",
"updated_at": "{{_timestamp}}"
},
"responseVariable": "usuarioAtualizado"
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 1500, "y": 100 },
"data": {
"label": "Confirmação",
"parameters": {
"message": "Perfil atualizado com sucesso!\n\nNome: {{usuarioAtualizado.name}}\nEmail: {{usuarioAtualizado.email}}\nTelefone: {{usuarioAtualizado.phone}}\nEmpresa: {{usuarioAtualizado.company}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "input_1" },
{ "source": "input_1", "target": "email_1" },
{ "source": "email_1", "target": "phone_1" },
{ "source": "phone_1", "target": "input_2" },
{ "source": "input_2", "target": "supabase_1" },
{ "source": "supabase_1", "target": "message_2" },
{ "source": "message_2", "target": "end_1" }
]
}
Saída esperada:
Sistema: Vamos atualizar seu perfil. Você pode alterar:
- Nome
- Email
- Telefone
- Empresa
Sistema: Digite seu novo nome (ou 'pular' para manter atual):
Usuário: Maria Santos Silva
Sistema: Digite seu novo email (ou 'pular'):
Usuário: maria.silva@newcompany.com
Sistema: Digite seu novo telefone (ou 'pular'):
Usuário: +5511988888888
Sistema: Digite o nome da sua empresa (ou 'pular'):
Usuário: New Tech Company
Sistema: Perfil atualizado com sucesso!
Nome: Maria Santos Silva
Email: maria.silva@newcompany.com
Telefone: +5511988888888
Empresa: New Tech Company
Exemplo 3: Incrementar Contador de Acessos
Objetivo: Registrar cada vez que usuário acessa o sistema incrementando contador.
JSON para Importar
{
"name": "Registrar Acesso - Supabase Update",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "variable_1",
"type": "variable",
"position": { "x": 300, "y": 100 },
"data": {
"label": "User ID",
"parameters": {
"name": "currentUserId",
"value": "usr_12345"
}
}
},
{
"id": "supabase_get",
"type": "supabase",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Buscar Usuário",
"operation": "getRow",
"config": {
"host": "https://app.supabase.co",
"serviceRole": "service-role-key"
},
"table": "users",
"rowId": "{{currentUserId}}",
"responseVariable": "usuario"
}
},
{
"id": "calculator_1",
"type": "calculator",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Incrementar",
"parameters": {
"expression": "{{usuario.access_count}} + 1",
"variableName": "novoContador"
}
}
},
{
"id": "supabase_update",
"type": "supabase",
"position": { "x": 900, "y": 100 },
"data": {
"label": "Atualizar Acesso",
"operation": "update",
"config": {
"host": "https://app.supabase.co",
"serviceRole": "service-role-key"
},
"table": "users",
"rowId": "{{currentUserId}}",
"updates": {
"access_count": "{{novoContador}}",
"last_access": "{{_timestamp}}"
},
"responseVariable": "usuarioAtualizado"
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 1100, "y": 100 },
"data": {
"label": "Boas-vindas",
"parameters": {
"message": "Bem-vindo de volta, {{usuarioAtualizado.name}}!\n\nEste é seu acesso número {{usuarioAtualizado.access_count}}."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1300, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "variable_1" },
{ "source": "variable_1", "target": "supabase_get" },
{ "source": "supabase_get", "target": "calculator_1" },
{ "source": "calculator_1", "target": "supabase_update" },
{ "source": "supabase_update", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Saída esperada:
Sistema: Bem-vindo de volta, João Silva!
Este é seu acesso número 47.
Resposta do Node
{
"id": "uuid-do-registro",
"name": "João Silva",
"email": "joao.novo@example.com",
"phone": "+5511999999999",
"status": "active",
"created_at": "2025-01-10T10:30:00.000Z",
"updated_at": "2025-01-15T14:22:00.000Z"
}
Boas Práticas
✅ SIM:
- Use variáveis para IDs e valores dinâmicos (
{{userId}},{{novoNome}}) - Sempre atualize campo
updated_atquando modificar registro - Valide dados antes de atualizar (use nodes de validação)
- Busque registro antes de atualizar para verificar valores atuais
- Use responseVariable para confirmar atualização bem-sucedida
❌ NÃO:
- Não assuma que update sempre funciona (trate erros)
- Não atualize sem verificar se registro existe
- Não sobrescreva dados importantes sem confirmação do usuário
- Não exponha Service Role Key em código front-end
- Não use valores hardcoded quando deveria ser dinâmico
Dicas
💡 Dica 1: O Supabase atualiza automaticamente campo updated_at se configurado com trigger no banco. Mas é boa prática incluir explicitamente no updates.
💡 Dica 2: Para incrementar valores numéricos, use CALCULATOR para somar valor atual + incremento antes de atualizar.
💡 Dica 3: Se update falhar (registro não existe), o erro será retornado. Use CONDITION após update para verificar sucesso.
💡 Dica 4: Apenas campos incluídos em updates serão modificados. Outros campos permanecem inalterados.
💡 Dica 5: Para atualizações condicionais complexas (ex: WHERE status = 'pending'), use RPC functions do Supabase ao invés de update simples.
Próximos Nodes
→ SUPABASE_GETROW - Buscar registro específico por ID → SUPABASE_GETALL - Buscar múltiplos registros com filtros → SUPABASE_INSERT - Inserir novo registro na tabela → SUPABASE_DELETE - Deletar registro da tabela