Skip to content

Commit

Permalink
リファクタリング
Browse files Browse the repository at this point in the history
  • Loading branch information
gentksb committed Aug 29, 2023
1 parent 77ddb1c commit 437d074
Show file tree
Hide file tree
Showing 5 changed files with 441 additions and 20 deletions.
11 changes: 7 additions & 4 deletions lambda/logic/splitExpense.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
export const splitExpense = (expense: any) => {
const { USER1_RATE, USER2_RATE, USER1_ID } = process.env;
const numCost = parseInt(expense.cost);
const payerId = expense.repayments[0].to.toString();

// ユーザー情報が環境変数に入力されているかどうかのチェック
if (USER1_RATE != null && USER2_RATE != null && USER1_ID !== null) {
const numCost = parseInt(expense.cost);
const payerId = expense.repayments[0].to.toString();
// ユーザー情報から支払ったユーザーの割合を取得
const payerOwedShare =
payerId === USER1_ID
? parseInt(Math.round(numCost * parseFloat(USER1_RATE)).toPrecision())
: parseInt(Math.round(numCost * parseFloat(USER2_RATE)).toPrecision());
? Math.round(numCost * parseFloat(USER1_RATE))
: Math.round(numCost * parseFloat(USER2_RATE));
// 支払われたユーザーの割合を取得
const nonPayerOwedShare = numCost - payerOwedShare;
return {
payerOwedShare: payerOwedShare,
Expand Down
4 changes: 4 additions & 0 deletions lambda/splitwise_automator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@ import axios, { AxiosRequestConfig } from "axios";
import { splitExpense } from "./logic/splitExpense";
import { isSharedCost } from "./validator/isSharedCost";

// I tried to generate d.type.ts, w/ official API repo and openapi-typescript, but it didn't work.
// https://github.com/drwpow/openapi-typescript
// https://github.com/splitwise/api-docs

export const handler: Handler = async (
event: APIGatewayEvent,
context: Context
Expand Down
34 changes: 18 additions & 16 deletions lambda/validator/isSharedCost.ts
Original file line number Diff line number Diff line change
@@ -1,29 +1,31 @@
export const isSharedCost = (expense: any) => {
const { USER1_RATE, USER2_RATE } = process.env;

// env check
if (
USER1_RATE != null &&
USER2_RATE != null &&
parseFloat(USER1_RATE) + parseFloat(USER2_RATE) === 1
USER1_RATE == null ||
USER2_RATE == null ||
parseFloat(USER1_RATE) + parseFloat(USER2_RATE) !== 1
) {
const { cost, users } = expense;
const splitRate = parseFloat(
(parseInt(users[0].owed_share) / parseInt(cost)).toPrecision(2)
);

return (
expense.group_id.toString() === process.env.SPLITWISE_GROUP_ID &&
splitRate !== 0 &&
splitRate !== 1 &&
splitRate !== parseFloat(USER1_RATE) &&
splitRate !== parseFloat(USER2_RATE)
);
} else {
console.error(
"Split Rateが不正です(値が設定されていないか、合計が1ではありません)",
USER1_RATE,
USER2_RATE
);
throw new Error("split rate error");
}

const { cost, users } = expense;
const splitRate = parseFloat(
(parseInt(users[0].owed_share) / parseInt(cost)).toPrecision(2)
);

// グループIDが一致し、割り勘でない、かつ、割り勘率が0,1,USER1_RATE,USER2_RATE以外の場合は処理対象とする
return (
expense.group_id.toString() === process.env.SPLITWISE_GROUP_ID &&
splitRate !== 0 &&
splitRate !== 1 &&
splitRate !== parseFloat(USER1_RATE) &&
splitRate !== parseFloat(USER2_RATE)
);
};
Loading

0 comments on commit 437d074

Please sign in to comment.