ТЗ выгрузка данных YC в свою БД
Документация YClients
developers.yclients.com/r... Данные необходимо сохранять в БД PostgreSQL, размещенную на reg.ru
Таблицы:
1 Записи
2 Клиенты
2.1 Категории клиентов
3 Сотрудники
3.1 Должности сотрудников
4 Услуги
4.1 Сотрудники, оказывающие услугу
5 Финансовые операции
5.1 Категория операции
5.2 Касса
6 Таблица синхронизации. Поля: сущность, порядковый номер последней записи (нужна для того, чтобы очередной проход синхронизации стартовать с конкретного места, а не с начала)
Порядок синхронизации
1. Запуск скрипта
2. Авторизация
3. Выгружаем список сотрудников
4. Загружаем список услуг
5. Синхронизируем список всех клиентов (по алгоритму ниже)
6. Синхронизируем список всех записей (по алгоритму ниже)
7. Синхронизируем список всех финансовых операций
Общий алгоритм синхронизации пагинированных данных:
Смотрим последнюю запись в нашей БД, берем ее id. Смотрим последний порядковый номер записи из таблицы 6
Делаем запрос с нужной страницы. Например, если последний сохраненный порядковый номер 524, то делаем запрос с pageSize = 200 и pageNumber = 3. Таким образом, последняя сохраненная запись попадет в текущую страницу. Проверяем, что id записи из ответа запроса по порядковому номеру из таблицы 6 равен последнему id из нашей таблицы. Иначе говоря, проверяем, что ничего не добавилось/удалилось из начала таблицы.
Если все ок: синхронизируем данные дальше (отправляем запросы на следующие страницы при необходимости), все сохраняем в нашу таблицу. При достижении последней записи сохраняем информацию по ней в таблицу 6
Если не ок (id отличаются для одинаковых порядковых номеров в запросе и нашей таблице): удаляем все записи из таблицы и зависимые от нее записи, начинаем синхронизацию с первой страницы.
Авторизация
developers.yclients.com/r... Запрос сотрудников
developers.yclients.com/r... Запрос не панированный. Получили данные, все сохранили в БД. Должность сотрудника сохраняем в таблицу 3.1
Запрос услуг
developers.yclients.com/r... Запрос не пагинированный. Массив staff сохраняем в таблицу 4.1.
Запрос клиентов
developers.yclients.com/r... Body имеет следующий вид:
{
"page": 1,
"page_size": 25,
"fields": [
"id",
"name"
],
"order_by": "name",
"order_by_direction": "desc",
"operation": "AND",
"filters": []
}
Какие параметры указывать в body
page номер страницы по алгоритму
page_size 200
fields:
"id"
"name"
"phone"
"email"
"card"
"birth_date"
"comment"
"discount"
"sex_id"
"sex"
"sms_check"
"sms_bot"
"sms_not"
"balance"
"importance_id"
"importance"
"categories"
"last_change_date"
"custom_fields"
order_by: id
order_by_direction: asc
operation: AND
filters: []
Массив categories записывается в отдельную таблицу 2.1
Запрос записей
developers.yclients.com/r... Параметры для query
page номер страницы по алгоритму
page_size = 200
Массив services ссылки не соответствующие услуги из таблицы 4
Массив staff ссылки на соответствующие записи из таблицы 3
Client ссылка на запись из таблицы 2
Document не сохраняем
Запрос финансовых операций
developers.yclients.com/r... поле «expense» пишем в отдельную таблицу 5.1 категорий финансовых операций, финансовая операция имеет ссылку на эту запись
Поле «account» пишем в отдельную таблицу «кассы» 5.2. Финансовая операция имеет ссылку на эту запись
Поле «client» ссылка на запись клиента
Важно
В таблицах должны быть проставлены все необходимые ключи и индексы для возможности поиска клиентов по категориям/сотрудникам, оказавшим услугу и тд