§01
Обзор
- Что это: Мультиязычный (ru/uz/en) e-commerce бот в Telegram для сети пиццерий Restaurant chain (UZ) (choparpizza.uz). Меню/корзина, доставка/самовывоз, выбор терминала, стоп-листы, авторизация, отзывы, массовые рассылки. Фронтенд к внешнему Laravel API (в стиле
api.choparpizza.uz). Тот же владелец репозитория (ShahzodSalimsakov) и архитектура, что и у Restaurant chain (UZ)Bot. - Тип / статус / роль: bot / maintained / contributor (2–3 разработчика; у пользователя 174 из 317 коммитов, ~55%).
- Активный период: 2021-07-31 → 2026-05-18, ~5 лет. Живой: 2025–2026 показывают свежую волну фич с чистыми conventional-commits (часть — с Claude).
§02
Стек
- Языки: JavaScript (Node.js, CommonJS). TypeScript только в devDeps (не используется).
- Фреймворки/библиотеки: Telegraf 4.15 (новее, чем 4.4 у Restaurant chain (UZ)Bot; Scenes/WizardScene), telegraf-i18n (ru/uz/en), Fastify 3 + fastify-telegraf, Bull 4 + @bull-board, ioredis, luxon, hashids, bwip-js/canvas (штрихкоды), axios.
- Инфра/деплой: PM2, Sentry, @inspector-apm/inspector-nodejs (APM-мониторинг — единственное заметное отличие в зависимостях от Restaurant chain (UZ)Bot), choparpizza.uz / сервер Contabo. Bun (
bun.lockbприсутствует) + yarn.lock — миграция пакетного менеджера. - Данные: MongoDB (сессии + коллекция
event_systems), Redis (Bull + pub/sub). - Заметный тулинг: agenda/node-cron/sfn-scheduler (частично legacy/закомментировано).
§03
Что реализовано
Ранняя история — мусорные сообщения («asd», «dsd», «fix»); с 2025 года — чистые conventional commits (часть сгенерирована Claude).
- Меню/корзина —
controllers/menu/index.js>2755 строк (больше, чем у Restaurant chain (UZ)Bot): пагинация, корзина, модификаторы, half-products, промоакции (threeSaleProducts,8246873). - Стоп-листы по терминалам —
f241cf3 fix: Enforce stop-list check on product variants+b0697e4(answerCbQuery при блокировке). - Плановые рассылки —
bot.js+util/queue.js: cron-джобы Bull, прогресс репортится в API, удаление сообщений;cb9c9f3 feat: endpoint to remove scheduled events from MongoDB,0dac3ce feat: Emit 'removed' event on job removal. - send_notify с reply —
30928f3 refactor: Add support for replying to a message. - Бизнес-апдейты: города (
94653c7 trying to fix cities issue), время закрытия, тексты доставки. - Финальный рефакторинг (`5880f35`, 2026-05-18): заменил
/api/configs/publicна статический env-конфиг (тот же рефакторинг, что и в Restaurant chain (UZ)Bot — общее обновление для обоих ботов). - Объём: 317 коммитов за ~5 лет, 174 у пользователя. Активность волнами; недавно оживлён с AI-ассистентом.
§04
Технические челленджи
- Стоп-лист на уровне варианта/модификатора (
controllers/menu/index.js,addToCart, коммитf241cf3): раньше валидировался только ID родительского продукта → отсутствующие размеры пиццы (40 см) проскакивали в корзину. Фикс: GETterminals/get_stock?terminal_id=..., сборкаblockedIdsиз[selectedProdId, rightProduct.id, ...selectedModifiers.map(id)], проверка пересечения со стоп-листом, блокировка черезproductIsNotInStock. → Реальный продакшн-баг в доменной логике; корректное расширение проверки на все составляющие продукта. - Удаление плановых сообщений из MongoDB (
bot.js,cb9c9f3): endpoint/api/schedule_event/remove_within_mongo— курсор поevent_systemsпоjobId,bot.telegram.deleteMessage(chatId, message_id)+ удаление документа, с детальным логированием и try/catch на каждое сообщение. → Управление состоянием рассылки (есть и баг: обращение кqueueJob.idвне области видимости — потенциальный ReferenceError). - Кастомная очередь Bull с Redis pub/sub (
util/queue.js) — то же, что и в Restaurant chain (UZ)Bot: межпроцессная отмена выполняющихся джоб (общий инфра-паттерн семейства). - APM-инструментирование (
@inspector-apm/inspector-nodejs) — продакшн-мониторинг производительности бота.
§05
AI-разработка
- Найдено сессий: 1 (в локальной директории сессий Claude Code,
0f95e959-...jsonl, ~3.2 MB). - Что сделано с AI: сэмпл первого промпта — «commit and push» (минимальный ручной ввод); реальные AI-правки видны в коммитах с
Co-Authored-By: Claude Opus 4.7 (1M context): стоп-лист на уровне варианта (f241cf3), логирование отправки/удаления сообщений, рефакторинг env-конфига (5880f35). - Паттерны AI-воркфлоу: использование Claude Code для точечных багфиксов и рефакторинга внутри большого legacy-файла (menu/index.js, 2.7k+ строк), с чистыми conventional-commit сообщениями, сгенерированными AI. Делегирование рутины («commit and push»).
- В отличие от alfaclean — здесь AI применялся прицельно на legacy-коде, а не для greenfield-архитектуры.
§06
Достижения и метрики
- Реальный продакшн-бот для сети пиццерий Restaurant chain (UZ); 3 языка; интеграция с Laravel API/MongoDB/Redis/Sentry/APM.
- 174 пользовательских коммита из 317 за ~5 лет — долгоживущий продукт.
- menu/index.js >2755 строк — крупнейший контроллер; богатая доменная логика (модификаторы, half-products, стоп-листы, промоакции).
- Точных бизнес-метрик в коде нет.