# Управление меню KILN

Перед работой прочитайте `AGENTS.md`. Все команды импорта и тестирования ниже
выполняются только в development-среде с отдельной БД, не в production.

1. Скопируйте `.env.example` в `.env.local`, задайте `DATABASE_URL`, `NEXT_PUBLIC_SITE_URL`, `ADMIN_LOGIN`, `ADMIN_PASSWORD_HASH` и `ADMIN_EMAIL`. Хеш пароля сгенерируйте командой `npm run admin:hash -- 'длинный случайный пароль'`; исходный пароль не храните в репозитории.
2. Единая панель и все способы входа доступны только по адресу `/admin/panel`. Старые `/admin/menu` и `/admin/settings` перенаправляют туда.
3. Запустите изолированный PostgreSQL (`docker compose -p kiln-dev up -d --wait postgres`; host-порт `55432`) и примените миграции с явным development `DATABASE_URL`. Не используйте имя Compose project `kiln`.
4. Выполните `npm run menu:extract-yandex`, затем `npm run menu:download-images -- --dry-run` и `npm run menu:download-images`. Проверьте `data/import/yandex-menu-report.json`, `data/import/yandex-menu-images.json` и `data/import/yandex-menu-reconciliation.csv`.
5. Выполните `npm run menu:import-yandex -- --dry-run`, затем `npm run menu:import-yandex`.
6. Откройте `/admin/panel` и выберите способ входа. Административная сессия хранится отдельно от клиентской, завершается после 15 минут бездействия и защищает изменяющие запросы CSRF-токеном. Алкоголь создаётся с запретом онлайн-заказа/доставки и выключенной публикацией в Яндексе.
7. Проверьте `/menu`, `/yandex-menu` и `npm run menu:validate`.

После «Загрузить каталог» каждая позиция отображается одной компактной строкой.
Название переключает checkbox и показывает полное значение в подсказке,
иконка связи привязывает выбранную локальную карточку, а карточка СБИС
открывается в модальном окне без сброса списка. Подробные pull/push-действия
доступны в этой модалке. В разделе «Категории и позиции» текущая связь СБИС
показывается в строке и в редакторе; позицию можно атомарно перепривязать или
отвязать через выпадающий список. Для каждой категории категория СБИС также
выбирается из выпадающего списка актуальных значений. Иконки состояния снабжены
подсказками. Модальные окна редакторов прокручиваются целиком, включая подсказку
под загрузкой фотографии.

Перед импортом всегда используйте `--dry-run`, сохраните отчёт и проверьте diff.
Импорт не должен затирать ручные редакционные значения, а сайт не должен
создавать или удалять номенклатуру СБИС.

Изображения нужно загрузить в собственное HTTPS-хранилище и указать абсолютный URL. URL Яндекс Карт не сохраняются как постоянные ссылки. Яндекс забирает фид по собственному расписанию; сайт только сразу публикует актуальный XML.
