Скрипт для выгрузки данных из API в базу PostgreSQL
ТЗ выгрузка данных YC в свою БД
Документация YClients https://developers.yclients.com/ru/#operation/Получить%20список%20клиентов Данные необходимо сохранять в БД PostgreSQL, размещенную на reg.ru
Таблицы: 1 Записи 2 Клиенты 2.1 Категории клиентов 3 Сотрудники 3.1 Должности сотрудников 4 Услуги 4.1 Сотрудники, оказывающие услугу 5 Финансовые операции 5.1 Категория операции 5.2 Касса 6 Таблица синхронизации. Поля: сущность, порядковый номер последней записи (нужна для того, чтобы очередной проход синхронизации стартовать с конкретного места, а не с начала)
Порядок синхронизации
- Запуск скрипта
- Авторизация
- Выгружаем список сотрудников
- Загружаем список услуг
- Синхронизируем список всех клиентов (по алгоритму ниже)
- Синхронизируем список всех записей (по алгоритму ниже)
- Синхронизируем список всех финансовых операций
Если все ок: синхронизируем данные дальше (отправляем запросы на следующие страницы при необходимости), все сохраняем в нашу таблицу. При достижении последней записи сохраняем информацию по ней в таблицу 6 Если не ок (id отличаются для одинаковых порядковых номеров в запросе и нашей таблице): удаляем все записи из таблицы и зависимые от нее записи, начинаем синхронизацию с первой страницы.
Авторизация https://developers.yclients.com/ru/#operation/Авторизовать%20пользователя
Запрос сотрудников https://developers.yclients.com/ru/#operation/Получить%20список%20сотрудников%20/%20конкретного%20сотрудника Запрос не панированный. Получили данные, все сохранили в БД. Должность сотрудника сохраняем в таблицу 3.1
Запрос услуг https://developers.yclients.com/ru/#operation/Получить%20список%20услуг%20/%20конкретную%20услугу Запрос не пагинированный. Массив staff сохраняем в таблицу 4.1.
Запрос клиентов https://developers.yclients.com/ru/#operation/Получить%20список%20клиентов 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
Запрос записей https://developers.yclients.com/ru/#operation/Получить%20список%20записей Параметры для query page - номер страницы по алгоритму page_size = 200 Массив services - ссылки не соответствующие услуги из таблицы 4 Массив staff - ссылки на соответствующие записи из таблицы 3 Client - ссылка на запись из таблицы 2 Document - не сохраняем
Запрос финансовых операций https://developers.yclients.com/ru/#tag/Finansovye-tranzakcii поле «expense» пишем в отдельную таблицу 5.1 категорий финансовых операций, финансовая операция имеет ссылку на эту запись Поле «account» пишем в отдельную таблицу «кассы» 5.2. Финансовая операция имеет ссылку на эту запись Поле «client» - ссылка на запись клиента
Важно В таблицах должны быть проставлены все необходимые ключи и индексы для возможности поиска клиентов по категориям/сотрудникам, оказавшим услугу и тд