Ловит даже на парковке!
- Docker
- Node.js от v22
- npm от v11
Из корня прописываем
cd .\frontend\
#Установка пакетов
npm install
#Сборка
npm run build-
В корне создайте файл
.envи укажите в нем переменные окружения, шаблон находится в.env.template -
Из корневой директории прописываем:
docker compose up -d --buildГотово! Мессенджер будет доступен по адресу http://localhost
Из корня прописываем:
docker build -t messanger-backend backendЕсли хотите собирать без Docker, установите MSYS2 с комплектом mingw-w64 и пакеты mingw-w64-x86_64-libpqxx, mingw-w64-x86_64-postgresql.
Далее:
cmake -S backend -B backend/build -G "MinGW Makefiles"
mingw32-make -C backend/buildДля запуска сервера используйте backend/build/main.exe.
Из ./backend:
docker run --rm -p 18080:18080 messanger-backendперед каждым запросо надо добавить /api
POST /users— регистрация, в ответе приходит JWT.POST /auth/login— вход по email/паролю.GET /users— список пользователей (нужен заголовокAuthorization: Bearer <token>).WS /ws/chat— WebSocket-канал; сначала отправьте заголовокAuthorization: Bearer <token>.- Отправка сообщения:
{"type":"message","recipient_username":"bob","text":"привет"}(полеtypeможно опустить — по умолчанию"message"). - История по username:
{"type":"history_with_user","peer_username":"bob","count":50,"before_id":123}. - История по chat_id:
{"type":"history_by_chat","chat_id":42,"count":50,"before_id":123}. - Список чатов:
{"type":"list_chats","count":50,"offset":0}. - Поиск пользователя по username:
{"type":"user_lookup","username":"bob"}. - Поиск по имени:
{"type":"user_search","name":"Али", "count":10}.
- Отправка сообщения:
GET /chats— получить список своих диалогов (?count=50&offset=0), сортировка по времени последнего сообщения.GET /chats/with/<username>/messages?count=50&before_id=123— получить историю диалога с пользователем, также с асимптотикойO(log M + N).GET /chats/<chat_id>/messages?count=50&before_id=123— быстро получить последниеcountсообщений конкретного чата. Благодаря индексам по(chat_id, time DESC)чтение работает с асимптотикойO(log M + N).GET /users/lookup/<username>— точный поиск пользователя.GET /users/search?name=Али&count=10— эластичный поиск поname.
Лицензия MIT (c) Solovev Evgeniy Stanislavovich 2025