Шаблон является идеальным решением для разработчиков, тимлидов и архитекторов ПО, начинающим создавать новый проект, потому что включает сразу несколько преимуществ:
- Низкий порог входа для новых разработчиков (достаточно знать JavaScript и базовый TypeScript).
- Строгая типизация, отслеживающая ошибки после каждой написанной строки кода.
- Тщательно продуманная архитектура, уже используемая на реальных проектах и гарантирующая быстроту масштабирования.
Список заранее готовых возможностей:
- Регистрация зависимостей через DI-контейнер.
- Лог-менеджер, который можно перенаправить с консоли в другую среду.
- Telegram-бот на Telegraf с middleware-слоем.
- Архитектура “controller -> handler -> service” для событий Telegram.
- TypeORM для работы с PostgreSQL, облегчающая поддержку реляционной базы данных и добавляющая механизм безопасных миграций..
- Отложенные задачи (очередь задач +
node-cron), которые не накладываются друг на друга. - Возможность гибкой настройки через конфигурацию (например, включить только
bot, включитьqueueи конкретные задачи).
- Для работы с кодом использовать Visual Studio Code.
- Клонировать репозиторий:
git clone https://github.com/kyoresuas/UniversalTelegramBot.git. - Установить зависимости:
npm install. - Установить плагин Prettier - Code formatter.
- Прожать CTRL + SHIFT + P и ввести
User Settings. - Выбрать
Preferences: Open User Settings (JSON). - Добавить строки:
"editor.defaultFormatter": "esbenp.prettier-vscode","editor.formatOnSave": true,"notebook.formatOnSave.enabled": true
- Установить плагин TypeScript Barrel Generator.
- Создать в корне проекта файл
.envи скопировать в него содержимое из.env.example. - Настроить конфигурацию
.envпод свою среду. - Подготовить базу данных командой
npm run migration:run. - Запустить проект через
npm run dev.
Основные ветки (в них не работаем!):
main- установлена на сервере и включает готовый и протестированный код.release- включает все протестированные новые изменения, готовые к релизу на продакшен (не обязательно).dev- ветка для разработки, используется для тестирования.
Префиксы веток для работы:
feature- используется при добавлении нового функционала.fix- используется при исправлении бага.refactor- используется при рефакторинге кода.test- используется при тестировании кода.
Например, при исправлении бага с авторизацией, ветку необходимо назвать fix/auth.
- Для написания кода и работы с Git использовать нейминг в CamelCase.
- Называть переменные так, чтобы было понятно их назначение, даже если название будет слегка длинным.
- Весь неочевидный функционал сопровождать комментариями (функции, переменные, классы и прочие определения через
/** */, элементарные вызовы и описания можно через//). - Импорты в заглавии файлов должны идти лесенкой.
Для работы над проектом необходимо понимать его структуру.
├─ /scripts [скрипты]
├─ /src [корень]
│ ├─ /config [инициализация проекта]
│ ├─ /constants [константы]
│ ├─ /contracts [настройки сервисов]
│ ├─ /controllers [контроллеры для маршрутов API]
│ ├─ /entities [сущности PostgreSQL]
│ ├─ /handlers [обработчики логики событий бота]
│ ├─ /helpers [специализированные помощники]
│ ├─ /middleware [промежуточное ПО для Telegraf]
│ ├─ /migrations [миграции PostgreSQL]
│ ├─ /services [сервисы]
│ ├─ /tasks [отложенные задачи]
│ ├─ /types [типизация]
│ ├─ /utils [вспомогательные функции]
│ └─ main.ts [файл запуска]
├─ .env.example [пример конфигурации]
└─ .env [конфигурация разработчика]
Предположим, что нам нужно добавить новую команду Telegram-бота (например, /help):
- Добавить новый обработчик в
/handlers. - Добавить новый контроллер в
/controllers. - Если нужна бизнес-логика или работа с БД:
- Добавить метод в существующем сервисе или создать новый в
/services. - Обязательно зарегистрировать сервис в DI-контейнере.
- Добавить метод в существующем сервисе или создать новый в
- Если требуется отредактировать структуру в PostgreSQL:
- Внести изменения в сущности и убедиться, что они конечны.
- Выполнить команду
npm run migration:generateдля создания миграции. - Найти новый файл миграции в
/migrations, проверить и сохранить его. - Выполнить миграцию в локальную базу данных по команде
npm run migration:run. - Если потребовалось изменить структуру снова, то прописать
npm run migration:revertи повторить предыдущие шаги.
- Если нужна задача по расписанию:
- Добавить task в
/tasks. - Добавить контракт задачи в
/contracts/cron/cron.namespace.ts. - Включить задачу в
.envчерезENABLED_TASKSи включить модульqueueвENABLED_MODULES.
- Добавить task в
- Выполнить команду
npm run lint, чтобы проверить работоспособность кода.