From ee127308ec3cb00caf85b1e66be328d477a23207 Mon Sep 17 00:00:00 2001
From: Steve Reis <stevereis93@gmail.com>
Date: Mon, 18 Jul 2022 14:16:32 +0200
Subject: [PATCH] feat: Reset user cache after logout

---
 api/src/engine/engine.service.ts | 22 +++++++++++++++++-----
 1 file changed, 17 insertions(+), 5 deletions(-)

diff --git a/api/src/engine/engine.service.ts b/api/src/engine/engine.service.ts
index 7008ebe..97ff0b4 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);
   }
-- 
GitLab