UNPKG

@vtexlab/planner-contracts

Version:

Contracts to use in an Eventual-Driven Architecture (EDA)

36 lines (35 loc) 1.62 kB
import { CaseType } from "../utils/enums"; import { toKebabCase } from "../utils/transformCase"; import { v4 as uuidv4 } from "uuid"; import { getMessageContext, getMessageType } from "../decorators/context"; export class Message { constructor(baseData) { var _a; this.Context = getMessageContext(this); this.Type = getMessageType(this); this.TopicName = `${this.Context}_${this.constructor.messageName(undefined, this.Type)}`; this.CorrelationId = (_a = baseData.correlationId) !== null && _a !== void 0 ? _a : uuidv4(); this.Timestamp = new Date(); this.Account = { Id: baseData.accountId, Name: baseData.accountName }; this.AuthToken = baseData.authToken; this.TopicName = `${this.Context}_${Message.messageName(baseData.caseTypeFormat, this.Type)}`; } static topicName(caseType = CaseType.KebabCase) { return `${getMessageContext(this)}_${this.messageName(caseType)}`; } static queueName(consumerName, caseType = CaseType.KebabCase) { return `${getMessageContext(this)}_${consumerName}_${this.messageName(caseType)}`; } static messageName(caseType = CaseType.KebabCase, messageType = undefined) { switch (caseType) { case CaseType.KebabCase: return toKebabCase(messageType !== null && messageType !== void 0 ? messageType : getMessageType(this)); case CaseType.NoCase: default: return messageType !== null && messageType !== void 0 ? messageType : getMessageType(this); } } }