cleanup, patterns

This commit is contained in:
Oli Sturm
2026-04-27 13:08:40 +01:00
parent d0c9466170
commit 3194231879
8 changed files with 66 additions and 36 deletions
+15 -12
View File
@@ -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 });