1.0.6 • Published 3 years ago

poinco v1.0.6

Weekly downloads
4
License
MIT
Repository
-
Last release
3 years ago

Poinco

code style: prettier Github Actions License: MIT NPM version NPM downloads

Installation

Yarnを使う場合

$ yarn add poinco

npmを使う場合

$ npm install poinco

Usage

import { pay, Point } from 'poinco';

let points: Point[] = [];
points = [
  new Point(100, 'THE STAY SAPPORO', 'NORMAL', 'GET'),
  new Point(200, 'THE STAY SAPPORO', 'NORMAL', 'GET'),
  new Point(300, 'THE STAY SAPPORO', 'LIMITED', 'GET'),
  new Point(150, 'THE STAY SAPPORO', 'LIMITED', 'GET'),
  new Point(250, 'THE STAY SAPPORO', 'NORMAL', 'GET'),
  new Point(350, 'THE STAY SAPPORO', 'NORMAL', 'GET'),
];

points[0].fTxnDate = new Date('2020/11/1 12:00');
points[1].fTxnDate = new Date('2020/11/2 12:00');
points[2].fTxnDate = new Date('2020/11/3 18:00');
points[3].fTxnDate = new Date('2020/11/3 18:15');
points[4].fTxnDate = new Date('2020/11/4 12:00');
points[5].fTxnDate = new Date('2020/11/15 12:15');

const pointAmount = 250;
const counterparty = 'GRIDS SAPPORO';

const payResult = pay(points, pointAmount, counterparty);
const estimatedPoint = Poinco.estimate(billingAmount - substractor, 0.01);
const gp =
  estimatedPoint > 0 ? new Point(estimatedPoint, counterparty, 'NORMAL', 'GET') : null;

const checkoutResult = {
  use: {
    limited: payResult.limPoint,
    normal: payResult.normPoint,
  },
  get: {
    limited: null,
    normal: gp,
  },
};

Point

import { Point } from 'poinco';

const poinco = new Point(100, '企業名', 'NORMAL', 'GET'),

Functions

estimate

お客さんに還元されるポイントの総数を計算する

引数内容
billingAmountお客さんが支払う総額
interestRate適用するポイント還元率
import { poinco } from 'poinco';

const billingAmount = 2500;
const interestRate = 0.01;

poinco.estimate(billingAmount, interestRate);

sortByFTxnDate

pointクラスのfTxnDateプロパティ(反映日)に基づいてソーティングをかける

引数内容
pointsPointクラスのインスタンスの配列
import { poinco } from 'poinco';

...

poinco.sortByFTxnDate(points);

reverse

PointクラスのfTxnDateプロパティ(反映日)に基づいてソーティングを行い、昇順から降順にするためリバースをかける

引数内容
pointsPointクラスのインスタンスの配列
import { poinco } from 'poinco';

...

poinco.reverse(points);

print

Pointクラスのインスタンスの配列をテーブルを使ってログ形式で出力する

引数内容
pointsPointクラスのインスタンスの配列
import { poinco } from 'poinco';

...

poinco.print(points);

amount

引数であるpointsのnetAmountプロパティを基に期間限定ポイント、通常ポイント、その総額ポイント数を計算する

※必ずcalc関数を実行してからamountを呼び出すことを推奨。 未計算のnetAmountプロパティを基に利用可能なポイント数を算出する可能性があり、意図したポイントの総額を取得できない可能性があるため

引数内容
pointsPointクラスのインスタンスの配列
戻り値オブジェクトのプロパティ名内容
limitedPointsAmountnumber期間・用途限定ポイントの総額
normalPointsAmountnumber通常ポイントの総額
amountnumberすべてポイントの総額
import { poinco } from 'poinco';

...

points = poinco.calc(points);
const result = poinco.amount(points);

console.log(`期間・用途限定ポイント: ${result.limitedAmount}`);
console.log(`通常ポイント: ${result.normalAmount}`);
console.log(`総額ポイント: ${result.amount}`);

pay

与えられたPointクラスのインスタンスの配列(残高)の中からポイントを使用する場合の計算を行う

引数内容
pointsPoint[]Pointクラスのインスタンスの配列
feenumber使用するポイント数
counterpartystring取引先企業名
戻り値オブジェクトのプロパティ名内容
pointsPoint[]新しい期間限定・用途ポイントと通常ポイントのPointクラスのインスタンスが追加された新しい残高
limitedUsePointPoint追加された期間限定・用途ポイントのPointクラスのインスタンス
normalUsePointPoint追加された通常ポイントのPointクラスのインスタンス
import { pay } from 'poinco';

...

/**
 * ポイントを使用
 */
const payResult = pay(points, pointAmount, counterparty);
/**
 * 取得できるポイントを計算
 */
let substractor = payResult.limPoint ? payResult.limPoint.grossAmount : 0;
substractor += payResult.normPoint ? payResult.normPoint.grossAmount : 0;
const estimatedPoint = Poinco.estimate(billingAmount - substractor, 0.01);
const gp =
  estimatedPoint > 0 ? new Point(estimatedPoint, counterparty, 'NORMAL', 'GET') : null;

const checkoutResult = {
  use: {
    limited: payResult.limPoint,
    normal: payResult.normPoint,
  },
  get: {
    limited: null,
    normal: gp,
  },
};

applyUsePoint

引数のPointクラスのインスタンスに対してUSEポイントを割り当てる

引数内容
pointsPoint[]Pointクラスのインスタンスの配列
usePointPointactionプロパティがUSEのPointクラスのインスタンス
戻り値内容
pointsPoint[]usePointが割り当てられてnetAmountが更新されたPointクラスのインスタンスの配列
import { sortByFTxnDate, applyUsePoint } from 'poinco';

...

const usePoints = sortByFTxnDate([...limitedUsePoints, ...normalUsePoints]);
let getPoints = sortByFTxnDate([...limitedGetPoints, ...normalGetPoints]);

usePoints.forEach((point: Point) => {
  getPoints = applyUsePoint(getPoints, point);
});

calc

引数のpointsの中からUSEポイントとGETポイントを振り分けて、payForCalc関数を使ってひとつずつGETポイントの配列にUSEポイントを割り当てて計算を重ねてnetAmountが更新されたPointクラスのインスタンスの配列を返す

引数内容
pointsPoint[]Pointクラスのインスタンスの配列
戻り値内容
pointsPoint[]引数のpointsの要素のnetAmountを更新した新しいpoints
import { reset, calc } from 'point';

...

points = reset(points);
points = calc(points);

reset

引数のpointsの要素であるPointクラスのインスタンスのnetAmountを同インスタンスのgrossAmountと同じ値にしてリセットする

引数内容
pointsPoint[]Pointクラスのインスタンスの配列
戻り値内容
pointsPoint[]netAmountがリセットされたPointクラスのインスタンスの配列
1.0.6

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago