1.0.10 • Published 4 years ago

mares-tcomb-domain-helper v1.0.10

Weekly downloads
1
License
ISC
Repository
-
Last release
4 years ago

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
1.0.10

4 years ago

1.0.9

5 years ago

1.0.8

5 years ago

1.0.7

5 years ago

1.0.6

5 years ago

1.0.5

5 years ago

1.0.4

5 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago