202 lines
7.0 KiB
Markdown
202 lines
7.0 KiB
Markdown
# 📥 Импорт воронок в базу данных
|
||
|
||
Этот скрипт позволяет импортировать все существующие воронки из папки `public/funnels/` в базу данных MongoDB.
|
||
|
||
## 🚀 Быстрый старт
|
||
|
||
```bash
|
||
# 1. Убедитесь что MongoDB запущен и настроен .env.local
|
||
npm run import:funnels
|
||
```
|
||
|
||
## 📋 Требования
|
||
|
||
### 1. MongoDB подключение
|
||
Убедитесь что в `.env.local` указан правильный `MONGODB_URI`:
|
||
|
||
```bash
|
||
# .env.local
|
||
MONGODB_URI=mongodb://localhost:27017/witlab-funnel
|
||
# или для MongoDB Atlas:
|
||
# MONGODB_URI=mongodb+srv://username:password@cluster.mongodb.net/witlab-funnel
|
||
```
|
||
|
||
### 2. Структура файлов
|
||
Скрипт ищет JSON файлы в папке `public/funnels/`. Каждый файл должен содержать валидную структуру воронки:
|
||
|
||
```json
|
||
{
|
||
"meta": {
|
||
"id": "unique-funnel-id",
|
||
"title": "Название воронки",
|
||
"description": "Описание воронки",
|
||
"firstScreenId": "screen-1"
|
||
},
|
||
"screens": [
|
||
{
|
||
"id": "screen-1",
|
||
"template": "info",
|
||
"title": { "text": "Заголовок" }
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
## 📊 Что делает скрипт
|
||
|
||
### ✅ Проверяет и валидирует
|
||
- Подключение к MongoDB
|
||
- Структуру JSON файлов
|
||
- Наличие обязательных полей (`meta.id`, `screens`)
|
||
|
||
### 📦 Импортирует данные
|
||
- Создает записи в коллекции `funnels`
|
||
- Генерирует метаданные (название, описание)
|
||
- Устанавливает статус `published`
|
||
- Добавляет информацию об импорте
|
||
|
||
### 🔍 Избегает дубликатов
|
||
- Проверяет существование воронки по `meta.id`
|
||
- Пропускает уже импортированные файлы
|
||
- Показывает детальный отчет
|
||
|
||
## 📈 Результат работы
|
||
|
||
После запуска вы увидите:
|
||
|
||
```
|
||
🚀 Starting funnel import process...
|
||
|
||
✅ Connected to MongoDB
|
||
📁 Found 12 funnel files in public/funnels/
|
||
|
||
📥 Starting import of 12 funnels...
|
||
|
||
[1/12] Processing funnel-test.json...
|
||
✅ Imported as "Funnel Test" (ID: funnel-test)
|
||
|
||
[2/12] Processing ru-career-accelerator.json...
|
||
⏭️ Skipped - already exists (ID: ru-career-accelerator)
|
||
|
||
...
|
||
|
||
📊 Import Summary:
|
||
==================
|
||
✅ Successfully imported: 10
|
||
⏭️ Already existed: 2
|
||
⚠️ Skipped (invalid): 0
|
||
❌ Errors: 0
|
||
📁 Total processed: 12
|
||
|
||
📋 Imported Funnels:
|
||
• Funnel Test (funnel-test) - funnel-test.json
|
||
• Career Accelerator (ru-career-accelerator) - ru-career-accelerator.json
|
||
...
|
||
|
||
🎉 Import process completed!
|
||
```
|
||
|
||
## 🎯 Генерация метаданных
|
||
|
||
Скрипт автоматически генерирует удобные названия и описания:
|
||
|
||
### Название воронки
|
||
1. **Из `meta.title`** (если есть)
|
||
2. **Из `meta.id`** преобразованного в читаемый вид
|
||
- `funnel-test` → `Funnel Test`
|
||
- `ru-career-accelerator` → `Ru Career Accelerator`
|
||
3. **По умолчанию**: `Imported Funnel`
|
||
|
||
### Описание воронки
|
||
1. **Из `meta.description`** (если есть)
|
||
2. **Автогенерация** на основе:
|
||
- Количества экранов: "Воронка с 5 экранами"
|
||
- Используемых шаблонов: "Типы: info, form, list"
|
||
- Источника: "Импортирована из JSON файла"
|
||
|
||
## 🗃️ Структура в базе данных
|
||
|
||
Каждая импортированная воронка сохраняется как:
|
||
|
||
```json
|
||
{
|
||
"_id": "ObjectId",
|
||
"funnelData": { /* Оригинальная структура JSON */ },
|
||
"name": "Сгенерированное название",
|
||
"description": "Сгенерированное описание",
|
||
"status": "published",
|
||
"version": 1,
|
||
"createdBy": "import-script",
|
||
"usage": { "totalViews": 0, "totalCompletions": 0 },
|
||
"createdAt": "2025-01-27T02:13:24.000Z",
|
||
"updatedAt": "2025-01-27T02:13:24.000Z",
|
||
"publishedAt": "2025-01-27T02:13:24.000Z"
|
||
}
|
||
```
|
||
|
||
## 🔧 Устранение проблем
|
||
|
||
### Ошибка подключения к MongoDB
|
||
```
|
||
❌ Failed to connect to MongoDB: connect ECONNREFUSED 127.0.0.1:27017
|
||
```
|
||
**Решение**: Запустите MongoDB или проверьте `MONGODB_URI`
|
||
|
||
### Файлы не найдены
|
||
```
|
||
📭 No funnel files found to import.
|
||
```
|
||
**Решение**: Убедитесь что JSON файлы находятся в `public/funnels/`
|
||
|
||
### Валидационные ошибки
|
||
```
|
||
⚠️ Validation warnings for example.json: Missing meta.id
|
||
```
|
||
**Решение**: Проверьте структуру JSON файла
|
||
|
||
### Дубликаты в базе
|
||
```
|
||
⏭️ Skipped - already exists (ID: funnel-test)
|
||
```
|
||
**Это нормально**: Скрипт не перезаписывает существующие воронки
|
||
|
||
## 📱 После импорта
|
||
|
||
### Где найти импортированные воронки
|
||
1. **Админка**: `http://localhost:3000/admin`
|
||
2. **Прямой доступ**: `http://localhost:3000/{funnel-id}`
|
||
3. **Редактирование**: `/admin/builder/{database-id}`
|
||
|
||
### Что можно делать
|
||
- ✅ Редактировать в билдере
|
||
- ✅ Дублировать и создавать вариации
|
||
- ✅ Просматривать статистику
|
||
- ✅ Экспортировать обратно в JSON
|
||
- ✅ Публиковать/архивировать
|
||
|
||
### Совместимость
|
||
- ✅ Оригинальные JSON файлы продолжают работать
|
||
- ✅ Импортированные воронки имеют приоритет при загрузке
|
||
- ✅ Полная обратная совместимость
|
||
|
||
## 🔄 Повторный запуск
|
||
|
||
Скрипт можно запускать несколько раз:
|
||
- **Безопасно**: не создает дубликаты
|
||
- **Умно**: импортирует только новые файлы
|
||
- **Быстро**: пропускает уже обработанные
|
||
|
||
## 📝 Логи и отчеты
|
||
|
||
Скрипт выводит подробную информацию:
|
||
- 📁 Количество найденных файлов
|
||
- 🔄 Прогресс обработки каждого файла
|
||
- ✅ Успешные импорты с деталями
|
||
- ⚠️ Предупреждения и пропуски
|
||
- ❌ Ошибки с объяснениями
|
||
- 📊 Итоговая сводка
|
||
|
||
---
|
||
|
||
**💡 Совет**: Запустите скрипт после настройки базы данных, чтобы быстро мигрировать все существующие воронки в новую админку!
|