Skip to content

wybin4/myhome-backend

Repository files navigation

MyHome Backend - Платформа автоматизации ЖКХ

Сервис для автоматизации взаимодействия между собственниками жилья и управляющими компаниями. Обеспечивает прозрачность начислений, удобство расчетов и контроль над расходами.

О проекте

Основные возможности:

  • Сдача показаний и оплата ЕПД
  • Управление обращениями и диспетчерская
  • Оповещение о событиях
  • Управление начислениями и биллинг
  • Чат между жильцами и УК

Архитектура

Проект реализован на микросервисной архитектуре в монорепозитории Nx. Каждый сервис выполняет свою бизнес-задачу. Взаимодействие между сервисами осуществляется через брокер сообщений RabbitMQ.

Принципы

  • Database per Service - каждому сервису выделена собственная БД (MySQL или MongoDB)
  • API Gateway - единая точка входа, контроль доступа
  • CQRS - разделение команд и запросов внутри сервисов
  • Event-driven - асинхронное взаимодействие через RabbitMQ

Состав микросервисов

Сервис Назначение База данных
api API Gateway, авторизация, маршрутизация, WebSocket -
account Пользователи, роли, профили, JWT-авторизация MySQL
reference Справочники (дома, квартиры, абоненты, счетчики, тарифы, нормативы) MySQL
event Обращения, голосования, уведомления MongoDB
email Отправка писем (регистрация, создание пароля) -
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

About

<<backend>> Микросервисная платформа для ЖКХ: 10 микросервисов в монорепозитории, event-driven архитектура

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages