UNPKG

mares-tcomb-domain-helper

Version:

domain layer에서 tcomb를 이용하여 구현시, private method가 담기는 helper의 최상단 클래스입니다.

158 lines (141 loc) 5.05 kB
# mares-tcomb-domain-helper domain layer에서 tcomb를 이용하여 구현시, private method가 담기는 helper의 최상단 클래스입니다. ## Installation `npm install --save mares-tcomb-domain-helper` ## Example ```javascript const BaseDomainHelper = require('mares-tcomb-domain-helper') class ReceiverHelper extends BaseDomainHelper { static do() {} } module.exports = ReceiverHelper ``` ## Detail Example 다음코드는 실제 구현된 코드의 일부이다. 다음과 같이 helper를 생성해서 domain po를 generate하거나, combine함수를 이용해 객체를 변경할 수 있다. 기본적으로 tcomb는 불변이기 때문에 단순 변경은 허용되지 않는다. ```javascript const t = require('tcomb-validation') const BaseDomainHelper = require('mares-tcomb-domain-helper') const Receiver = require('../values/receiver') const Template = require('../../template/entities/template') const {codes, std} = require('../../../../infra/meta') const {HttpStatus} = require('http-status') let Message = t.struct({ _id: t.maybe(t.String), key: t.String, type: t.enums.of(Object.values(std.enum.messageType)), template: Template, memo: t.maybe(t.String), receivers: t.maybe(t.list(Receiver)), crtAt: t.maybe(t.String), udtAt: t.maybe(t.String) }, 'Message') const helper = new BaseDomainHelper(Message) /** * API 문자를 생성한다. * @param {Template} template - template domain * @param {string} key - key * @param {string} memo - memo * @returns {Message} */ Message.generateAPIMessage = (template, {key, memo}) => { return helper.generate({ template: template, key, memo, type: std.enum.messageType.multiple }) } /** * api 용 문자 발송, 문자를 받아서, 수신자를 생성한다. * @param {Message} message - message domain * @param {Object[]} receiverInfos - 수신자 정보 * @param {string} receiverInfos[].phone - 수신자 전화번호 * @param {Object[]} receiverInfos[].replacementInfos - 문자 내용 * @param {string} receiverInfos[].replacementInfos[].key - 변환자 키 * @param {string} receiverInfos[].replacementInfos[].value - 변환자 내용 */ Message.createMessageAndReceiverForAPIMessage = (message, receiverInfos) => { Message.isValidAPIMessage(message.type) let receiverDomains = Receiver.createReceiversAsInfo(message, receiverInfos) return BaseDomainHelper.combine(message, { receivers: receiverDomains }) } /** * 일반 문자발송. 일반문자는 템플릿을 이용하여 문자메세지 및 수신자를 생성 후 이벤트를 발생시킨다. * @param {Template} template - template domain * @param {string} key - key * @param {string} memo - memo * @param {Object[]} receiverInfos - 수신자 정보 * @param {string} receiverInfos[].phone - 수신자 전화번호 * @param {Object[]} receiverInfos[].replacementInfos - 문자 내용 * @param {string} receiverInfos[].replacementInfos[].key - 변환자 키 * @param {string} receiverInfos[].replacementInfos[].value - 변환자 내용 * @returns {Message} */ Message.createMessageAndReceiverForNormalMessage = (template, {key, memo}, receiverInfos) => { let messageDomain = BaseDomainHelper.create(Message, { template: template, memo, key, type: std.enum.messageType.once }) let receiverDomains = Receiver.createReceiversAsInfo(messageDomain, receiverInfos) return helper.combine({ receivers: receiverDomains }) } /** * 올바른 API 메세지 타입인지 검사한다. */ Message.isValidAPIMessage = (type) => { let isValid = type === std.enum.messageType.multiple if (!isValid) { helper.throwRefineError(HttpStatus.BAD_REQUEST, codes.invalidMessage) } } /** * 올바른 API 메세지 타입인지와 키값을 검사한다. */ Message.isValidAPIMessageWithKey = (type, key) => { let isValid = type === std.enum.messageType.multiple let isValidKey = typeof key === 'string' if (!isValid&&!isValidKey) { helper.throwRefineErrorObject(HttpStatus.BAD_REQUEST, { code: codes.invalidMessage, param: 'type', value: type, domain: 'Message', }) } } /** * 수신자 상태를 상태코드와 함께 변경한다 * @param {string} code - 상태코드 * @param {Object} receiver - 변경전 수신자 도메인 object * @param {string} receiver.phone * @returns {Receiver} 변경 후 수신자 도메인 */ Message.updateReceiverToSuccess = (receiver, code) => { let receiverDomain = BaseDomainHelper.create(Receiver, receiver) return helper.combine({ code: code, status: std.enum.receiverStatus.success }) } /** * 수신자 상태를 상태코드와 함께 변경한다 * @param {string} code - 상태코드 * @param {Object} receiver - 변경전 수신자 도메인 object * @param {string} receiver.phone * @returns {Receiver} 변경 후 수신자 도메인 */ Message.updateReceiverToFail = (receiver, code) => { let receiverDomain = BaseDomainHelper.create(Receiver, receiver) return helper.combine({ code: code, status: std.enum.receiverStatus.fail }) } module.exports = Message ```