Pular para o conteúdo principal

API

A API do ChurchApps é um monólito modular -- um único codebase que serve seis módulos de dados, cada um com seu próprio banco de dados. Esta arquitetura oferece os benefícios organizacionais dos microsserviços (limites claros, armazenamentos de dados independentes) com a simplicidade operacional de uma única implantação.

Módulos

MóduloPropósito
MembershipPessoas, grupos, casas, permissões
AttendanceServiços, sessões, registros de presença
ContentPáginas, seções, elementos, streaming
GivingDoações, fundos, processamento de pagamento
MessagingConversas, notificações, email
DoingTarefas, planos, atribuições

Pilha Tecnológica

  • Runtime: Node.js 22.x com TypeScript (ES modules)
  • Framework: Express
  • Injeção de Dependência: Inversify (roteamento baseado em decorador)
  • Banco de Dados: MySQL -- um banco de dados por módulo, cada um com seu próprio pool de conexão
  • Autenticação: Autenticação baseada em JWT via CustomAuthProvider
  • Implantação: AWS Lambda via Serverless Framework v3

Portas

ProtocoloPortaDescrição
HTTP8084API REST Principal
WebSocket8087Conexões de socket em tempo real

Funções Lambda

Quando implantado na AWS, a API é executada como seis funções Lambda:

  • web -- Processa todas as solicitações HTTP
  • socket -- Gerencia conexões WebSocket
  • timer15Min -- Executa a cada 30 minutos para notificações por email (o nome é histórico)
  • timerMidnight -- Executa diariamente para emails resumidos e tarefas de manutenção
  • timerScheduledTasks -- Executa diariamente para automações vencidas e processamento de fluxo de trabalho atrasado
  • timerWebhooks -- Executa a cada minuto para entregar webhooks de saída enfileirados

Bibliotecas Compartilhadas

A API depende de dois pacotes ChurchApps compartilhados:

  • @churchapps/helpers -- Utilitários base (DateHelper, ApiHelper, etc.)
  • @churchapps/apihelper -- Utilitários de servidor Express, incluindo autenticação, auxiliares de banco de dados e integrações AWS
Info

A API usa ES modules ("type": "module" em package.json). Certifique-se de que suas importações usam a sintaxe de módulos ES.

Nesta Seção