diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..ad92582 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "editor.formatOnSave": true +} diff --git a/Server/api/servers.js b/Server/api/servers.js index dd8f980..eec32ad 100644 --- a/Server/api/servers.js +++ b/Server/api/servers.js @@ -134,18 +134,27 @@ module.exports = (R, $) => { // last, add new roles newRoles = [...newRoles, ...sanitizedAdded] - if (!arrayMatches(currentRoles, newRoles)) { - if (process.env.FF_TransactionalRoles !== '0') { - await $.discord.updateRolesTx(gm, { - added: sanitizedAdded, - removed: sanitizedRemoved, - }) - } else { - await $.discord.updateRoles(gm, newRoles) + let status = null + + try { + if (!arrayMatches(currentRoles, newRoles)) { + if (process.env.FF_TransactionalRoles !== '0') { + const ret = await $.discord.updateRolesTx(gm, { + added: sanitizedAdded, + removed: sanitizedRemoved, + }) + status = ret.toObject().status + } else { + await $.discord.updateRoles(gm, newRoles) + } } + } catch (e) { + ctx.status = 400 + ctx.body = { ok: false } + return } - ctx.body = { ok: true } + ctx.body = { ok: true, status } $.P.invalidate(userId) $.discord.invalidate(userId) diff --git a/Server/services/discord.js b/Server/services/discord.js index 0fa688c..5419e43 100644 --- a/Server/services/discord.js +++ b/Server/services/discord.js @@ -1,6 +1,11 @@ const Service = require('./Service') const superagent = require('superagent') -const { DiscordClient, Member, RoleTransaction, TxDelta } = require('@roleypoly/rpc/discord') +const { + DiscordClient, + Member, + RoleTransaction, + TxDelta, +} = require('@roleypoly/rpc/discord') const { IDQuery, DiscordUser } = require('@roleypoly/rpc/shared') const { Empty } = require('google-protobuf/google/protobuf/empty_pb') const { NodeHttpTransport } = require('@improbable-eng/grpc-web-node-http-transport') @@ -158,7 +163,7 @@ class DiscordService extends Service { async updateRolesTx(memberObj, { added, removed }) { const roleTx = new RoleTransaction() roleTx.setMember(this.memberToQueryProto(memberObj)) - + for (let toAdd of added) { const delta = new TxDelta() delta.setAction(TxDelta.Action.ADD) @@ -173,7 +178,7 @@ class DiscordService extends Service { roleTx.addDelta(delta) } - await this.rpc.updateMemberRoles(roleTx, this.sharedHeaders) + return this.rpc.updateMemberRoles(roleTx, this.sharedHeaders) } memberToQueryProto(member) { diff --git a/UI/package-lock.json b/UI/package-lock.json index f71dc20..0157987 100644 --- a/UI/package-lock.json +++ b/UI/package-lock.json @@ -15935,6 +15935,11 @@ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, + "uikit": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/uikit/-/uikit-3.4.4.tgz", + "integrity": "sha512-VTDqtTUTH2XiGw0MudWki4oPl+Bxt3JEm5S/CE1B9zUmt9/FqKRYxv/7s5GSeNMnRMSQa2evQTkLSGsdBmKXdA==" + }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", diff --git a/UI/package.json b/UI/package.json index 24541ef..a0a07b6 100644 --- a/UI/package.json +++ b/UI/package.json @@ -24,6 +24,7 @@ "redux-logger": "^3.0.6", "redux-thunk": "^2.3.0", "superagent": "^5.2.2", + "uikit": "^3.4.4", "uuid": "^3.3.3" }, "scripts": { diff --git a/UI/public/index.html b/UI/public/index.html index 8428745..15608bf 100644 --- a/UI/public/index.html +++ b/UI/public/index.html @@ -1,16 +1,34 @@ - - - - + + + + Roleypoly - - - - - + + + + +