From 4f020fe0c34dbf916b2d6413fa9504d754ba7dae Mon Sep 17 00:00:00 2001 From: Alec LaLonde Date: Thu, 11 Feb 2021 16:02:20 -0700 Subject: [PATCH] Added trigger for player.rank update --- hasura/metadata/tables.yaml | 11 +++++++++ packages/backend/package.json | 5 ++-- .../backend/src/handlers/triggers/handler.ts | 2 ++ .../handlers/triggers/updateDiscordRole.ts | 24 +++++++++++++++++++ packages/discord-bot/package.json | 1 + packages/discord-bot/src/index.ts | 4 ++++ packages/discord-bot/src/types.d.ts | 4 ++++ 7 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 packages/backend/src/handlers/triggers/updateDiscordRole.ts create mode 100644 packages/discord-bot/src/types.d.ts diff --git a/hasura/metadata/tables.yaml b/hasura/metadata/tables.yaml index 3e171825..3b7c2614 100644 --- a/hasura/metadata/tables.yaml +++ b/hasura/metadata/tables.yaml @@ -337,6 +337,17 @@ interval_sec: 10 timeout_sec: 60 webhook_from_env: TRIGGERS_ENDPOINT + - name: player_rank_updated + definition: + enable_manual: false + update: + columns: + - rank + retry_conf: + num_retries: 0 + interval_sec: 10 + timeout_sec: 60 + webhook_from_env: TRIGGERS_ENDPOINT - table: schema: public name: player_account diff --git a/packages/backend/package.json b/packages/backend/package.json index 3a663466..ab8c0b67 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -19,6 +19,7 @@ "license": "ISC", "dependencies": { "3box": "1.22.2", + "@metafam/discord-bot": "^0.1.0", "@metafam/utils": "1.0.0", "bluebird": "3.7.2", "body-parser": "1.19.0", @@ -26,16 +27,16 @@ "express": "4.17.1", "express-graphql": "0.11.0", "graphql": "15.4.0", + "graphql-request": "3.2.0", "graphql-tag": "2.11.0", "graphql-tools": "7.0.2", "imgix-core-js": "2.3.2", "node-fetch": "2.6.1", - "graphql-request": "3.2.0", "sourcecred": "0.7.6" }, "devDependencies": { - "@types/express": "4.17.9", "@types/bluebird": "3.5.32", + "@types/express": "4.17.9", "@types/node-fetch": "2.5.7", "concurrently": "5.3.0", "ts-node-dev": "1.1.1" diff --git a/packages/backend/src/handlers/triggers/handler.ts b/packages/backend/src/handlers/triggers/handler.ts index 12013c27..2ec104c6 100644 --- a/packages/backend/src/handlers/triggers/handler.ts +++ b/packages/backend/src/handlers/triggers/handler.ts @@ -3,9 +3,11 @@ import { ParamsDictionary } from 'express-serve-static-core'; import { fetchBoxVerifiedAccounts } from './fetchBoxVerifiedAccounts'; import { TriggerPayload } from './types'; +import { updateDiscordRole } from './updateDiscordRole'; const TRIGGERS = { fetchBoxVerifiedAccounts, + updateDiscordRole }; export const triggerHandler = async ( diff --git a/packages/backend/src/handlers/triggers/updateDiscordRole.ts b/packages/backend/src/handlers/triggers/updateDiscordRole.ts new file mode 100644 index 00000000..acd40ab7 --- /dev/null +++ b/packages/backend/src/handlers/triggers/updateDiscordRole.ts @@ -0,0 +1,24 @@ +import { UpdateRole } from '@metafam/discord-bot'; + +import { AccountType_Enum, Player } from '../../lib/autogen/hasura-sdk'; +import { TriggerPayload } from './types'; + +export const updateDiscordRole = async ( + payload: TriggerPayload, +) => { + const {old: oldPlayer, new: newPlayer} = payload.event.data; + + const discordPlayerAccount = newPlayer?.Accounts.find(a => a.type === AccountType_Enum.Discord); + + if (discordPlayerAccount?.identifier == null) return; + + const newRank = newPlayer?.rank; + + if (newRank == null) return; + + const discordPayload: UpdateRole = { + previousRole: oldPlayer?.rank?.toString(), + newRole: newRank + } + // todo call API in discord-bot repo +}; diff --git a/packages/discord-bot/package.json b/packages/discord-bot/package.json index 05aa5a42..041559bc 100644 --- a/packages/discord-bot/package.json +++ b/packages/discord-bot/package.json @@ -15,6 +15,7 @@ }, "author": "", "license": "ISC", + "types": "src/types.d.ts", "dependencies": { "@typeit/discord": "4.0.9", "discord.js": "12.5.1", diff --git a/packages/discord-bot/src/index.ts b/packages/discord-bot/src/index.ts index 2c83bfdd..3bb4c43f 100644 --- a/packages/discord-bot/src/index.ts +++ b/packages/discord-bot/src/index.ts @@ -2,6 +2,7 @@ import { Client } from '@typeit/discord'; import { CONFIG } from './config'; +import * as types from './types'; async function start() { const client = new Client({ @@ -17,3 +18,6 @@ async function start() { } start(); + + +export { types }; diff --git a/packages/discord-bot/src/types.d.ts b/packages/discord-bot/src/types.d.ts new file mode 100644 index 00000000..1ccc632a --- /dev/null +++ b/packages/discord-bot/src/types.d.ts @@ -0,0 +1,4 @@ +export interface UpdateRole { + previousRole: string | undefined; + newRole: string; +}