Сервис для автоматизации взаимодействия между собственниками жилья и управляющими компаниями. Обеспечивает прозрачность начислений, удобство расчетов и контроль над расходами.
Основные возможности:
- Сдача показаний и оплата ЕПД
- Управление обращениями и диспетчерская
- Оповещение о событиях
- Управление начислениями и биллинг
- Чат между жильцами и УК
Проект реализован на микросервисной архитектуре в монорепозитории Nx. Каждый сервис выполняет свою бизнес-задачу. Взаимодействие между сервисами осуществляется через брокер сообщений RabbitMQ.
- Database per Service - каждому сервису выделена собственная БД (MySQL или MongoDB)
- API Gateway - единая точка входа, контроль доступа
- CQRS - разделение команд и запросов внутри сервисов
- Event-driven - асинхронное взаимодействие через RabbitMQ
| Сервис | Назначение | База данных |
|---|---|---|
| api | API Gateway, авторизация, маршрутизация, WebSocket | - |
| account | Пользователи, роли, профили, JWT-авторизация | MySQL |
| reference | Справочники (дома, квартиры, абоненты, счетчики, тарифы, нормативы) | MySQL |
| event | Обращения, голосования, уведомления | MongoDB |
| Отправка писем (регистрация, создание пароля) | - | |
| chat | Чат между жильцами и УК | MongoDB |
| correction | Корректировки начислений (долги, пени, авансы) | MySQL |
| document-detail | Детали ЕПД (общедомовые нужды, коммунальные услуги) | MySQL |
| single-payment-document | Формирование ЕПД, PDF-генерация | MySQL |
| payment | Платежный шлюз, интеграция с ЮMoney | MySQL |
- Node.js + NestJS - единый фреймворк для всех сервисов
- TypeScript - типизация на всем проекте
- MySQL / MongoDB - реляционные и нереляционные данные
- TypeORM / Mongoose - работа с БД
- RabbitMQ - событийная шина
- Nx - управление монорепозиторием
- JWT + HttpOnly cookies - авторизация
- WebSocket (Socket.io) - real-time уведомления и чаты
- Jest - тестирование
- Синхронное: REST-запросы через API Gateway
- Асинхронное: RabbitMQ для событий (новые показания, оплаты, обращения)
- Real-time: WebSocket для уведомлений и чатов
- Saga pattern - формирование ЕПД с согласованным состоянием между сервисами
- Cron-задачи - автоматическое архивирование счетчиков, закрытие опросов
- Кастомная валидация - в зависимости от типа обращения
- Алгоритмы расчета - ОДН, коммунальные услуги, пеня по ключевой ставке ЦБ
- PDF-генерация - формирование ЕПД через PDFKit с кириллицей
В репозитории представлены проектные материалы:
| Документация | Ссылка |
|---|---|
| UML-диаграммы (UseCase, классов, последовательностей, компонентов) | Перейти |
| ER-модель (логическая и физическая) | Перейти |
- Node.js 20+
- Docker
- RabbitMQ, MySQL, MongoDB (поднимаются через docker-compose)
# Клонирование
git clone https://github.com/wybin4/myhome-backend.git
cd myhome-backend
# Установка зависимостей
npm install
npm install -g nx @nrwl/cli
# Настройка окружения
cp -r envs.example envs
# Отредактируйте файлы в envs/ под ваше окружение
# Запуск инфраструктуры (RabbitMQ, MySQL, MongoDB)
docker-compose -f docker-compose.infra.yml up -d
# Создание схем MySQL
# Подключитесь к MySQL и выполните:CREATE SCHEMA `account`;
CREATE SCHEMA `reference`;
CREATE SCHEMA `document_detail`;
CREATE SCHEMA `correction`;
CREATE SCHEMA `single_payment_document`;
CREATE SCHEMA `payment`;
CREATE SCHEMA `event`;# Запуск всех микросервисов
nx run-many --target=serve --all --parallel=10
# Или по отдельности
nx run api:serve:development
nx run account:serve:development
nx run reference:serve:development