Корпоративное веб-приложение для общения с поддержкой приватных и групповых чатов, гибкой ролевой модели, безопасной аутентификацией и WebSocket-уведомлениями.
AppChat предназначен для обмена сообщениями между пользователями внутри организации. Поддерживаются роли, права, локализация, журналирование изменений и работа в реальном времени через WebSocket.
- Java 17, Spring Boot
- Spring Security (JWT)
- STOMP/WebSocket + SockJS
- Liquibase
- JPA (Hibernate)
- PostgreSQL
- OpenAPI (SpringDoc)
- Lombok, MapStruct
- Passay (валидация паролей)
- i18n (русский, английский)
- SMTP Email (Gmail)
- React + Vite (фронтенд)
- Java 17
- PostgreSQL 14+
- Gradle 8+
- SMTP-учётные данные
- Порты:
8080(HTTP),5432(PostgreSQL),3000(frontend)
Пример .env:
SPRING_DATASOURCE_URL=jdbc:postgresql://localhost:5432/appchat
SPRING_DATASOURCE_USERNAME=admin
SPRING_DATASOURCE_PASSWORD=secret
SPRING_MAIL_USERNAME=youremail@gmail.com
SPRING_MAIL_PASSWORD=emailpassword
APP_JWT_SECRETKEY=your_secure_key
⚠️ Для Gmail может потребоваться включить "менее безопасные приложения" или использовать App Password.
- REST API: пользователи, роли, чаты, сообщения, права
- WebSocket API: сообщения, печать, прочтение, изменение темы
- Сервисный слой с транзакциями
- Журналирование действий (
change_log,entity_info) - Ролевая модель и
ExtendedPermissionType - Отдельный React frontend (
frontend/)
- JWT + Refresh токены
- Фильтры безопасности
- Поддержка
CLIENTиWORKER - Индивидуальные расширенные права пользователя
- Приватные и групповые чаты
- Администраторы чатов
- Темы, иконки, уведомления
- Поддержка reply, read-status
- Уведомления через WebSocket
[User] ↔ [Role] (ManyToMany)
[Role] ↔ [Permission] (ManyToMany)
[Chat] → [ChatMember] → [User] (ManyToMany через ассоциацию)
[Chat] → [Message] (OneToMany)
- Конфигурация:
db/changelog/db.changelog-master.yaml - Версионированные миграции
- Начальные данные: роли, права, администратор
Применение миграций:
./gradlew liquibaseUpdate- Языки: русский, английский
- Язык определяется заголовком
Accept-Language - Файлы:
messages_ru.properties,messages_en.properties
Добавление языка:
- Добавить
messages_XX.propertiesвresources/messages - Перезапустить приложение
./gradlew test./gradlew bootRunС переменными окружения:
SPRING_DATASOURCE_URL=... SPRING_DATASOURCE_USERNAME=... SPRING_DATASOURCE_PASSWORD=... SPRING_MAIL_USERNAME=... SPRING_MAIL_PASSWORD=... APP_JWT_SECRETKEY=... ./gradlew bootRundocker-compose up --buildСтруктура:
backend/— Spring Boot приложениеfrontend/— React-приложениеpostgres— база данных PostgreSQL
Примерный список портов:
8080— backend API3000— frontend5432— PostgreSQL
- Swagger UI: http://localhost:8080/swagger-ui.html
- Frontend UI: http://localhost:3000/
- Администратор по умолчанию:
- Email:
testtest@gmail.test - Пароль:
password
- Email:
- Endpoint:
/ws-chat - Заголовок:
Authorization: Bearer <token> - Топики:
/topic/messages/{chatId}/user/queue/typing/socket/app
Пример подписки:
stompClient.subscribe('/topic/messages/123', (message) => {
console.log('New message:', JSON.parse(message.body));
});- Swagger UI:
http://localhost:8080/swagger-ui.html - Авторизация через JWT
- Группировка:
app-chat-api
Проект распространяется по двойной лицензии:
- GNU GPLv3 — свободно для open-source и некоммерческого использования
- Коммерческая лицензия — для коммерческого применения, включения в проприетарные продукты или использования вне условий GPL
📩 По вопросам коммерческого использования и получения лицензии — пишите на hello@madbrains.ru
Подробнее — см. файлы LICENSE и COMMERCIAL-LICENSE.md

