4418e09211
- cooptypes: типы и интерфейсы экосистемы с подробной архитектурой - sdk: TypeScript SDK с быстрым стартом и описанием классов - notifications: библиотека уведомлений с таблицей 21 workflow - contracts: смарт-контракты EOSIO с описанием чистой архитектуры - migrator: утилита миграций с жизненным циклом - docs: документация MkDocs Material с инструкцией по синхронизации Co-authored-by: Alex Ant <dacom-dark-sun@users.noreply.github.com>
83 lines
5.0 KiB
Markdown
83 lines
5.0 KiB
Markdown
# 🔄 migrator
|
|
|
|
> Утилита миграции данных между версиями платформы «Цифровой Кооператив»
|
|
|
|
## Описание
|
|
|
|
`migrator` — система автоматических миграций для данных и смарт-контрактов платформы. Использует паттерн фабрики для динамической загрузки и последовательного выполнения миграционных скриптов. Отслеживает состояние миграций через JSON-файл и гарантирует применение только новых, ещё не выполненных миграций.
|
|
|
|
Поддерживает несколько окружений (`local`, `test`, `prod`) с раздельной конфигурацией через `.env` файлы.
|
|
|
|
## Возможности
|
|
|
|
- **Автоматическое отслеживание** — JSON-файл состояния хранит последнюю выполненную миграцию для каждого окружения
|
|
- **Инкрементальное применение** — выполняются только новые миграции, пропуская уже применённые
|
|
- **Паттерн Factory** — динамическая загрузка миграционных скриптов через `MigrationFactory`
|
|
- **Множество окружений** — раздельные `.env` файлы для `local`, `test` и `prod`
|
|
- **Утилиты** — вспомогательные функции для работы с черновиками документов, переводами и блокчейн-операциями
|
|
|
|
## Установка
|
|
|
|
```bash
|
|
pnpm install --filter migrator
|
|
```
|
|
|
|
## Скрипты
|
|
|
|
| Скрипт | Описание |
|
|
|--------|----------|
|
|
| `pnpm run local` | Запуск миграций для локального окружения |
|
|
| `pnpm run test` | Запуск миграций для тестового окружения |
|
|
| `pnpm run prod` | Запуск миграций для production-окружения |
|
|
|
|
> Все скрипты запускаются из корня монорепозитория через фильтр: `pnpm --filter migrator run <скрипт>`
|
|
|
|
## Конфигурация
|
|
|
|
Создайте `.env` файлы для каждого окружения в корне компонента:
|
|
|
|
- `local.env` — локальная разработка
|
|
- `test.env` — тестовое окружение
|
|
- `prod.env` — production
|
|
|
|
Основные переменные: endpoint блокчейна, приватные ключи для подписи транзакций. Подробности — в примерах `.env` файлов.
|
|
|
|
## Архитектура
|
|
|
|
```
|
|
├── migrations/ # Миграционные скрипты
|
|
│ ├── 043_edit_selected_draft.ts
|
|
│ ├── 044_create_drafts.ts
|
|
│ └── ... # Нумерованные по порядку
|
|
├── src/
|
|
│ ├── index.ts # Точка входа — загрузка .env и запуск
|
|
│ ├── migrator.ts # Основная логика: загрузка состояния, выполнение миграций
|
|
│ ├── factory.ts # Фабрика загрузки миграционных скриптов
|
|
│ ├── migration_interface.ts # Интерфейс миграции
|
|
│ ├── eos.ts # Утилиты для работы с блокчейном EOSIO
|
|
│ └── utils/ # Вспомогательные утилиты
|
|
│ ├── createDraft.ts # Создание черновиков документов
|
|
│ ├── editDraft.ts # Редактирование черновиков
|
|
│ ├── editTranslation.ts # Работа с переводами
|
|
│ └── dirname.ts # ESM-совместимый __dirname
|
|
└── migration_state.json # Состояние выполненных миграций (per-env)
|
|
```
|
|
|
|
### Жизненный цикл миграции
|
|
|
|
1. Загружается файл состояния `migration_state.json`
|
|
2. Определяется последняя выполненная миграция для текущего окружения
|
|
3. Из директории `migrations/` выбираются все скрипты после последней выполненной
|
|
4. Каждая миграция загружается через `MigrationFactory` и выполняется последовательно
|
|
5. После успешного выполнения состояние обновляется
|
|
|
|
## Тестирование
|
|
|
|
```bash
|
|
pnpm --filter migrator run test
|
|
```
|
|
|
|
## Лицензия
|
|
|
|
[BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.ru)
|