refactor: reorganize scripts - move debug code to experiments/
- Move debug/test scripts from src/scripts/ to experiments/ - Remove test-detail-endpoint from package.json - Delete temp-product-page.html - Move E2E_GUIDE.md to docs/ - Add experiments/README.md with documentation - Keep only production scripts in src/scripts/ - Clean up tsconfig.json exclude list (experiments are now outside src/) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
158
docs/E2E_GUIDE.md
Normal file
158
docs/E2E_GUIDE.md
Normal file
@@ -0,0 +1,158 @@
|
||||
# Руководство по скрапингу товаров Магнит
|
||||
|
||||
## 📋 Обзор
|
||||
|
||||
Процесс состоит из двух этапов:
|
||||
1. **Базовый скрапинг** - получение списка товаров через API поиска
|
||||
2. **Обогащение деталями** - получение бренда, описания, веса для каждого товара
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Этап 1: Базовый скрапинг
|
||||
|
||||
### Что делает:
|
||||
- Сканирует каталог товаров через API поиска
|
||||
- Сохраняет базовую информацию: название, цена, рейтинг, изображение
|
||||
- Сохраняет товары в базу данных с `isDetailsFetched = false`
|
||||
|
||||
### Запуск:
|
||||
```bash
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
### Опционально: указать магазин
|
||||
```bash
|
||||
MAGNIT_STORE_CODE=992301 pnpm dev
|
||||
```
|
||||
|
||||
### Результат:
|
||||
- В таблице `Product` появляются записи с базовыми данными
|
||||
- Поля `brand`, `description`, `weight`, `unit` пустые
|
||||
- `isDetailsFetched = false`
|
||||
|
||||
---
|
||||
|
||||
## ✨ Этап 2: Обогащение деталями
|
||||
|
||||
### Что делает:
|
||||
- Получает товары с `isDetailsFetched = false`
|
||||
- Для каждого товара запрашивает детали через специальный API endpoint
|
||||
- Обновляет: бренд, описание, вес, единицу измерения
|
||||
- Ставит `isDetailsFetched = true`
|
||||
|
||||
### Запуск:
|
||||
```bash
|
||||
pnpm enrich
|
||||
```
|
||||
|
||||
### Опционально: указать магазин
|
||||
```bash
|
||||
MAGNIT_STORE_CODE=992301 pnpm enrich
|
||||
```
|
||||
|
||||
### Результат:
|
||||
- Поля `brand`, `description`, `weight`, `unit` заполнены
|
||||
- Все товары имеют `isDetailsFetched = true`
|
||||
|
||||
---
|
||||
|
||||
## 🔄 Полный цикл (последовательный)
|
||||
|
||||
```bash
|
||||
# 1. Базовый скрапинг
|
||||
pnpm dev
|
||||
|
||||
# 2. Обогащение деталями
|
||||
pnpm enrich
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🧪 Тестирование
|
||||
|
||||
### Проверить соединение с БД:
|
||||
```bash
|
||||
pnpm test-db
|
||||
```
|
||||
|
||||
### Проверить detail endpoint:
|
||||
```bash
|
||||
pnpm test-detail-endpoint
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 Проверка результатов
|
||||
|
||||
### Через SQL:
|
||||
```sql
|
||||
-- Количество товаров
|
||||
SELECT COUNT(*) FROM "Product";
|
||||
|
||||
-- Сколько обогащено
|
||||
SELECT
|
||||
COUNT(*) FILTER (WHERE "isDetailsFetched" = true) as enriched,
|
||||
COUNT(*) FILTER (WHERE "isDetailsFetched" = false) as pending
|
||||
FROM "Product";
|
||||
|
||||
-- Процент NULL полей
|
||||
SELECT
|
||||
'brand' as field,
|
||||
ROUND(100.0 * SUM(CASE WHEN brand IS NULL THEN 1 ELSE 0 END) / COUNT(*), 2) as null_percent
|
||||
FROM "Product"
|
||||
UNION ALL
|
||||
SELECT 'description', ROUND(100.0 * SUM(CASE WHEN description IS NULL THEN 1 ELSE 0 END) / COUNT(*), 2) FROM "Product"
|
||||
UNION ALL
|
||||
SELECT 'weight', ROUND(100.0 * SUM(CASE WHEN weight IS NULL THEN 1 ELSE 0 END) / COUNT(*), 2) FROM "Product"
|
||||
UNION ALL
|
||||
SELECT 'unit', ROUND(100.0 * SUM(CASE WHEN unit IS NULL THEN 1 ELSE 0 END) / COUNT(*), 2) FROM "Product";
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ Управление миграциями
|
||||
|
||||
### Создать и применить миграцию:
|
||||
```bash
|
||||
pnpm prisma:migrate --name название_миграции
|
||||
```
|
||||
|
||||
### Пересоздать Prisma Client:
|
||||
```bash
|
||||
pnpm prisma:generate
|
||||
```
|
||||
|
||||
### Открыть Prisma Studio:
|
||||
```bash
|
||||
pnpm prisma:studio
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ Возможные проблемы
|
||||
|
||||
### Advisory lock при миграции
|
||||
Если при миграции возникает `P1002` error:
|
||||
```bash
|
||||
# Перезапустить PostgreSQL контейнер
|
||||
docker restart supermarket-postgres
|
||||
```
|
||||
|
||||
### 403 Forbidden при скрапинге
|
||||
Скрапер автоматически переинициализирует сессию. Проверьте логи.
|
||||
|
||||
### Пустые результаты
|
||||
Проверьте, что магазин с указанным `MAGNIT_STORE_CODE` существует.
|
||||
|
||||
---
|
||||
|
||||
## 📝 Доступные команды
|
||||
|
||||
| Команда | Описание |
|
||||
|---------|----------|
|
||||
| `pnpm dev` | Базовый скрапинг товаров |
|
||||
| `pnpm enrich` | Обогащение деталями |
|
||||
| `pnpm test-db` | Проверка соединения с БД |
|
||||
| `pnpm test-detail-endpoint` | Тест detail API |
|
||||
| `pnpm type-check` | Проверка типов TypeScript |
|
||||
| `pnpm prisma:studio` | GUI для работы с БД |
|
||||
Reference in New Issue
Block a user