From 4ffd5014df0fa99b89eca9c8de005db7026747d0 Mon Sep 17 00:00:00 2001 From: Kata Date: Tue, 4 Feb 2020 08:10:04 -0500 Subject: [PATCH] feat(Server): invalidate caches on changes --- Server/api/servers.js | 14 +++++++++++++- Server/services/discord.js | 9 +++++++++ Server/services/presentation.js | 11 ++++++++++- 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/Server/api/servers.js b/Server/api/servers.js index 8c7d5bb..58f76a1 100644 --- a/Server/api/servers.js +++ b/Server/api/servers.js @@ -89,7 +89,11 @@ module.exports = (R, $) => { ...(categories != null ? { categories } : {}), }) + ctx.body = { ok: true } + + $.P.invalidate(id) + $.discord.invalidate(id) }) R.get('/api/admin/servers', async ctx => { @@ -131,8 +135,16 @@ module.exports = (R, $) => { // last, add new roles newRoles = [...newRoles, ...sanitizedAdded] - await $.discord.updateRoles(gm, newRoles) + if (!arrayMatches(currentRoles, newRoles)) { + await $.discord.updateRoles(gm, newRoles) + } ctx.body = { ok: true } + + $.P.invalidate(userId) + $.discord.invalidate(userId) }) } + +const arrayMatches = (a, b) => +a.length === b.length && a.reduce((_, aValue) => b.contains(aValue), true) \ No newline at end of file diff --git a/Server/services/discord.js b/Server/services/discord.js index 8341c92..2a43625 100644 --- a/Server/services/discord.js +++ b/Server/services/discord.js @@ -238,6 +238,15 @@ class DiscordService extends Service { return returnVal } + + invalidate(deadKey) { + const keys = this.cache.keys() + for (let key of keys) { + if (key.includes(deadKey)) { + this.cache.del(key) + } + } + } } module.exports = DiscordService diff --git a/Server/services/presentation.js b/Server/services/presentation.js index 40f5b56..c02fe44 100644 --- a/Server/services/presentation.js +++ b/Server/services/presentation.js @@ -58,7 +58,7 @@ class PresentationService extends Service { roles: serverRoles, message: serverData.message, categories: serverData.categories, - perms: this.discord.getPermissions(member, serverRoles, server), + perms: this.discord.getPermissions(member, serverRoles), } }) } @@ -74,6 +74,15 @@ class PresentationService extends Service { return returnVal } + + invalidate(deadKey) { + const keys = this.cache.keys() + for (let key of keys) { + if (key.includes(deadKey)) { + this.cache.del(key) + } + } + } } module.exports = PresentationService