add fp1 sample

This commit is contained in:
Oli Sturm
2026-04-22 13:38:09 +01:00
parent 980cc626a9
commit 1b5239566a
8 changed files with 211 additions and 0 deletions
+32
View File
@@ -0,0 +1,32 @@
namespace CsharpFp1.Domain;
public sealed record Account(Guid Id, Money Balance);
public static class AccountDomain
{
// Choosing a "clean" FP approach here of instantiating the Account
// Depending on needs, code to prevent the Account type from
// being instantiated without this helper needs to be added
// to the record type.
public static Account Open(Guid id, Money openingBalance)
{
if (openingBalance.Amount < 0)
throw new ArgumentOutOfRangeException(nameof(openingBalance));
return new Account(id, openingBalance);
}
public static Account Withdraw(Account account, Money amount)
{
if (amount.Amount <= 0)
throw new InvalidOperationException("Withdrawal amount must be positive.");
if (account.Balance.Amount < amount.Amount)
throw new InsufficientBalanceException(account.Balance, amount);
return account with
{
Balance = account.Balance.Subtract(amount),
};
}
}