Pular para conteúdo

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:

  1. Atualizar informações: Modificar dados desatualizados de usuários, pedidos, produtos, etc.
  2. Alterar status: Mudar status de pedidos (pendente → confirmado), usuários (ativo → inativo), etc.
  3. Incrementar valores: Atualizar contadores, pontuações, saldos
  4. Corrigir dados: Permitir que usuários editem informações cadastradas
  5. Registrar mudanças: Atualizar timestamps, logs de última atividade

Como funciona internamente?

Quando o SUPABASE_UPDATE é executado, o sistema:

  1. Valida configuração: Verifica se host e serviceRole do Supabase estão configurados
  2. Cria cliente: Inicializa conexão com Supabase usando credenciais fornecidas
  3. Substitui variáveis no ID: Processa rowId substituindo variáveis do contexto (ex: {{userId}})
  4. Substitui variáveis nos updates: Processa objeto updates substituindo variáveis (ex: {{novoNome}})
  5. Executa UPDATE: Atualiza registro na tabela WHERE id = rowId com dados de updates
  6. Se não encontrado: Retorna erro indicando que registro não existe
  7. Se sucesso: Retorna registro completo após atualização
  8. 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

  1. Atualizar status de pedido: "Mudar pedido de 'pendente' para 'enviado'"
  2. Editar perfil de usuário: "Permitir que cliente atualize nome, email, telefone"
  3. Marcar como lido: "Atualizar flag de mensagem/notificação para 'lida'"
  4. Incrementar contador: "Adicionar +1 em quantidade de acessos do usuário"
  5. 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_at quando 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