Runbook — интеграция seed-скриптов в alatyr-service¶
Задача 40 · Skeleton создан 07.08.2026 · Как встроить скрипты в build/deploy
Что готово¶
alatyr-service/script/seed-own-companies.ts— реализован детерминированный snapshot и upsert 2 ИПskeletons/seed-services.ts— читаетservices-catalog.md, upsert категорий
Реализация seed собственных компаний не скачивает приватный KB при деплое. Статические реквизиты версионируются в приватном репозитории
alatyr-serviceи обновляются одновременно сmy-companies.md. Это убирает сетевую зависимость и отдельный PAT с доступом к инфраструктурному KB.
Порядок выполнения (после задачи 39a)¶
Шаг 1: перенести оставшийся seed услуг в alatyr-service¶
# в клоне alatyr-service
cp /path/to/alatyr-infra-kb/skeletons/seed-services.ts script/
# Правки после переноса schema-crm (задача 39a):
# - Импорт из "../shared/schema-crm" заменить на "../shared/schema"
# - Импорт `db` брать из "../server/storage"
Шаг 2: package.json scripts¶
{
"scripts": {
"db:generate": "drizzle-kit generate",
"db:migrate": "drizzle-kit migrate",
"db:seed:own-companies": "tsx script/seed-own-companies.ts",
"db:seed:services": "tsx script/seed-services.ts",
"db:seed": "npm run db:seed:own-companies && npm run db:seed:services"
}
}
Шаг 3: секреты и доступ к KB¶
Seed собственных компаний не требует GITHUB_TOKEN, KB_READ_TOKEN или
других секретов. API-токены Моё Дело в код и KB не добавляются.
Шаг 4: когда запускать seed¶
Вариант A: build-time (в deploy workflow):
Плюс: KB и БД всегда согласованы. Минус: seed идёт при каждом деплое (2-3 сек).Вариант B: on-demand:
# После обновления my-companies.md в KB:
ssh oswold@46.17.99.183 "cd /opt/alatyr-service && npm run db:seed"
Рекомендация: Вариант A. Сиды идемпотентны, overhead минимальный.
Проверка после запуска¶
-- в psql/sqlite после npm run db:seed
SELECT code, full_name, bank_bik, bank_account FROM own_companies;
SELECT code, title FROM service_categories WHERE is_active = 1 ORDER BY order_index;
Ожидаемо:
- own_companies: 2 строки (golovin, korobochka)
- service_categories: 7 строк (skud, video, fire, network, construction, low_voltage, general)
Что делать когда меняется KB¶
Обновились реквизиты банка (например Роман сменил счёт)¶
- Отредактировать
my-companies.mdв KB - Обновить тот же реквизит в snapshot
alatyr-service/script/seed-own-companies.ts - Закоммитить оба изменения
- Запустить
npm run db:seed:own-companiesили дождаться следующего деплоя - UPDATE в
own_companiesпойдёт поcode=golovin, аid,mdCompanyIdиisActiveостанутся прежними - FK от
objects.own_company_idне сломается
Добавилась новая категория услуг¶
- Добавить строку в таблицу в
services-catalog.md npm run db:seed:services— INSERT новой строки, orderIndex = следующий- Если убрали категорию — она станет
is_active=0(soft-delete), FK не сломается
Артём открыл новый счёт (после решения 39a)¶
Если выбрали Вариант A (JSON):
- Обновить парсер seed-own-companies.ts → собирать additionalAccounts: Account[]
Если выбрали Вариант B (отдельная таблица):
- Обновить seed-own-companies.ts → писать в own_company_accounts через отдельный upsert по (own_company_id + bank_bik + account)
Открытые вопросы¶
- mdCompanyId — seed намеренно не заполняет и не перезаписывает; получить через API МД в задаче 41
- Множественные счета — отдельная таблица
own_company_accounts, реализовано вalatyr-serviceкоммитом627b6d2 - Артём email в ЕГРИП (
artemius06@gmail.com) — писать в отдельное полеowner_email? Сейчас в схеме нет. - Дата регистрации ИП (14.08.2017 и 29.01.2026) — писать в отдельное поле
registration_date? Полезно для UI, сейчас в схеме нет.