add fp2 sample
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
using CsharpFp2.Domain;
|
||||
using CsharpFp2.Infrastructure;
|
||||
|
||||
namespace CsharpFp2.Application;
|
||||
|
||||
// delegate type is optional, but nice to illustrate
|
||||
public delegate WithdrawResult WithdrawMoney(Guid accountId, decimal amount);
|
||||
|
||||
public static class AccountApplication
|
||||
{
|
||||
public static WithdrawMoney CreateWithdrawMoney(
|
||||
LoadAccount loadAccount,
|
||||
SaveAccount saveAccount
|
||||
)
|
||||
{
|
||||
return (accountId, amount) =>
|
||||
{
|
||||
var account =
|
||||
loadAccount(accountId) ?? throw new InvalidOperationException("Account not found.");
|
||||
|
||||
Console.WriteLine(
|
||||
$"[App] Account loaded. Current balance: {account.Balance.Amount:0.00}"
|
||||
);
|
||||
Console.WriteLine($"[App] Executing withdrawal of {amount:0.00}...");
|
||||
|
||||
switch (AccountDomain.Withdraw(account, new Money(amount)))
|
||||
{
|
||||
case WithdrawResult.Success s:
|
||||
{
|
||||
Console.WriteLine(
|
||||
$"[App] Withdrawal applied. New balance: {s.Account.Balance.Amount:0.00}"
|
||||
);
|
||||
saveAccount(s.Account);
|
||||
Console.WriteLine("[App] Account persisted.");
|
||||
return s;
|
||||
}
|
||||
|
||||
case var other:
|
||||
{
|
||||
Console.Error.WriteLine($"[App Error] Withdrawal failed. Error: {other}");
|
||||
return other;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user