Source: service/card.js

"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", { value: true });
const createDebug = require("debug");
const http_status_1 = require("http-status");
const service_1 = require("../service");
const debug = createDebug('gmo-service:service:card');
/**
 * 会員クレジットカードサービス
 * @class
 */
class CardService extends service_1.Service {
    /**
     * 会員登録
     * @memberof services/member
     * @function saveMember
     * @param {ISaveMemberArgs} args 会員登録in
     * @param {string} args.siteId サイトID
     * @param {string} args.sitePass サイトパスワード
     * @param {string} args.memberId 会員ID
     * @param {string | undefined} args.memberName 会員名
     * @returns {Promise<ISaveMemberResult>} 会員登録out
     */
    saveMember(args) {
        return __awaiter(this, void 0, void 0, function* () {
            debug('requesting...', args);
            const result = yield this.request({
                expectedStatusCodes: [http_status_1.OK],
                uri: '/payment/SaveMember.idPass',
                method: 'POST',
                form: {
                    SiteID: args.siteId,
                    SitePass: args.sitePass,
                    MemberID: args.memberId,
                    MemberName: args.memberName
                }
            });
            return {
                memberId: result.MemberID
            };
        });
    }
    /**
     * 会員更新
     * @memberof services/member
     * @function updateMember
     * @param {IUpdateMemberArgs} args 会員更新in
     * @param {string} args.siteId サイトID
     * @param {string} args.sitePass サイトパスワード
     * @param {string} args.memberId 会員ID
     * @param {string | undefined} args.memberName 会員名
     * @returns {Promise<IUpdateMemberResult>} 会員更新out
     */
    updateMember(args) {
        return __awaiter(this, void 0, void 0, function* () {
            debug('requesting...', args);
            const result = yield this.request({
                expectedStatusCodes: [http_status_1.OK],
                uri: '/payment/UpdateMember.idPass',
                method: 'POST',
                form: {
                    SiteID: args.siteId,
                    SitePass: args.sitePass,
                    MemberID: args.memberId,
                    MemberName: args.memberName
                }
            });
            return {
                memberId: result.MemberID
            };
        });
    }
    /**
     * 会員削除
     * @memberof services/member
     * @function deleteMember
     * @param {ISaveMemberArgs} args 会員削除in
     * @param {string} args.siteId サイトID
     * @param {string} args.sitePass サイトパスワード
     * @param {string} args.memberId 会員ID
     * @returns {Promise<ISaveMemberResult>} 会員削除out
     */
    deleteMember(args) {
        return __awaiter(this, void 0, void 0, function* () {
            debug('requesting...', args);
            const result = yield this.request({
                expectedStatusCodes: [http_status_1.OK],
                uri: '/payment/DeleteMember.idPass',
                method: 'POST',
                form: {
                    SiteID: args.siteId,
                    SitePass: args.sitePass,
                    MemberID: args.memberId
                }
            });
            return {
                memberId: result.MemberID
            };
        });
    }
    /**
     * 会員参照
     * 指定されたサイトIDと会員IDの会員が存在しない場合、E01390002エラーが返却されるので注意
     * @memberof services/member
     * @function searchMember
     * @param {ISearchMemberArgs} args 会員参照in
     * @param {string} args.siteId サイトID
     * @param {string} args.sitePass サイトパスワード
     * @param {string} args.memberId 会員ID
     * @returns {Promise<ISearchMemberResult>} 会員参照out
     */
    searchMember(args) {
        return __awaiter(this, void 0, void 0, function* () {
            debug('requesting...', args);
            const result = yield this.request({
                expectedStatusCodes: [http_status_1.OK],
                uri: '/payment/SearchMember.idPass',
                method: 'POST',
                form: {
                    SiteID: args.siteId,
                    SitePass: args.sitePass,
                    MemberID: args.memberId
                }
            });
            return {
                memberId: result.MemberID,
                memberName: result.MemberName,
                deleteFlag: result.DeleteFlag
            };
        });
    }
    /**
     * カード登録・更新
     * @memberof services/card
     * @function saveCard
     * @param {ISaveCardArgs} args カード登録・更新in
     * @param {string} args.siteId サイトID
     * @param {string} args.sitePass サイトパスワード
     * @param {string} args.memberId 会員ID
     * @param {util.SeqMode} args.seqMode カード登録連番モード(0:論理モード(デフォルト)1:物理モード)
     * @param {number} args.cardSeq カード登録連番(登録時は、入力不可です。更新時は、更新する値を設定します。)
     * @param {string} args.defaultFlag 洗替・継続課金フラグ(0:継続課金対象としない(デフォルト)1:継続課金対象とする)
     * @param {string} args.cardName カード会社略称
     * @param {string} args.cardNo カード番号
     * @param {string} args.cardPass カードパスワード
     * @param {string} args.expire 有効期限
     * @param {string} args.holderName 名義人
     * @param {string} args.token トークン
     * @returns {Promise<ISaveCardResult>} カード登録・更新out
     */
    saveCard(args) {
        return __awaiter(this, void 0, void 0, function* () {
            debug('requesting...', args);
            const result = yield this.request({
                expectedStatusCodes: [http_status_1.OK],
                uri: '/payment/SaveCard.idPass',
                method: 'POST',
                form: {
                    SiteID: args.siteId,
                    SitePass: args.sitePass,
                    MemberID: args.memberId,
                    SeqMode: args.seqMode,
                    CardSeq: args.cardSeq,
                    DefaultFlag: args.defaultFlag,
                    CardName: args.cardName,
                    CardNo: args.cardNo,
                    CardPass: args.cardPass,
                    Expire: args.expire,
                    HolderName: args.holderName,
                    Token: args.token
                }
            });
            return {
                cardSeq: result.CardSeq,
                cardNo: result.CardNo,
                forward: result.Forward
                // brand: result.Brand,
                // domesticFlag: result.DomesticFlag,
                // issuerCode: result.IssuerCode,
                // debitPrepaidFlag: result.DebitPrepaidFlag,
                // debitPrepaidIssuerName: result.DebitPrepaidIssuerName,
                // forwardFinal: result.ForwardFinal
            };
        });
    }
    /**
     * カード削除
     * @memberof services/card
     * @function deleteCard
     * @param {IDeleteCardArgs} args カード削除in
     * @param {string} args.siteId サイトID
     * @param {string} args.sitePass サイトパスワード
     * @param {string} args.memberId 会員ID
     * @param {util.SeqMode} args.seqMode カード登録連番モード(0:論理モード(デフォルト)1:物理モード)
     * @param {string} args.cardSeq カード登録連番
     * @returns {Promise<IDeleteCardResult>} カード削除out
     */
    deleteCard(args) {
        return __awaiter(this, void 0, void 0, function* () {
            debug('requesting...', args);
            const result = yield this.request({
                expectedStatusCodes: [http_status_1.OK],
                uri: '/payment/DeleteCard.idPass',
                method: 'POST',
                form: {
                    SiteID: args.siteId,
                    SitePass: args.sitePass,
                    MemberID: args.memberId,
                    SeqMode: args.seqMode,
                    CardSeq: args.cardSeq
                }
            });
            return {
                cardSeq: result.CardSeq
            };
        });
    }
    /**
     * カード参照
     * 会員は存在してカードが存在しない場合、E01240002エラーが返却されるので注意
     * @memberof services/card
     * @function searchCard
     * @param {ISearchCardArgs} args カード参照in
     * @param {string} args.siteId サイトID
     * @param {string} args.sitePass サイトパスワード
     * @param {string} args.memberId 会員ID
     * @param {util.SeqMode} args.seqMode カード登録連番モード(0:論理モード1:物理モード)
     * @param {string} args.cardSeq カード登録連番
     * @returns {Promise<ISearchCardResult[]>} カード参照out
     */
    searchCard(args) {
        return __awaiter(this, void 0, void 0, function* () {
            debug('requesting...', args);
            const result = yield this.request({
                expectedStatusCodes: [http_status_1.OK],
                uri: '/payment/SearchCard.idPass',
                method: 'POST',
                form: {
                    SiteID: args.siteId,
                    SitePass: args.sitePass,
                    MemberID: args.memberId,
                    SeqMode: args.seqMode,
                    CardSeq: args.cardSeq
                }
            });
            const cardSeqArry = result.CardSeq.split('|');
            const defaultFlagArry = result.DefaultFlag.split('|');
            const cardNameArry = result.CardName.split('|');
            const cardNoArry = result.CardNo.split('|');
            const expireArry = result.Expire.split('|');
            const holderNameArry = result.HolderName.split('|');
            const deleteFlagArry = result.DeleteFlag.split('|');
            return cardSeqArry.map((cardSeq, index) => {
                return {
                    cardSeq: cardSeq,
                    defaultFlag: defaultFlagArry[index],
                    cardName: cardNameArry[index],
                    cardNo: cardNoArry[index],
                    expire: expireArry[index],
                    holderName: holderNameArry[index],
                    deleteFlag: deleteFlagArry[index]
                };
            });
        });
    }
}
exports.CardService = CardService;