Skip to content

Персональный ассистент в поиске первой работы 🤖

Notifications You must be signed in to change notification settings

RomanBatrakov/java-job-assist-telegram-bot

Repository files navigation

Version Telegram LinkedIn

Logo

Телеграм бот - персональный помощник для начинающего java разработчика.
Документация » (в разработке)

Java job assist Telegram bot

Оглавление
  1. Описание проекта
  2. Стек
  3. Быстрый старт
  4. Структура проекта
  5. Переменные среды
  6. Планы по развитию

Описание проекта

Функиональность бота:

  • Показывает релевантные отфильтрованные вакансии java разработчика до уровня middle
    • Выборка вакансий происходит за последние 2 суток c сайтов: hh.ru, career.habr.com, proglib.io
    • Можно добавить вакансию в избранные или скрыть нежелательные
    • По команде /favourites выводится список избранных вакансий
  • С помощью системы карточек (вопрос/ответ) позволяет повторить основные теоретические вопросы, которые могут встретиться на собеседовании
    • Карточки разделены по темам
    • Вопросы генерируются в случайном порядке в рамках заданной темы
    • Можно скрыть нежелательные вопросы
  • Можно загружать фото и документы размером не более 5МБ (Необходимо зарегистрироваться)
  • При команде /exit полностью удаляет пользователя и файлы

(наверх ⬆️)

Стек

  • Java
  • Spring MVC Spring Data
  • PostgreSQL Hibernate
  • RabbitMQ
  • Maven Lombok
  • Docker
  • Для взаимодействия с Telegram API использована библиотека TelegramBots.
  • Для взаимодействия с HeadHunter используется HeadHunter API.

(наверх ⬆️)

Быстрый старт

  1. Установить docker
  2. Копировать проект
  3. Создать файл .env в директории проекта и заполнить его (Для запуска локально необходимо добавить значения из файла .env в переменные среды.)
  4. В директории проекта в консоли выполнить команды:
mvn package 
docker-compose up
  • В директории с папкой проекта создать папку files и скопировать cards.json

(наверх ⬆️)

Структура проекта

Проект состоит из 4 микросервисов:

  1. dispatcher порт 8088:
    • Микросервис взаимоействия с телеграм: регистрация бота, отправка сообщений, а также первичная валидация данных и распределение по очередям в брокере сообщений
  2. node порт 8085:
    • Микросервис в котором происходит обработка сообщений из брокера и реализована основная бизнес логика приложения
  3. mail-service порт 8087:
    • Микросервис для отправки email, содержащего ссылку для подверждения регистрации
  4. rest-service порт 8086:
    • RESTful API сервис обрабатывает входящие http запросы на скачивание файлов и подтверждение регистрации

(наверх ⬆️)

Переменные среды

Содержание файла .env:

JJAB_USERNAME= username телеграм бота. Например: JavaBot
JJAB_TOKEN= токен телеграм бота. Например: 123456:AD5e7b_ghjAdUQR60c2StQRW0il0Xbnm

MAIL_SERVICE_NAME= почта для отправки писем регистрации. Например: bot@gmail.com
MAIL_SERVICE_PASSWORD= пароль от почты.
SALT= случайный набор символов для кодировки данных в запросах. Например: 3452@#vSD234YTEY&$%

HH_TOKEN= токен для hh.ru. Получается на сайте при регистрации приложения.
HH_EMAIL= почта пользователя hh.ru, на которого зарегистрировано приложение.

RABBITMQ_DEFAULT_USER= логин стандартного пользователя RabbitMQ.
RABBITMQ_DEFAULT_PASS= пароль стандартного пользователя RabbitMQ.
RABBITMQ_ADMIN_USER= логин администратора RabbitMQ.
RABBITMQ_ADMIN_PASS= пароль администратора RabbitMQ.

SPRING_DATASOURCE_USER= логин пользователя базы данных.
SPRING_DATASOURCE_PASSWORD= пароль пользователя базы данных.
POSTGRES_USER= логин пользователя базы данных.
POSTGRES_PASSWORD= пароль пользователя базы данных.

(наверх ⬆️)

Планы по развитию

  • Настроить CI/CD
  • Написать документацию на GitBook
  • Дополнить карточки вопросами по всем категориям
  • Откорректировать генерацию карточек с возможностью последовательного просмотра
  • Добавить другие сайты для поиска вакансий
  • Настроить автоматическое обновление токена hh.ru
  • Добавить возможность откликаться на вакансии прямо из бота
  • Покрыть код тестами
  • Откорректировать исключения на более релевантные

(наверх ⬆️)