poinco
TypeScript icon, indicating that this package has built-in type declarations

1.0.6 • Public • Published

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プロパティ(反映日)に基づいてソーティングをかける

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

...

poinco.sortByFTxnDate(points);

reverse

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

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

...

poinco.reverse(points);

print

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

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

...

poinco.print(points);

amount

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

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

引数 内容
points Pointクラスのインスタンスの配列
戻り値オブジェクトのプロパティ名 内容
limitedPointsAmount number 期間・用途限定ポイントの総額
normalPointsAmount number 通常ポイントの総額
amount number すべてポイントの総額
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クラスのインスタンスの配列(残高)の中からポイントを使用する場合の計算を行う

引数 内容
points Point[] Pointクラスのインスタンスの配列
fee number 使用するポイント数
counterparty string 取引先企業名
戻り値オブジェクトのプロパティ名 内容
points Point[] 新しい期間限定・用途ポイントと通常ポイントのPointクラスのインスタンスが追加された新しい残高
limitedUsePoint Point 追加された期間限定・用途ポイントのPointクラスのインスタンス
normalUsePoint Point 追加された通常ポイントの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ポイントを割り当てる

引数 内容
points Point[] Pointクラスのインスタンスの配列
usePoint Point actionプロパティがUSEのPointクラスのインスタンス
戻り値 内容
points Point[] 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クラスのインスタンスの配列を返す

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

...

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

reset

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

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

Package Sidebar

Install

npm i poinco

Weekly Downloads

0

Version

1.0.6

License

MIT

Unpacked Size

3.01 MB

Total Files

37

Last publish

Collaborators

  • takagimeow