# Перенос данных с GetCourse

Техническая инструкция: что переносится автоматически, что руками, и почему
автоматическая часть идёт часами. Ограничения ниже — их, а не наши: они следуют
из того, что API GetCourse отдаёт наружу.

## Что их API отдаёт

Через API GetCourse забираются:

- пользователи с контактами и дополнительными полями;
- группы;
- заказы;
- платежи.

Этого достаточно, чтобы люди оказались в новой установке с историей покупок.

## Что их API не отдаёт

| Что | Как переносится |
|---|---|
| Курсы, модули, уроки | Ручной выгрузкой либо собирается заново |
| Содержимое уроков | Копированием: разметка у платформ разная |
| Ответы учеников на задания | Ручной выгрузкой по подготовленному шаблону |
| Промокоды | Ручной выгрузкой |
| Сегменты | Собираются заново: язык условий другой |

Учебную структуру их API не создаёт и не отдаёт вовсе — ни в классическом API,
ни в Tech API. Ответы учеников тоже: это работа ваших учеников и кураторов
за годы, и переносится она выгрузкой, а не вызовом.

Планируйте эту часть временем человека, а не временем скрипта.

## Почему автоматическая часть идёт часами

Ограничения классического API GetCourse:

- **100 запросов экспорта за 2 часа на весь аккаунт** — не на ключ и не
  на интеграцию;
- **каждый опрос «готов ли файл» расходует квоту** — ожидание готовности стоит
  столько же, сколько заказ выгрузки;
- **экспорт однопоточный**: пока формируется один файл, второй не начнётся;
- **чтения одного объекта нет** — только массовая выгрузка.

База в десятки тысяч человек выгружается **часами**. Это закладывается в план
заранее, а не обнаруживается в день переезда.

Отсюда же требование к модулю переноса: **продолжать с места обрыва**. Процесс,
который идёт часами, обязан переживать разрыв связи и перезапуск.

## Порядок переноса

1. **Запустить перенос людей и истории покупок.** Автоматическая часть, идёт
   долго и без вашего участия.
2. **Собрать курсы в новой установке параллельно** — это ручная работа, ждать
   выгрузки для неё не нужно.
3. **Выдать доступы.** Соответствие «человек → курс» восстанавливается
   из перенесённых заказов; выдать можно руками или импортом.
4. **Проверить на себе:** войти учеником, открыть урок, отправить ответ.
5. **Переключить продажи** и только после этого отключать старое.

## Дата старта доступа — проверить отдельно

В новой установке **расписание курса считается от даты старта доступа**,
а не от даты оплаты и не от даты переноса.

При переносе дату старта надо проставить осознанно: иначе у перенесённых учеников
уроки откроются не тогда, когда они ожидают, — все разом либо не откроются вовсе.
Как устроены правила открытия — [Доступы](/guide/access/).

## Что проверить после переноса

- **число людей** совпадает с числом в старой школе;
- **у нескольких человек наугад** — контакты, дополнительные поля, история заказов;
- **доступы**: открывается ли курс у того, кто его купил;
- **даты открытия уроков** у перенесённого ученика — см. выше;
- **ответы учеников**, если переносились: на месте ли и видны ли куратору.

## Состояние

**Модуль переноса спроектирован, но не написан.** Сегодня автоматической части
нет: переносить придётся выгрузками целиком, включая людей и заказы.

Ограничения их API от появления модуля не изменятся — они такие же и будут
такими же. Поэтому страница описывает процесс, а не кнопку: процесс верен уже
сейчас.

Следить — в [Обновлениях](/changelog/).
