cleanup, patterns
This commit is contained in:
+15
-12
@@ -1,4 +1,5 @@
|
||||
import { ok, fail } from '../library/result.js';
|
||||
import { match, when, any } from '../library/patterns.js';
|
||||
|
||||
export const openingBalanceMustBeNonNegative = { type: 'OpeningBalanceMustBeNonNegative' };
|
||||
|
||||
@@ -20,15 +21,17 @@ export const openAccount = (id, openingBalance) =>
|
||||
? fail(openingBalanceMustBeNonNegative)
|
||||
: ok({ id, balance: openingBalance });
|
||||
|
||||
export const withdraw = (account, amount) => {
|
||||
if (amount.amount <= 0) {
|
||||
return fail(amountMustBePositive);
|
||||
}
|
||||
if (account.balance.amount < amount.amount) {
|
||||
return fail(insufficientBalance(account.balance, amount));
|
||||
}
|
||||
return ok({
|
||||
...account,
|
||||
balance: { amount: account.balance.amount - amount.amount },
|
||||
});
|
||||
};
|
||||
export const withdraw = (account, amount) =>
|
||||
match(
|
||||
when(({ amount: a }) => a.amount <= 0, () => fail(amountMustBePositive)),
|
||||
when(
|
||||
({ account: acc, amount: amt }) => acc.balance.amount < amt.amount,
|
||||
({ account: acc, amount: amt }) => fail(insufficientBalance(acc.balance, amt))
|
||||
),
|
||||
when(any, ({ account: acc, amount: amt }) =>
|
||||
ok({
|
||||
...acc,
|
||||
balance: { amount: acc.balance.amount - amt.amount },
|
||||
})
|
||||
)
|
||||
)({ account, amount });
|
||||
|
||||
Reference in New Issue
Block a user