From dbbdeb5f5b1efd5f6d80512c40c19388c82368ed Mon Sep 17 00:00:00 2001 From: Boaz Poolman Date: Mon, 24 Jan 2022 20:48:59 +0100 Subject: [PATCH] feat: Update relations entities on import --- server/config/type.js | 18 +++++++++++++++++- server/utils/getArrayDiff.js | 21 ++++++++++++++++++++- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/server/config/type.js b/server/config/type.js index be9cba1..06087e6 100644 --- a/server/config/type.js +++ b/server/config/type.js @@ -1,6 +1,6 @@ const { isEmpty } = require('lodash'); const { logMessage, sanitizeConfig, dynamicSort, noLimit, getCombinedUid, getCombinedUidWhereFilter, getUidParamsFromName } = require('../utils'); -const difference = require('../utils/getArrayDiff'); +const { difference, same } = require('../utils/getArrayDiff'); const ConfigType = class ConfigType { constructor({ queryString, configName, uid, jsonFields, relations }) { @@ -106,6 +106,7 @@ const ConfigType = class ConfigType { const configToAdd = difference(configContent[relationName], existingConfig[relationName], relationSortFields); const configToDelete = difference(existingConfig[relationName], configContent[relationName], relationSortFields); + const configToUpdate = same(configContent[relationName], existingConfig[relationName], relationSortFields); await Promise.all(configToDelete.map(async (config) => { const whereClause = {}; @@ -125,6 +126,21 @@ const ConfigType = class ConfigType { data: { ...config, [parentName]: entity.id }, }); })); + + await Promise.all(configToUpdate.map(async (config, index) => { + const whereClause = {}; + relationSortFields.map((sortField) => { + whereClause[sortField] = config[sortField]; + }); + + await relationQueryApi.update({ + where: { + ...whereClause, + [parentName]: entity.id, + }, + data: { ...config, [parentName]: entity.id }, + }); + })); })); } } diff --git a/server/utils/getArrayDiff.js b/server/utils/getArrayDiff.js index 3e6feeb..a1584a3 100644 --- a/server/utils/getArrayDiff.js +++ b/server/utils/getArrayDiff.js @@ -10,4 +10,23 @@ const difference = (arrayOne, arrayTwo, compareKeys) => { }); }; -module.exports = difference; +const same = (arrayOne, arrayTwo, compareKeys) => { + return arrayOne.filter(({ + [compareKeys[0]]: id1, + [compareKeys[1]]: id2, + ...restOne + }) => { + return !arrayTwo.some(({ + [compareKeys[0]]: id3, + [compareKeys[1]]: id4, + ...restTwo + }) => id1 === id3 + && id2 === id4 + && JSON.stringify(restOne) === JSON.stringify(restTwo)); + }); +}; + +module.exports = { + difference, + same, +};