Files
portal/app/database
Дмитрий 51b9c20d0b fix(смс-клиент): повторный накат доделывает индекс ключа заказа + сторож прав по трём ролям
Две находки обязательного проверяющего доступа (приёмка Этапа 2, журнал В-80).
Обе — про молчаливые поломки: ошибок нет, тесты зелёные, защиты нет.

1. Индекс ключа заказа мог тихо не создаться. Миграция делает два шага —
   колонку и уникальный индекс, — а защита от повторного запуска стояла общим
   выходом в начале: «колонка есть, значит всё сделано». На бою SQL подаётся
   руками; прервалась подача между шагами — колонка легла, индекс нет, повторный
   накат прошёл мимо. Дальше два одновременных запроса с одним ключом создали бы
   две рассылки и списали деньги дважды.

   Проверка стала пошаговой. Доказано вырезанием: до правки новый тест краснеет
   («защита от двойного заказа потеряна молча»), после — зелёный. Живьём на
   локальной dev-базе: индекс уронен руками, повторный накат его вернул.

2. Сторож прав спрашивал базу только про рабочую роль. А гардов с именами
   служебных ролей в миграциях семь, и опечатка внутри такого гарда ошибки НЕ
   даёт — права просто молча не выдаются. Ровно тот блокер выката, ради которого
   сторож и заводился (В-36).

   Теперь спрашиваем и crm_admin_user, и crm_supplier_worker — по матрице,
   сверенной со всеми GRANT'ами миграций, — и счётчики для всех трёх ролей.
   Доказано вырезанием: опечатка в имени роли внутри гарда → сторож краснеет с
   именем роли, таблицы и права.

Прогоны: СМС 171/171 (было 169, два новых теста), приём лидов 17/17, pint чисто.
Структура таблиц не менялась — запись в журнале схемы v9.11.
2026-07-28 13:56:14 +03:00
..