Перейти к содержанию

Import

Импорт данных из CSV файлов.

Возможности

  • Загрузка CSV с предпросмотром
  • Автоматическое определение кодировки (UTF-8, Windows-1251)
  • Маппинг полей
  • Upsert (обновление или создание)
  • Импорт товаров по категориям

API

Загрузка и предпросмотр

POST /api/import/upload
Content-Type: multipart/form-data

file: products.csv
encoding: utf8  // или windows-1251

// Response
{
  "fileId": "import-123456-products.csv",
  "headers": ["Название", "Артикул", "Цена", "Остаток"],
  "rowCount": 150,
  "preview": [
    { "Название": "Товар 1", "Артикул": "SKU001", ... },
    ...
  ]
}

Выполнение импорта

POST /api/import/execute
{
  "fileId": "import-123456-products.csv",
  "categoryId": 5,
  "updateExisting": true,
  "mapping": {
    "name": "Название",
    "sku": "Артикул",
    "salePrice": "Цена продажи",
    "purchasePrice": "Закупочная цена",
    "unit": "Ед.изм.",
    "stock": "Остаток",
    "parameters": {
      "weight": "Вес",
      "size": "Размер"
    }
  }
}

// Response
{
  "total": 150,
  "created": 120,
  "updated": 25,
  "skipped": 5,
  "errors": [
    { "row": 45, "message": "Duplicate SKU" }
  ]
}

Отмена импорта

DELETE /api/import/cancel/:fileId

Получить шаблон

GET /api/import/template/:categoryId

// Response
{
  "baseFields": [
    { "key": "name", "label": "Название", "required": true },
    { "key": "sku", "label": "Артикул", "required": false },
    ...
  ],
  "parameters": [
    { "key": "weight", "label": "Вес", "type": "number", "unit": "кг" }
  ]
}

Формат CSV

  • Разделитель: ; (точка с запятой)
  • Кодировка: UTF-8 или Windows-1251 (автоопределение)
  • Первая строка: заголовки
Название;Артикул;Цена;Остаток
Товар 1;SKU001;5000;100
Товар 2;SKU002;7500;50

Upsert логика

При updateExisting: true: 1. Ищем по SKU 2. Если не найдено — ищем по externalId 3. Если найдено — обновляем 4. Если не найдено — создаём