Перейти к основному содержимому

API

ChurchApps API — это модульный монолит — единая кодовая база, которая обслуживает шесть модулей данных, каждый с собственной базой данных. Эта архитектура дает вам организационные преимущества микросервисов (четкие границы, независимые хранилища данных) с операционной простотой единого развертывания.

Модули​

МодульНазначение
MembershipЛюди, группы, домохозяйства, разрешения
AttendanceУслуги, сеансы, записи регистрации
ContentСтраницы, разделы, элементы, потоковая трансляция
GivingПожертвования, фонды, обработка платежей
MessagingБеседы, уведомления, электронная почта
DoingЗадачи, планы, назначения

Технический стек​

  • Среда выполнения: Node.js 22.x с TypeScript (модули ES)
  • Фреймворк: Express
  • Внедрение зависимостей: Inversify (маршрутизация на основе декораторов)
  • База данных: MySQL — одна база данных для каждого модуля с собственным пулом соединений
  • Аутентификация: Аутентификация на основе JWT через CustomAuthProvider
  • Развертывание: AWS Lambda через Serverless Framework v3

Порты​

ПротоколПортОписание
HTTP8084Основной REST API
WebSocket8087Подключения сокетов в реальном времени

Lambda-функции​

При развертывании в AWS API работает как шесть Lambda-функций:

  • web — обрабатывает все HTTP-запросы
  • socket — управляет подключениями WebSocket
  • timer15Min — запускается каждые 30 минут для уведомлений по электронной почте (имя имеет историческое значение)
  • timerMidnight — запускается ежедневно для дайджестов электронной почты и задач обслуживания
  • timerScheduledTasks — запускается ежедневно для выполнения автоматизаций и обработки просроченных рабочих процессов
  • timerWebhooks — запускается каждую минуту для доставки очередных исходящих вебхуков

Общие библиотеки​

API зависит от двух общих пакетов ChurchApps:

  • @churchapps/helpers — базовые утилиты (DateHelper, ApiHelper и т. д.)
  • @churchapps/apihelper — утилиты Express-сервера, включая аутентификацию, помощников баз данных и интеграции AWS
Информация

API использует модули ES ("type": "module" в package.json). Убедитесь, что ваши импорты используют синтаксис модулей ES.

В этом разделе​