From 8423db2858cadd25c0a56245ea9bbf51a3b841f0 Mon Sep 17 00:00:00 2001 From: Tom Butcher Date: Sun, 26 Jul 2026 15:00:37 +0100 Subject: [PATCH] Implemented a merge utility function for object updates in database.js to handle array merging correctly, enhancing cache update logic for improved data integrity. --- src/database/database.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) 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:', {