Инвентаризация: DEV: Синхронизация
Механизм синхронихации между БД
Объекты
Хорошо бы иметь общую БД таких объектов как
- Производители
- Написание производителей
- Типы оборудования
- Модели оборудования
- ПО
- Типы лицензий
- Схемы лицензирования
- Контрагенты (надо убрать из них приватную часть)
Режимы синхронизации
Направление
- Прием
- передача
- двусторонняя синхронизация
Создание/Обновление
- Добавление новых
- обновление существующих
- добавление+обновление
Регламент
- Вызываем какой-то консольный контроллер, передаем аргументами учетные данные от другой базы
- Запрашиваем через API список объектов из другой базы
- В зависимости от выставленных режимов
- Добавляем/обновляем локальные
- Добавляем/удаляем удаленные
- При обновлении/добавлении нужно четко понимать что поля-ссылки нельзя передавать в исходном виде.
- При необходимости надо понимать куда ссылается исходный объект и искать такой-же на второй системе
- Учитывая необходимость исправлять ссылки на лету, логично все затолкать в один котроллер, чтобы в процессе синхронизации держать удаленные объекты разных типов в памяти, а не загружать постоянно
Вложения
Нужно разрешить extend вложений в типах и моделях оборудования
При сравнении объектов дополнительно запрашивать сравнение сканов:
- Выбираем дату самого свежего скана с обеих сторон - таким образом определяем направление обновления
- Определив направление сравниваем сканы поименно с учетом размера и даты
- При наличии различий - обновляем в нужном направлении
Прочее
Возможно логичнее все сделать в виде внешнего ПО работающего через REST API, чтобы ограничиться работой с REST, а не делать часть задач через локальную БД
С другой стороны полезно встроить в саму инвентори с точки зрения добавления Моделей/Софта/Производителей на лету подтягивая из «облака» при необходимости
Всем синхронизируемым объектам надо добавить поле updated_at и заполнить его
Зависимости
Для корректной простановки ссылок:
Грузим все объекты с одной стороны для понимания кто куда ссылается
Также согласно зависимостей их надо поселедовательно добавлять во вторую систему
Производители Типы оборудования | \ \ / Написание ПО Модели оборудования
Что использовать в качестве ключа?
Как обнаруживать переименование объектов, например производителя
хз
типы оборудования по коду, а все остальное походу по имени
В случае получения в БД переименованного объекта и перестановки ссылок на него, старый должен оказаться не используемым и может быть удален (если не найден в источнике синхронизации)
Вопрос с удалением отсутствующих объектов
В процессе перепривязывания ссылок можно обнаруживать ссылки на какие объекты были отвязаны
Потом перепровеврить все отвязанные объекты на предмет допустимости удаления, если отвязанный объект осиротел - удаляем