From 916d430a4d72b09323b93fcf7d6f0a654bce0e71 Mon Sep 17 00:00:00 2001 From: alexbcberio Date: Fri, 7 Jan 2022 12:08:17 +0100 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Create=20getRedemptionHand?= =?UTF-8?q?lerFromRewardId=20function?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Returns the reward redeption handler function given a reward id --- src/backend/pubSubClient/index.ts | 60 ++++++++++++++++--------------- 1 file changed, 32 insertions(+), 28 deletions(-) diff --git a/src/backend/pubSubClient/index.ts b/src/backend/pubSubClient/index.ts index e0244ce..d06b018 100644 --- a/src/backend/pubSubClient/index.ts +++ b/src/backend/pubSubClient/index.ts @@ -20,6 +20,34 @@ import { timeoutFriend } from "./actions/timeoutFriend"; const LOG_PREFIX = "[PubSub] "; +type RedemptionHandler = ( + msg: RedemptionMessage +) => Promise; + +function getRedemptionHandlerFromRewardId(rewardId: string): RedemptionHandler { + const noop = (message: RedemptionMessage): Promise => { + console.log(`${LOG_PREFIX}Unhandled redemption ${rewardId}`); + return Promise.resolve(message); + }; + + switch (rewardId) { + case RedemptionIds.GetVip: + return getVip; + case RedemptionIds.Hidrate: + return hidrate; + case RedemptionIds.HighlightMessage: + return highlightMessage; + case RedemptionIds.RussianRoulette: + return russianRoulette; + case RedemptionIds.StealVip: + return stealVip; + case RedemptionIds.TimeoutFriend: + return timeoutFriend; + default: + return noop; + } +} + async function onRedemption(message: PubSubRedemptionMessage) { console.log( `${LOG_PREFIX}Reward: "${message.rewardTitle}" (${message.rewardId}) redeemed by ${message.userDisplayName}` @@ -43,41 +71,17 @@ async function onRedemption(message: PubSubRedemptionMessage) { let handledMessage: RedemptionMessage | undefined; - try { - // TODO: extract to function - // Returns the executor function, then call it inside a try/catch - switch (msg.rewardId) { - case RedemptionIds.GetVip: - handledMessage = await getVip(msg); - break; - case RedemptionIds.Hidrate: - handledMessage = await hidrate(msg); - break; - case RedemptionIds.HighlightMessage: - handledMessage = await highlightMessage(msg); - break; - case RedemptionIds.RussianRoulette: - handledMessage = await russianRoulette(msg); - break; - case RedemptionIds.StealVip: - handledMessage = await stealVip(msg); - break; - case RedemptionIds.TimeoutFriend: - handledMessage = await timeoutFriend(msg); - break; - default: - console.log(`${LOG_PREFIX}Unhandled redemption ${msg.rewardId}`); + const redemptionHandler = getRedemptionHandlerFromRewardId(msg.rewardId); - handledMessage = msg; - break; - } + try { + handledMessage = await redemptionHandler(msg); } catch (e) { if (e instanceof Error) { console.error(`${LOG_PREFIX}${e.message}`); } } - if (handledMessage) { + if (typeof handledMessage !== "undefined") { const rewardEnumValues = Object.values(RedemptionIds); const rewardIdValueIndex = rewardEnumValues.indexOf( // @ts-expect-error String is not assignable to... but all keys are strings