-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathTransferFlow.cs
More file actions
31 lines (25 loc) · 1.01 KB
/
Copy pathTransferFlow.cs
File metadata and controls
31 lines (25 loc) · 1.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using Cleipnir.ResilientFunctions.Domain;
namespace Cleipnir.Flows.Sample.MicrosoftOpen.Flows.BankTransfer;
[GenerateFlows]
public class TransferFlow : Flow<Transfer>
{
public override async Task Run(Transfer transfer)
{
var availableFunds = await _bankCentralClient.GetAvailableFunds(transfer.FromAccount);
if (availableFunds <= transfer.Amount)
throw new InvalidOperationException("Insufficient funds on from account");
await _bankCentralClient.PostTransaction(
transfer.TransactionId,
transfer.FromAccount,
-transfer.Amount
);
await _bankCentralClient.PostTransaction(
transfer.TransactionId,
transfer.ToAccount,
transfer.Amount
);
}
private Task<DistributedSemaphore.Lock> DistributedLock(string account)
=> Workflow.Synchronization.AcquireLock("BankTransfer", instance: account);
private readonly IBankCentralClient _bankCentralClient = new BankCentralClient();
}