Данный проект представляет собой Telegram-бота для управления процессами в онлайн-школе. Бот разработан для упрощения взаимодействия между учениками и преподавателями, включая бронирование занятий, выбор предметов и преподавателей.
- Описание
- Основные функции
- Технологический стек
- Архитектура проекта
- Взаимодействие компонентов
- Как развернуть проект локально
- Инструкция по использованию
- Планы на будущее
Бот предоставляет пользователям следующие возможности:
- Регистрация и вход: Простая регистрация и авторизация через Telegram.
- Выбор предмета и преподавателя: Легкий способ выбрать предмет и преподавателя для занятий.
- Бронирование занятий: Возможность бронировать занятия с выбранным преподавателем.
- Просмотр и отмена занятий: Управление запланированными занятиями, включая просмотр расписания и отмену.
Проект использует следующие технологии и библиотеки:
- Язык программирования: Java 17.
- Фреймворк: Spring Boot 3.3.4.
- Telegram API: TelegramBots 6.9.7.
- Сообщения: Apache Kafka.
- База данных: PostgreSQL.
- Миграция данных: Liquibase.
- Контейнеризация: Docker.
- Тестирование: JUnit, Testcontainers, Rest Assured.
- Утилиты и вспомогательные библиотеки: Lombok, ModelMapper, Jackson.
Проект построен на базе микросервисной архитектуры и использует следующие компоненты:
Пользовательский интерфейс, который взаимодействует с пользователями через Telegram. Пользователи могут регистрироваться, выбирать преподавателей и бронировать занятия.
Микросервис для регистрации пользователей, аутентификации и управления профилем. Хранит информацию о пользователях, предметах и преподавателях.
Микросервис для управления расписанием и бронированием занятий. Обрабатывает запросы на бронирование и управление занятиями.
Используется для асинхронного обмена сообщениями между микросервисами. Позволяет синхронизировать данные и уведомления о событиях (регистрация, бронирование) между сервисами.
Каждое приложение использует отдельную базу данных PostgreSQL для хранения данных. User Service хранит информацию о пользователях и их предпочтениях, Booking Service — информацию о занятиях и бронированиях.
Для удобства разработки и развертывания используется Docker Compose, который упрощает управление микросервисами, их зависимостями и настройкой среды. Включает конфигурацию для следующих сервисов:
- User Service
- Telegram Bot
- Booking Service
- PostgreSQL
- Kafka
- Telegram Bot отправляет запросы в User Service для регистрации пользователей и выбора предметов и преподавателей.
- После выбора преподавателя, запросы на бронирование передаются в Booking Service для проверки доступности, получения расписания преподавателя и создания бронирования.
- Booking Service предоставляет расписания преподавателей, которые запрашиваются Telegram-ботом для отображения доступных временных слотов.
- Некоторые события (регистрация, бронирование) отправляются в Kafka, обеспечивая асинхронное взаимодействие между сервисами.
- Сервисы используют PostgreSQL для хранения данных о пользователях, преподавателях и занятиях.
Для развертывания проекта на локальной машине выполните следующие шаги:
Клонируйте репозиторий с кодом проекта на вашу локальную машину:
git clone <URL>
Перейдите в корневую директорию проекта и выполните команду для сборки Docker-образов для всех сервисов:
./mvnw spring-boot:build-image
Эта команда соберет Docker-образы для всех сервисов, включая telegram-bot-service, user-service, и booking-service.
После сборки образов выполните команду для запуска всех контейнеров с помощью Docker Compose. Это автоматически развернет все необходимые сервисы (PostgreSQL, Kafka, Zookeeper, и ваши микросервисы):
docker-compose up
Docker Compose создаст все необходимые контейнеры и подключит их в одну сеть.
В репозитории уже есть файл конфигурации application.yml с настройками для всех сервисов. Однако, для корректной работы Telegram-бота нужно добавить ваш API-ключ.
Для этого выполните следующие шаги: Откройте файл application.yml в сервисе telegram-bot-service и найдите строку:
bot:
name: OnlineSchool
token: ${TELEGRAM_BOT_TOKEN}
В корне проекта создайте файл .env, если его нет, и добавьте в него ваш токен Telegram-бота:
TELEGRAM_BOT_TOKEN=<your_telegram_bot_token>
Замените <your_telegram_bot_token> на настоящий токен, который вы получили при регистрации бота в Telegram.
Если вы не хотите использовать .env файл, вы можете вручную указать токен в файле application.yml, заменив ${TELEGRAM_BOT_TOKEN} на сам токен:
yaml Копировать код bot: name: OnlineSchool token: <your_telegram_bot_token>
В файле docker-compose.yml уже настроены все необходимые сервисы (PostgreSQL, Kafka, Zookeeper, и микросервисы). Для корректной работы Telegram-бота также нужно указать токен в переменной окружения.
Откройте файл docker-compose.yml.
Найдите раздел для telegram-bot и добавьте следующую строку:
telegram-bot:
image: telegram-bot-service:latest
depends_on:
- kafka
environment:
SPRING_KAFKA_BOOTSTRAP_SERVERS: kafka:9092
TELEGRAM_BOT_TOKEN: ${TELEGRAM_BOT_TOKEN} # Убедитесь, что переменная задана в .env файле
LANG: ru_RU.UTF-8
LANGUAGE: ru_RU:ru
LC_ALL: ru_RU.UTF-8
JAVA_TOOL_OPTIONS: "-Dfile.encoding=UTF-8"
ports:
- 8443:8443
networks:
- corpbot-network
После того как все шаги выполнены:
Запустите Docker Compose с помощью команды:
docker-compose up
Убедитесь, что все сервисы корректно запущены и работают.
В Telegram, найдите вашего бота и начните с ним взаимодействовать, чтобы проверить его функциональность.
Как начать работать с ботом в Telegram (показано на примере пользователя):
- Откройте Telegram и найдите вашего бота.
- Нажмите кнопку Запустить или введите команду
/start
в поле для сообщений.
- После команды
/start
, бот предложит вам выбрать вашу роль. На данный момент доступна роль пользователь. - Нажмите на кнопку с соответствующей ролью.
- Если вы новый пользователь, выберите Регистрация.
- Введите следующие данные, когда бот запросит:
- Имя и фамилия.
- Электронная почта.
- Пароль (должен соответствовать требованиям безопасности).
- Бот выполнит валидацию данных и сообщит, если найдены ошибки (например, неверный формат электронной почты или слишком простой пароль).
- Если вы уже зарегистрированы, выберите Вход.
- Введите свою электронную почту и пароль.
- Бот проверит введенные данные и сообщит, если они неверны.
После успешной регистрации или входа, вам будут доступны следующие команды:
- Бронировать занятие:
- Выберите кнопку Бронировать занятие.
- Укажите предмет, выберите преподавателя и подходящее время.
- Просмотреть забронированные занятия:
- Нажмите на кнопку Посмотреть занятия.
- Бот отобразит ваш список занятий.
- Отменить занятие:
- Нажмите кнопку Отменить занятие.
- Выберите занятие, которое нужно отменить, из предложенного списка.
В будущем проект будет ориентирован на полную интеграцию всех пользовательских ролей — пользователя, администратора и преподавателя — с Telegram-ботом. Это позволит каждому пользователю выполнять все необходимые действия прямо через интерфейс бота.
Для повышения производительности системы и снижения нагрузки на базу данных будет реализовано кэширование.
Это ускорит обработку запросов, например:
- Быстрый доступ к расписанию.
- Часто запрашиваемая информация о пользователях, предметах и преподавателях.
Технологии, которые планируется использовать:
- Redis или другой высокоскоростной механизм кэширования.
Для улучшения безопасности и удобства работы с системой будет внедрена аутентификация на основе JWT (JSON Web Token).
Это обеспечит:
- Надежный механизм авторизации для всех ролей.
- Возможность выполнения безопасных запросов через API.
- Простоту интеграции с ботом и другими потенциальными интерфейсами.
JWT-токены позволят поддерживать масштабируемость и гибкость системы, что особенно важно для многоуровневой архитектуры.