Skip to content

Low-code no Jestor

O low-code do Jestor permite escrever pequenos scripts em Python que rodam automaticamente quando algo acontece no sistema. Um script pode reagir à gravação de um registro, a um clique em botão, a um webhook enviado por um sistema externo ou a uma rotina executada sem nenhum evento específico.

Esta seção documenta as funções que já estão em produção neste projeto, principalmente a integração com a plataforma de reservas Stays, e os cálculos financeiros por apartamento.

Cada script é empacotado pelo Jestor dentro de uma função serverless (AWS Lambda). Na prática, isso significa:

  • Variáveis do registro não ficam no escopo global. Dados como event, params ou recordData são injetados no momento da execução, então checar 'event' in globals() retorna sempre False.
  • Alguns objetos já vêm prontos, sem import: jestor, Filter, Operators, stopCodeExecution, showMessage, Type, além de json, re, os, time, base64, hashlib e hmac.
  • Evite bibliotecas fora da biblioteca padrão do Python (e também traceback). Elas podem fazer o container falhar na inicialização. Por isso os scripts deste projeto usam requests apenas quando necessário, e vale verificar essa dependência antes de publicar uma nova função.
  • Há um tempo máximo de execução. Esperas longas (time.sleep) ou muitas chamadas em sequência podem estourar o limite e gerar erro 422, como observado em produção.

O tipo define de onde vêm os dados e o que o script pode fazer.

Tipo Quando roda Onde ficam os dados Exemplos neste projeto
Before Save / Before Update Antes de gravar o registro, de forma síncrona event['current_data'], event['before_save'] Nenhum
After Save / After Update Depois de gravar, em segundo plano event['after_save'], jestor.table().update() Nenhum
Função (botão) Quando o usuário clica em um botão Variável recordData Sincronização manual de reservas, Resumo mensal de pagamentos
Webhook Quando um sistema externo envia uma requisição Variável params com action e payload Integração Stays, Pré-reserva Stays
Rotina Sem payload de evento, por agendamento ou execução direta Apenas o SDK (jestor) Sincronização semanal, Bloqueios ativos, Cálculo de rendimentos, Limpeza de pagamentos antigos

Os scripts de webhook começam verificando a ação recebida e depois trabalham com o payload:

if params["action"] in ("reservation.created", "reservation.modified"):
payload = params["payload"]
if payload["type"] == "booked":
# tratar a reserva confirmada
...

Os valores possíveis de type vindos da Stays são reserved (pré-reserva), booked (reserva confirmada), canceled, blocked e maintenance.

  • Slugs de tabela em constantes. Cada script declara no topo as tabelas que usa, como tab_reserva = "4t52yq48kfmfe5lcnhmgv". Se uma tabela for recriada no Jestor, o slug muda e o script precisa ser atualizado.
  • Chave primária com prefixo. A chave é sempre id_ seguido do slug da tabela, por exemplo id_pfziere4qayrb1ui_4bv4. Tabelas com slug iniciado por _ geram chave com dois underlines.
  • Relacionamentos guardam só o ID. Um campo conectado (N:1) devolve apenas o identificador do registro relacionado. Para ler outros dados dele, faça um get() na tabela de destino.
  • ID externo. O identificador da Stays fica no campo id_externo, e é por ele que os scripts evitam duplicar registros.