Nodejs-разработка
Присоединяйтесь к нашей программе обучения
Второе задание: бот для получения курса валют
Необходимо создать телеграм-бота для получения актуального курса валют.
User Flow
1. Начало взаимодействия:
Пользователь заходит в чат бота в Telegram и пишет команду /start. Бот приветствует пользователя и предлагает команду для получения текущих курсов валют:
Пример приветствия бота:
Привет! Я помогу тебе узнать текущие курсы валют.
Напиши /currency для получения списка доступных валют.
2. Выбор валюты:
Пользователь вводит команду /currency.
Бот запрашивает у пользователя, какую валютную пару он хочет узнать (например, USD к EUR).
Пример сообщения от бота:
Введи валютную пару в формате USD-EUR, чтобы узнать курс обмена.
3. Получение данных:
Пользователь вводит валютную пару, например USD-EUR.
Бот делает запрос к внешнему API (например, Exchange Rates API) для получения текущего курса валют. В случае успешного запроса бот отвечает пользователю текущим курсом.
Пример сообщения от бота:
Текущий курс USD к EUR: 1.10.
4. Ошибки и обработка исключений:
Если пользователь введет неверный формат валютной пары, бот уведомляет о необходимости правильного ввода.
Если внешний API недоступен, бот сообщает пользователю об ошибке и просит попробовать позже.
Ой! Что-то пошло не так. Убедись, что ввел валютную пару в формате USD-EUR, или попробуй позже.
Требования
Разрешается использовать только node.js без дополнительных фреймворков.
Нельзя использовать готовые библиотеки для интеграции с сервисом, предоставляющим курсы валют.
Код должен быть асинхронным для обработки операций, таких как HTTP-запросы и взаимодействие с Telegram API.
Токен для телеграм бота должен конфигурироваться через файл конфигурации и может быть заменен на другой.
Нужно обеспечить гибкость кода для случая замены или добавления еще одного провайдера бота и сервиса для получения курсов валют. (см.Подсказки).
Необходимо логировать:
запросы к API курса валют и ответы на них
ошибки на уровне бота
Необходимо протестировать флоу обработки запроса на получение курса валют, используя мок для ответа от внешнего сервиса. Тесты должны охватывать успешные результаты, а также случаи с ошибками:
при некорректном вводе от пользователя
при проблемах с подключением к внешнему сервису
при ошибке в ответе от сервиса
Файл README.md должен содержать краткое описание проекта и инструкцию по запуску и тестированию проекта.
Подсказки и ресурсы
Для написания проекта понадобятся следующие теоретические знания:
2. Dependency Injection (DI):
Использование dependency injection поможет разделить логику бизнес-слоя и конкретные реализации сервисов, инкапсулировать детали реализации провайдера и обеспечить модульность и расширяемость.