mares-tcomb-domain-helper

1.0.10 • Public • Published

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
 

Package Sidebar

Install

npm i mares-tcomb-domain-helper

Weekly Downloads

2

Version

1.0.10

License

ISC

Unpacked Size

18.9 kB

Total Files

4

Last publish

Collaborators

  • hwaranglee
  • sngsng
  • piorio0919
  • kspark