diff --git a/src/database/database.js b/src/database/database.js index 98d2343..da9334a 100644 --- a/src/database/database.js +++ b/src/database/database.js @@ -37,6 +37,13 @@ cacheLogger.level = config.server.logLevel; const CACHE_TTL_SECONDS = parseInt(config.database.redis.cacheTtl || '30', 10); +const mergeObjectUpdates = (target, source) => + _.mergeWith(target, source, (objValue, srcValue) => { + if (Array.isArray(objValue) || Array.isArray(srcValue)) { + return srcValue; + } + }); + export const retrieveObjectCache = async ({ model, id, populate = [] }) => { if (!model || !id) return undefined; @@ -79,13 +86,13 @@ export const updateObjectCache = async ({ model, id, object, populate = [] }) => for (const key of matchingKeys) { logger.trace('Updating object cache:', key); const cachedObject = (await redisServer.getKey(key)) || {}; - const mergedObject = _.merge(cachedObject, object); + const mergedObject = mergeObjectUpdates(cachedObject, object); await redisServer.setKey(key, mergedObject, CACHE_TTL_SECONDS); mergedObjects.push(mergedObject); } const cacheObject = (await redisServer.getKey(cacheKey)) || {}; - const mergedObject = _.merge(cacheObject, object); + const mergedObject = mergeObjectUpdates(cacheObject, object); await redisServer.setKey(cacheKey, mergedObject, CACHE_TTL_SECONDS); cacheLogger.trace('Updated object cache:', {