import { handleAddXp, handleAddBalance, handleReplyMessage, handleXpBoost, handleTempRole, handleColorRole, handleLootbox } from "./effect.handlers"; import type { EffectHandler, ValidatedEffectPayload } from "./effect.types"; import { EffectPayloadSchema } from "./effect.types"; import { UserError } from "@shared/lib/errors"; import type { Transaction } from "@shared/lib/types"; export const effectHandlers: Record = { 'ADD_XP': handleAddXp, 'ADD_BALANCE': handleAddBalance, 'REPLY_MESSAGE': handleReplyMessage, 'XP_BOOST': handleXpBoost, 'TEMP_ROLE': handleTempRole, 'COLOR_ROLE': handleColorRole, 'LOOTBOX': handleLootbox }; export async function validateAndExecuteEffect( effect: unknown, userId: string, tx: Transaction ) { const result = EffectPayloadSchema.safeParse(effect); if (!result.success) { throw new UserError(`Invalid effect configuration: ${result.error.message}`); } const handler = effectHandlers[result.data.type]; if (!handler) { throw new UserError(`Unknown effect type: ${result.data.type}`); } return handler(userId, result.data, tx); }