Commit Graph

1 Commits

Author SHA1 Message Date
Дмитрий 86d974330b feat(смс-клиент): правило «с 10 до 20 по местному» живёт в одном месте, границы правит владелец
Этап 3 «Время и цена», Task 1. Закрыты строки листа Н.3 и 3.7.
Поведение рассылки ещё НЕ меняется — этим займётся Task 2. Сейчас заведено то,
на чём оно будет стоять, и заведено так, чтобы правило нельзя было размножить.

1. Справочник часовых поясов (RegionTimezoneMap). 89 субъектов РФ в том же порядке,
   что и справочник имён; сторож-тест сверяет составы, чтобы справочники не разъехались.
   Отдельный тест на ловушку: код субъекта у нас НЕ автомобильный — 77 это Тюменская
   область, а Москва 82. Неизвестный код и непонятная строка от ДаДаты дают «не знаю»,
   а не ноль: ноль означал бы Гринвич, то есть тихую подмену Камчатки Лондоном.

2. Единственный дом правила 10–20 (SmsQuietHours): можно ли отдавать сейчас, когда
   откроется окно, осмысленно ли такое окно. Границы читаются из настроек один раз
   на объект — на 20 000 номеров иначе был бы 20 000-й запрос к базе.

3. Границы окна в общих настройках: миграция добавляет две колонки со значениями 10 и 20.
   Защита от повторного запуска пошаговая — прерванная ручная подача SQL на бою не должна
   оставить вторую колонку несозданной (урок В-80). Прав не требует: колонки наследуют
   привилегии таблицы. Запись схемы v9.12.

4. Админка «СМС»: два поля «Отправляем с / по» и объяснение, что часы — по местному времени
   получателя и клиент их не настраивает. Окно наизнанку «с 20 до 10» это отправка всю ночь,
   поэтому сервер его не принимает и говорит человеку почему. Проверяется ПОЛУЧИВШЕЕСЯ окно,
   а не присланные поля: правка одной границы тоже могла его вывернуть — журнал В-91.

Прогоны: СМС 186/186 (было 171, 15 новых тестов), приём лидов 17/17, фронт 1658 зелёных
и 3 намеренно пропущенных, phpstan по своим файлам 0, pint чисто, проверка типов без новых ошибок.
Вырезанием проверено дважды: убрал проверку окна — покраснели два теста; убрал чтение границ
с сервера на экране — покраснел фронтовый тест. Живьём: окно 11–19 сохранилось и пережило
перезагрузку, «с 20 до 10» отклонено с человеческим текстом, вернул 10–20.

Попутный урок В-92: два моих же новых теста сперва зеленели по неверной причине — ругань
приходила за пропущенные поля платы за имя, а не за окно. Теперь тесты шлют полное письмо
и проверяют, за какое поле ругаются.
2026-07-28 15:20:13 +03:00