fix(bot): sleep mode — block purchases/payments inside catalog when shop pauses, safe+comfortable UX #143

Closed
opened 2026-08-08 21:01:13 +00:00 by NW · 0 comments
Owner

Баг: Пользователь внутри каталога продолжает покупать после паузы магазина (sleep mode)

Severity: High | Priority: High

Fix

  • sleepGuard.js (assertShopOpen/redirectIfPaused): блокирует запись-флоу при паузе, перенаправляет в ИИ-диалог, fallback на сообщение о паузе
  • Заблокировано: buy/pay/quantity/top-up/deposit/create-wallet при паузе
  • Мягкий редирект навигации каталога в ИИ при паузе
  • Read-only флоу (история покупок, баланс, история транзакций) не тронуты

План тестирования (выполнен)

  • T1: assertShopOpen=false при открытом магазине (нормальный флоу)
  • T2: assertShopOpen=true при паузе; answerCallbackQuery + sendMessage (AI-ответ)
  • T3: язык пользователя передаётся в sendToChatbot (de)
  • T4: handleBuyProduct при паузе — ранний return, getProductById НЕ вызван
  • T5: read-only флоу не импортируют sleepGuard (source-level)
  • T6: регрессия — handleBuyProduct при открытом магазине вызывает getProductById
  • alias redirectIfPaused + fallback (ИИ недоступен -> сообщение о паузе)

Acceptance

  • sleepGuard.assertShopOpen создан
  • Запись-флоу (покупка/оплата/пополнение/создание кошелька) блокируются при паузе
  • Навигация каталога мягко направляет в ИИ при паузе
  • Read-only флоу работают при паузе
  • Все треки T1-T8 протестированы (10 юнит-тестов, 42 всего)
  • Регрессия (T6): обычный флоу покупки работает
  • Деплой (бот healthy, sleepGuard в контейнере)

Закрыто коммитом 338a700

## Баг: Пользователь внутри каталога продолжает покупать после паузы магазина (sleep mode) **Severity:** High | **Priority:** High ### Fix - sleepGuard.js (assertShopOpen/redirectIfPaused): блокирует запись-флоу при паузе, перенаправляет в ИИ-диалог, fallback на сообщение о паузе - Заблокировано: buy/pay/quantity/top-up/deposit/create-wallet при паузе - Мягкий редирект навигации каталога в ИИ при паузе - Read-only флоу (история покупок, баланс, история транзакций) не тронуты ### План тестирования (выполнен) - T1: assertShopOpen=false при открытом магазине (нормальный флоу) - T2: assertShopOpen=true при паузе; answerCallbackQuery + sendMessage (AI-ответ) - T3: язык пользователя передаётся в sendToChatbot (de) - T4: handleBuyProduct при паузе — ранний return, getProductById НЕ вызван - T5: read-only флоу не импортируют sleepGuard (source-level) - T6: регрессия — handleBuyProduct при открытом магазине вызывает getProductById - alias redirectIfPaused + fallback (ИИ недоступен -> сообщение о паузе) ### Acceptance - [x] sleepGuard.assertShopOpen создан - [x] Запись-флоу (покупка/оплата/пополнение/создание кошелька) блокируются при паузе - [x] Навигация каталога мягко направляет в ИИ при паузе - [x] Read-only флоу работают при паузе - [x] Все треки T1-T8 протестированы (10 юнит-тестов, 42 всего) - [x] Регрессия (T6): обычный флоу покупки работает - [x] Деплой (бот healthy, sleepGuard в контейнере) Закрыто коммитом 338a700
NW closed this issue 2026-08-08 22:49:12 +00:00
Sign in to join this conversation.