mares-tcomb-domain-helper
v1.0.10
Published
domain layer에서 tcomb를 이용하여 구현시, private method가 담기는 helper의 최상단 클래스입니다.
Downloads
8
Readme
mares-tcomb-domain-helper
domain layer에서 tcomb를 이용하여 구현시, private method가 담기는 helper의 최상단 클래스입니다.
Installation
npm install --save mares-tcomb-domain-helper
Example
const BaseDomainHelper = require('mares-tcomb-domain-helper')
class ReceiverHelper extends BaseDomainHelper {
static do() {}
}
module.exports = ReceiverHelper
Detail Example
다음코드는 실제 구현된 코드의 일부이다. 다음과 같이 helper를 생성해서 domain po를 generate하거나, combine함수를 이용해 객체를 변경할 수 있다. 기본적으로 tcomb는 불변이기 때문에 단순 변경은 허용되지 않는다.
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