Синхронізація
Синхронізація даних між різними системами це завжди виклик для розробника, адже збудувати надійний ETL це затратно по часу, а також не завжди зручно. Вам потрібно завжди слідкувати за "джерелом правди" та зберігати ідентифікатори записів в суміжних системах для подальшої upsert стратегії (update or insert).
remoteId
Керуй на рівні архітектури до основних сутностей через API додає таке зручне поле remoteId
Це ідентифікатор даних з вашого "джерела правди". Він не є обов'язковим, але якщо ви його передаєте, то значення повинно бути унікальним.
remoteId дозволяє вам при синхронізації даних використовувати його для наступних обмінів. Завдяки цьому для синхронізації даних в Керуй вам не потрібно на своїй стороні зберігати id значення з Керуй.
Upsert мутації
Окрім стандартних create/update/delete мутацій в Керуй API є також окремі upsert мутації котрі дозволяють вам простіше синхронізувати дані. Вони працюють за принципом update or insert. Тобто ви просто викликаєте потрібну вам upsert мутацію з необхідним ідентифікатором або вашим remoteId і Керуй сам вирішить чи цей запис потрібно створити, чи оновити. Наразі наше API надає наступні upsert мутації
upsertItem
upsertAddress
upsertLocation
upsertContragent
upsertDocument
upsertDocumentItem
upsertTaxon
Приклад з номенклатурою
Для прикладу візьмемо синхронізацію номенклатури з вашої БД в Керуй.

Запит
mutation ($input: UpsertItemInput!) {
upsertItem(input: $input) {
id
remoteId
name
sku
basePrice
}
}mutation ($input: UpsertItemInput!) {
upsertItem(input: $input) {
id
remoteId
name
sku
basePrice
}
}mutation ($input: UpsertItemInput!) {
upsertItem(input: $input) {
id
remoteId
name
sku
basePrice
}
}Змінні
{
"input": {
"remoteId": "your_db_id",
"context": "CARGO",
"name": "Вино Шардоне, Колоніст / Chardonnay, Kolonist, біле сухе 13.5% 0.75л",
"basePrice": 999
}
}{
"input": {
"remoteId": "your_db_id",
"context": "CARGO",
"name": "Вино Шардоне, Колоніст / Chardonnay, Kolonist, біле сухе 13.5% 0.75л",
"basePrice": 999
}
}{
"input": {
"remoteId": "your_db_id",
"context": "CARGO",
"name": "Вино Шардоне, Колоніст / Chardonnay, Kolonist, біле сухе 13.5% 0.75л",
"basePrice": 999
}
}Відповідь
{
"data": {
"upsertItem": {
"basePrice": "999",
"id": "9dc7f7af-abe6-4e31-89e4-057f0a9c7c84",
"name": "Вино Шардоне, Колоніст / Chardonnay, Kolonist, біле сухе 13.5% 0.75л",
"remoteId": "your_db_id",
"sku": "1000014"
}
}
}{
"data": {
"upsertItem": {
"basePrice": "999",
"id": "9dc7f7af-abe6-4e31-89e4-057f0a9c7c84",
"name": "Вино Шардоне, Колоніст / Chardonnay, Kolonist, біле сухе 13.5% 0.75л",
"remoteId": "your_db_id",
"sku": "1000014"
}
}
}{
"data": {
"upsertItem": {
"basePrice": "999",
"id": "9dc7f7af-abe6-4e31-89e4-057f0a9c7c84",
"name": "Вино Шардоне, Колоніст / Chardonnay, Kolonist, біле сухе 13.5% 0.75л",
"remoteId": "your_db_id",
"sku": "1000014"
}
}
}Керуй в цьому випадку використав значення вашого remoteId та створив відповідний запис у таблицю номенклатур. ID та SKU були згенеровані автоматично, але remoteId може бути використаний для наступних обмінів даними.
Для прикладу у товару змінилась ціна і ви передаєте ту саму мутацію, але вже з іншими змінними (змінилась basePrice)
Запит
{
"input": {
"remoteId": "your_db_id",
"context": "CARGO",
"name": "Вино Шардоне, Колоніст / Chardonnay, Kolonist, біле сухе 13.5% 0.75л",
"basePrice": 699
}
}{
"input": {
"remoteId": "your_db_id",
"context": "CARGO",
"name": "Вино Шардоне, Колоніст / Chardonnay, Kolonist, біле сухе 13.5% 0.75л",
"basePrice": 699
}
}{
"input": {
"remoteId": "your_db_id",
"context": "CARGO",
"name": "Вино Шардоне, Колоніст / Chardonnay, Kolonist, біле сухе 13.5% 0.75л",
"basePrice": 699
}
}Відповідь
{
"data": {
"upsertItem": {
"basePrice": "699",
"id": "9dc7f7af-abe6-4e31-89e4-057f0a9c7c84",
"name": "Вино Шардоне, Колоніст / Chardonnay, Kolonist, біле сухе 13.5% 0.75л",
"remoteId": "your_db_id",
"sku": "1000014"
}
}
}{
"data": {
"upsertItem": {
"basePrice": "699",
"id": "9dc7f7af-abe6-4e31-89e4-057f0a9c7c84",
"name": "Вино Шардоне, Колоніст / Chardonnay, Kolonist, біле сухе 13.5% 0.75л",
"remoteId": "your_db_id",
"sku": "1000014"
}
}
}{
"data": {
"upsertItem": {
"basePrice": "699",
"id": "9dc7f7af-abe6-4e31-89e4-057f0a9c7c84",
"name": "Вино Шардоне, Колоніст / Chardonnay, Kolonist, біле сухе 13.5% 0.75л",
"remoteId": "your_db_id",
"sku": "1000014"
}
}
}Як бачите, запис оновився з новим значенням ціни
Пріоритети ідентифікаторів
Для upsert мутацій дуже важливий пріоритет ідентифікаторів, якщо ви вирішили в 1 запиті передати id та remoteIdто основним ключем синхронізації буде саме id
Детальніше про пріоритети ідентифікаторів ви можете ознайомити в анотації для API документації кожної окремої upser мутації