diff --git a/packages/twenty-server/src/engine/twenty-orm/storage/promise-memoizer.storage.ts b/packages/twenty-server/src/engine/twenty-orm/storage/promise-memoizer.storage.ts index 61bc465cb..942a1d36f 100644 --- a/packages/twenty-server/src/engine/twenty-orm/storage/promise-memoizer.storage.ts +++ b/packages/twenty-server/src/engine/twenty-orm/storage/promise-memoizer.storage.ts @@ -8,7 +8,7 @@ type AsyncFactoryCallback = () => Promise; const ONE_HOUR_IN_MS = 3600_000; export class PromiseMemoizer { - private cache = new Map(); + private cache = new Map(); private pending = new Map>(); private ttlMs: number; @@ -21,13 +21,13 @@ export class PromiseMemoizer { factory: AsyncFactoryCallback, onDelete?: (value: T) => Promise | void, ): Promise { - const now = Date.now(); - await this.clearExpiredKeys(onDelete); const cachedEntry = this.cache.get(cacheKey); if (cachedEntry) { + cachedEntry.lastUsed = Date.now(); + return cachedEntry.value; } @@ -47,7 +47,7 @@ export class PromiseMemoizer { const value = await factory(); if (value) { - this.cache.set(cacheKey, { value, ttl: now + this.ttlMs }); + this.cache.set(cacheKey, { value, lastUsed: Date.now() }); } return value; @@ -65,7 +65,7 @@ export class PromiseMemoizer { const now = Date.now(); for (const [cacheKey, cachedEntry] of this.cache.entries()) { - if (cachedEntry.ttl < now) { + if (cachedEntry.lastUsed < now - this.ttlMs) { await this.clearKey(cacheKey, onDelete); } }