Neighbor's Preppy Maltese

    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
     

    Install

    npm i mares-tcomb-domain-helper

    DownloadsWeekly Downloads

    2

    Version

    1.0.10

    License

    ISC

    Unpacked Size

    18.9 kB

    Total Files

    4

    Last publish

    Collaborators

    • hwaranglee
    • sngsng
    • piorio0919
    • kspark