Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@skava/graphql / dist / endpoints / loyalty / transform.js
Size: Mime:
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
// import { autofixSafe as autofix } from 'exotic-core'
const chain_able_boost_1 = require("chain-able-boost");
const composition_1 = require("@skava/modules/___dist/composition");
// what is an lpoints vs apoints?!
const isLabelOrName = label => points => points.label === label || points.name === label;
// label:
const isCurrentPoints = isLabelOrName('balance');
const isEarnedPoints = isLabelOrName('totalApprovedPoints');
// name:
const isAdjustedPoints = isLabelOrName('adjustedPoints');
const isRedeemedPoints = isLabelOrName('redeemedPoints');
const isBalancedPoints = isLabelOrName('pendingPoints');
const isSkippedPoints = isLabelOrName('skippedPoints');
// inout
const isTransferredOutPoints = isLabelOrName('transferedOutPoints');
const isTransferredInPoints = isLabelOrName('transferedInPoints');
// approved n such
const isReverseApprovedPoints = isLabelOrName('reversedApprovedPoints');
const isExcludedPoints = isLabelOrName('excludedPoints');
const isCanceledApprovedPoints = isLabelOrName('canceledApprovedPoints');
// isLabelOrName('cappedPoints')
// isLabelOrName('canceledRedeemedPoints')
// isLabelOrName('reverseRedeemedPoints')
// isLabelOrName('expiredPoints')
// isLabelOrName('canceledPoints')
// isLabelOrName('canceledPoints')
// isLabelOrName('forfeitedPoints')
const FAKE_DATE_LIST = Object.freeze([
    '01/01/2018',
    '02/01/2018',
    '05/02/2018',
    '04/01/2018',
    '28/12/2017',
]);
const dateIterator = chain_able_boost_1.fromArrayToInfiniteIterator(FAKE_DATE_LIST);
const loyaltyTransactionsData = packages => {
    const { obj, string, array } = composition_1.getTyped(packages);
    const points = array('properties.buyinfo.loyalty.points');
    // @todo - prettydate
    const date = string('transactionDate.value') || dateIterator.next();
    const indexed = {
        /**
         * Added the same data to both startpoints & earned points
         * since seperate data is not availble in the call/fixture
         */
        start: points.find(isTransferredOutPoints).value,
        earned: points.find(isTransferredInPoints).value,
        // @todo unsafe
        adjusted: points.find(isAdjustedPoints).value,
        redeemed: points.find(isRedeemedPoints).value,
        balanced: points.find(isBalancedPoints).value,
    };
    // autofixSafe(indexed)
    return {
        // indexedPoints: indexed,
        startPoints: indexed.start,
        earnedPoints: indexed.earned,
        date,
        transactionDate: date,
        adjustedPoints: indexed.adjusted,
        redeemedPoints: indexed.redeemed,
        balancedPoints: indexed.balanced,
    };
};
const loyaltyPointsTransform = response => {
    console.log('loyaltyPointsTransform', response);
    const { array, obj, string, number } = composition_1.getTyped(response);
    const points = array('properties.userinfo[0].math.points');
    const current = points.find(isCurrentPoints);
    const earned = points.find(isEarnedPoints);
    const transformed = {
        type: string('type'),
        // count: obj('properties.state.count'),
        count: number('properties.state.count'),
        points,
        // @todo fix casing
        currentpoints: current,
        earnedpoints: earned,
    };
    return transformed;
};
const loyaltyTransactionTransform = response => {
    // console.dev('loyaltyTransactionTransform', response)
    const { string, array, number } = composition_1.getTyped(response);
    const packages = array('children.packages');
    const loyaltyTransactionResponse = {
        type: string('type'),
        count: number('properties.state.count'),
        // old name: loyaltypointsTableData
        transactionList: packages.map(loyaltyTransactionsData),
        earnedloyaltypoints: packages.map(loyaltyTransactionsData),
        loyaltypackages: packages,
    };
    return loyaltyTransactionResponse;
};
exports.loyaltyTransactionTransform = loyaltyTransactionTransform;
// unused
// const loyaltyCreateTransactionTransform = response => {
//   console.dev('loyaltyCreateTransactionTransform', response)
//   const { obj, string } = getTyped(response)
//   // this is wrong >>>>
//   // this gets passed 'properties.buyinfo.loyalty.points'
//   const loyaltyCreateTransactionResponse = {
//     type: string('type'),
//     responseMessage: string('responseMessage'),
//     properties: obj('properties'),
//     responseCode: string('responseCode'),
//   }
//   return loyaltyCreateTransactionResponse
// }
const loyaltyTransform = response => {
    // console.dev('inside transaction transform 0', response)
    const { obj } = composition_1.getTyped(response);
    const transaction = obj('transaction');
    const loyalty = obj('loyaltyPoints');
    const create = obj('createloyaltyTransaction');
    const loyaltyResponse = {
        transaction: loyaltyTransactionTransform(transaction),
        loyaltyPoints: loyaltyPointsTransform(loyalty),
    };
    return loyaltyResponse;
};
exports.loyaltyTransform = loyaltyTransform;
// generateRedemption?
// side effect free, as all transforms
// * 2 || * 1/2
const multiplierIterator = chain_able_boost_1.fromArrayToInfiniteIterator([1 / 2, 2]);
const generateLoyaltyTransactionsList = transformed => {
    const multiplier = +multiplierIterator.next();
    // console.dev(multiplierIterator, multiplier, 'mmmmmmmmmmmmm')
    const { startPoints, earnedPoints, transactionDate, redeemedPoints, adjustedPoints, balancedPoints, } = transformed;
    const transaction = {
        startPoints,
        earnedPoints,
        adjustedPoints,
        redeemedPoints,
        balancedPoints,
    };
    Object.keys(transaction).forEach(key => {
        // * multiplier...
        if (multiplier > 1) {
            transaction[key] = transaction[key] + 1;
        }
        else {
            transaction[key] = transaction[key] - 1;
        }
    });
    // @todo missing on type?
    transaction.transactionDate = dateIterator.next();
    // return autofixSafe(transaction)
    return transaction;
    // just generating list
    // return {
    //   // ...transformed,
    //   ...transaction,
    // }
};
const generateLoyaltyTransactionsFrom = listOfLists => {
    return listOfLists.map(generateLoyaltyTransactionsList);
};
exports.generateLoyaltyTransactionsFrom = generateLoyaltyTransactionsFrom;
exports.default = loyaltyTransform;
//# sourceMappingURL=transform.js.map