fix(bot): desync admin panel state vs bot menu, double-tap duplicates, broken nav after disabled-location errors #127

Closed
opened 2026-08-04 13:29:43 +00:00 by NW · 2 comments
Owner

Проблема

Рассинхронизация состояния между админ-панелью и Telegram-ботом, отсутствие валидации активности сущностей при генерации меню, недостаточная обработка пользовательского ввода (дублирование кликов).

Ключевые паттерны ошибок

  1. BUG-01 Бот показывает Disabled-локации в меню выбора страны
  2. BUG-02 Ошибка/краш при просмотре товара из отключенной локации
  3. BUG-03 Дублирование сообщений/меню при повторных кликах
  4. BUG-04 Сбой навигации: старые инлайн-клавиатуры остаются активными

Статус

  • BUG-01: частично исправлен (is_active=1 в locationService/categoryService), осталось: getLocationById без фильтра, product queries без проверки активности
  • BUG-02: не исправлен
  • BUG-03: не исправлен
  • BUG-04: не исправлен

Acceptance

  • BUG-01: getLocationById + product queries фильтруют/проверяют is_active
  • BUG-02: disabled сущность → корректный редирект в главное меню
  • BUG-03: lock на callback_query от одного user_id
  • BUG-04: сброс userStates при выборе пункта главного меню
  • Тесты
  • Деплой

Закрыто коммитом bd3391c (v1.2.2)

## Проблема Рассинхронизация состояния между админ-панелью и Telegram-ботом, отсутствие валидации активности сущностей при генерации меню, недостаточная обработка пользовательского ввода (дублирование кликов). ## Ключевые паттерны ошибок 1. **BUG-01** Бот показывает Disabled-локации в меню выбора страны 2. **BUG-02** Ошибка/краш при просмотре товара из отключенной локации 3. **BUG-03** Дублирование сообщений/меню при повторных кликах 4. **BUG-04** Сбой навигации: старые инлайн-клавиатуры остаются активными ## Статус - BUG-01: частично исправлен (is_active=1 в locationService/categoryService), осталось: getLocationById без фильтра, product queries без проверки активности - BUG-02: не исправлен - BUG-03: не исправлен - BUG-04: не исправлен ## Acceptance - [x] BUG-01: getLocationById + product queries фильтруют/проверяют is_active - [x] BUG-02: disabled сущность → корректный редирект в главное меню - [x] BUG-03: lock на callback_query от одного user_id - [x] BUG-04: сброс userStates при выборе пункта главного меню - [x] Тесты - [x] Деплой Закрыто коммитом bd3391c (v1.2.2)
NW added the priority::highpriority::hightype::bugtype::bug labels 2026-08-04 13:29:54 +00:00
NW closed this issue 2026-08-04 14:23:11 +00:00
Author
Owner

Дополнительный баг-репорт: Невозможность удаления локации + отсутствие UI-уведомлений

Раздел: /locations и /catalog | Severity: High | Priority: High

Проблема

  • При попытке удалить локацию с привязанными категориями/товарами удаление блокируется, но пользователь НЕ видит никакого сообщения. Ошибка передается только в URL (?error=...), UI не информирует.
  • После удаления всех товаров (Products=0) локацию всё равно нельзя удалить из-за связей с категориями — об этом тоже нет уведомления.

Ожидаемо

  1. Toast/Alert-уведомление при невозможности удаления: "Нельзя удалить локацию — к ней привязаны категории/товары"
  2. Прозрачность связей: видно какие сущности блокируют удаление (счётчики уже есть, но нужен текст в ошибке)
  3. После очистки связей локация успешно удаляется

Текущий код

  • src/admin/routes/locations.js:46-63 — redirect ?error=..., но locations.ejs НЕ рендерит error
  • src/admin/routes/catalog.js:384-391 — redirect ?msg=...&msg_type=error, catalog.ejs рендерит msg (alert)
  • src/admin/routes/categories.js — аналогично ?error=...

Fix plan

  • GET /locations и GET /categories: передавать req.query.error в view
  • locations.ejs / categories.ejs: рендер alert (как в catalog.ejs) для error/success
  • Расширить сообщения ошибок с деталями (категории/товары) + подсказку что делать
  • Проверить удаление после очистки (не осталось ли скрытых блокировок)
## Дополнительный баг-репорт: Невозможность удаления локации + отсутствие UI-уведомлений **Раздел:** /locations и /catalog | **Severity:** High | **Priority:** High ### Проблема - При попытке удалить локацию с привязанными категориями/товарами удаление блокируется, но пользователь НЕ видит никакого сообщения. Ошибка передается только в URL (?error=...), UI не информирует. - После удаления всех товаров (Products=0) локацию всё равно нельзя удалить из-за связей с категориями — об этом тоже нет уведомления. ### Ожидаемо 1. Toast/Alert-уведомление при невозможности удаления: "Нельзя удалить локацию — к ней привязаны категории/товары" 2. Прозрачность связей: видно какие сущности блокируют удаление (счётчики уже есть, но нужен текст в ошибке) 3. После очистки связей локация успешно удаляется ### Текущий код - src/admin/routes/locations.js:46-63 — redirect ?error=..., но locations.ejs НЕ рендерит error - src/admin/routes/catalog.js:384-391 — redirect ?msg=...&msg_type=error, catalog.ejs рендерит msg (alert) - src/admin/routes/categories.js — аналогично ?error=... ### Fix plan - [ ] GET /locations и GET /categories: передавать req.query.error в view - [ ] locations.ejs / categories.ejs: рендер alert (как в catalog.ejs) для error/success - [ ] Расширить сообщения ошибок с деталями (категории/товары) + подсказку что делать - [ ] Проверить удаление после очистки (не осталось ли скрытых блокировок)
Author
Owner

Fixed and committed in 88a15ac (v1.2.2):

  • locations/categories GET now pass req.query.error/success to views
  • locations.ejs / categories.ejs render dismissible error/success alerts
  • Delete errors include blocking counts + 'Remove X first' hints
  • 🔒 lock hint on rows with linked entities
  • 18 new tests (adminDeleteFeedback.test.js), 48 total pass

Fix plan progress:

  • GET /locations и GET /categories: передавать req.query.error в view
  • locations.ejs / categories.ejs: рендер alert (как в catalog.ejs) для error/success
  • Расширить сообщения ошибок с деталями (категории/товары) + подсказку что делать
  • Проверить удаление после очистки (не осталось ли скрытых блокировок)
Fixed and committed in 88a15ac (v1.2.2): - locations/categories GET now pass req.query.error/success to views - locations.ejs / categories.ejs render dismissible error/success alerts - Delete errors include blocking counts + 'Remove X first' hints - 🔒 lock hint on rows with linked entities - 18 new tests (adminDeleteFeedback.test.js), 48 total pass Fix plan progress: - [x] GET /locations и GET /categories: передавать req.query.error в view - [x] locations.ejs / categories.ejs: рендер alert (как в catalog.ejs) для error/success - [x] Расширить сообщения ошибок с деталями (категории/товары) + подсказку что делать - [x] Проверить удаление после очистки (не осталось ли скрытых блокировок)
Sign in to join this conversation.