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

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.

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