♻️ Create getRedemptionHandlerFromRewardId function
Returns the reward redeption handler function given a reward id
This commit is contained in:
@@ -20,6 +20,34 @@ import { timeoutFriend } from "./actions/timeoutFriend";
|
|||||||
|
|
||||||
const LOG_PREFIX = "[PubSub] ";
|
const LOG_PREFIX = "[PubSub] ";
|
||||||
|
|
||||||
|
type RedemptionHandler = (
|
||||||
|
msg: RedemptionMessage
|
||||||
|
) => Promise<RedemptionMessage | undefined>;
|
||||||
|
|
||||||
|
function getRedemptionHandlerFromRewardId(rewardId: string): RedemptionHandler {
|
||||||
|
const noop = (message: RedemptionMessage): Promise<RedemptionMessage> => {
|
||||||
|
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) {
|
async function onRedemption(message: PubSubRedemptionMessage) {
|
||||||
console.log(
|
console.log(
|
||||||
`${LOG_PREFIX}Reward: "${message.rewardTitle}" (${message.rewardId}) redeemed by ${message.userDisplayName}`
|
`${LOG_PREFIX}Reward: "${message.rewardTitle}" (${message.rewardId}) redeemed by ${message.userDisplayName}`
|
||||||
@@ -43,41 +71,17 @@ async function onRedemption(message: PubSubRedemptionMessage) {
|
|||||||
|
|
||||||
let handledMessage: RedemptionMessage | undefined;
|
let handledMessage: RedemptionMessage | undefined;
|
||||||
|
|
||||||
try {
|
const redemptionHandler = getRedemptionHandlerFromRewardId(msg.rewardId);
|
||||||
// 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}`);
|
|
||||||
|
|
||||||
handledMessage = msg;
|
try {
|
||||||
break;
|
handledMessage = await redemptionHandler(msg);
|
||||||
}
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (e instanceof Error) {
|
if (e instanceof Error) {
|
||||||
console.error(`${LOG_PREFIX}${e.message}`);
|
console.error(`${LOG_PREFIX}${e.message}`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (handledMessage) {
|
if (typeof handledMessage !== "undefined") {
|
||||||
const rewardEnumValues = Object.values(RedemptionIds);
|
const rewardEnumValues = Object.values(RedemptionIds);
|
||||||
const rewardIdValueIndex = rewardEnumValues.indexOf(
|
const rewardIdValueIndex = rewardEnumValues.indexOf(
|
||||||
// @ts-expect-error String is not assignable to... but all keys are strings
|
// @ts-expect-error String is not assignable to... but all keys are strings
|
||||||
|
Reference in New Issue
Block a user