-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathLoanApplicationFlow2.cs
More file actions
35 lines (30 loc) · 1.4 KB
/
Copy pathLoanApplicationFlow2.cs
File metadata and controls
35 lines (30 loc) · 1.4 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
32
33
34
35
using Cleipnir.Flows.Sample.Presentation.Solutions.D_LoanApplication.Other;
namespace Cleipnir.Flows.Sample.Presentation.Solutions.D_LoanApplication;
public class LoanApplicationFlow2 : Flow<LoanApplication>
{
public override async Task Run(LoanApplication loanApplication)
{
await MessageBroker.Send(PerformCreditCheck(loanApplication));
var outcomes = new List<CreditCheckOutcome>();
for (var i = 0; i < 3; i++)
{
var outcome = await Message<CreditCheckOutcome>(TimeSpan.FromMinutes(15));
if (outcome == null) break;
outcomes.Add(outcome);
}
if (outcomes.Count < 2)
await MessageBroker.Send(LoanApplicationRejected(loanApplication));
else
await MessageBroker.Send(
outcomes.All(o => o.Approved)
? LoanApplicationApproved(loanApplication)
: LoanApplicationRejected(loanApplication)
);
}
private static PerformCreditCheck PerformCreditCheck(LoanApplication loanApplication)
=> new(loanApplication.Id, loanApplication.CustomerId, loanApplication.Amount);
private static LoanApplicationRejected LoanApplicationRejected(LoanApplication loanApplication)
=> new(loanApplication);
private static LoanApplicationApproved LoanApplicationApproved(LoanApplication loanApplication)
=> new(loanApplication);
}