diff --git a/api/src/engine/engine.service.ts b/api/src/engine/engine.service.ts index 7008ebe8daefe54091c5aee824b5eadd30da3fed..97ff0b4687613a9e8eb7863ab0e4814aa19d1ce6 100644 --- a/api/src/engine/engine.service.ts +++ b/api/src/engine/engine.service.ts @@ -31,6 +31,10 @@ import { FilterConfiguration } from './models/filter/filter-configuration'; import { FormulaOperation } from './models/formula/formula-operation.model'; import { Variable } from './models/variable.model'; +const DOMAINS_CACHE_KEY = 'domains'; +const ALGORITHMS_CACHE_KEY = 'experiments'; +const CACHE_KEYS = [DOMAINS_CACHE_KEY, ALGORITHMS_CACHE_KEY]; + /** * Engine service. * This class is used as a Proxy to the real Connector. @@ -102,17 +106,18 @@ export default class EngineService implements Connector { return result; } - async getDomains(ids: string[], req: Request): Promise<Domain[]> { + async getDomains(req: Request): Promise<Domain[]> { const user = req?.user as User; - const key = user.id ? `domains-${ids.join('-')}-${user.id}` : undefined; + const key = user.id ? `${DOMAINS_CACHE_KEY}-${user.id}` : undefined; return this.getFromCacheOrCall<Domain[]>(key, () => - this.connector.getDomains(ids, req), + this.connector.getDomains(req), ); } async getAlgorithms(req: Request): Promise<Algorithm[]> { - const key = 'algorithms'; + const user = req?.user as User; + const key = user.id ? `${ALGORITHMS_CACHE_KEY}-${user.id}` : undefined; return this.getFromCacheOrCall<Algorithm[]>(key, () => this.connector.getAlgorithms(req), @@ -133,7 +138,7 @@ export default class EngineService implements Connector { ): Promise<Variable[]> { if (!domainId || varIds.length === 0) return []; - const domains = await this.getDomains([], request); + const domains = await this.getDomains(request); return ( domains @@ -217,6 +222,13 @@ export default class EngineService implements Connector { } async logout?(req?: Request): Promise<void> { + const user = req?.user as User; + + if (user && user.id) + CACHE_KEYS.map((key) => `${key}-${user.id}`).forEach((key) => + this.cacheManager.del(key), + ); + if (!this.connector.logout) throw new NotImplementedException(); return this.connector.logout(req); }