in Source/Function/EnrollmentVerificator.cs [22:77]
public static async Task RunOrchestrator(
[OrchestrationTrigger] DurableOrchestrationContext ctx)
{
var data = ctx.GetInput<EnrollmentHttpRequest>();
var notificationRequest = new RequestNotification(ctx.InstanceId, data.MobileNumber, data.Email, data.FirstName, data.LastName);
var customerInfoRequest = new CustomerInfoRequest(data.MobileNumber, ctx.InstanceId, data.Id);
await ctx.CallActivityAsync(Activities.StoreCustomerInformation, customerInfoRequest);
if (data.Channel == ChannelType.Email)
{
await ctx.CallActivityAsync(Activities.Email.EnrollmentRequestNotification, notificationRequest);
}
else
{
await ctx.CallActivityAsync(Activities.Sms.EnrollmentRequestNotification, notificationRequest);
}
using (var timeoutCts = new CancellationTokenSource())
{
Task<EnrollmentStatusEnum> approvalEvent = ctx.WaitForExternalEvent<EnrollmentStatusEnum>(Events.ApprovalEvent);
DateTime reminderDueTime = ctx.CurrentUtcDateTime.AddHours(7);
Task reminderTimeout = ctx.CreateTimer(reminderDueTime, timeoutCts.Token);
if (approvalEvent == await Task.WhenAny(approvalEvent, reminderTimeout))
{
var dataStatus = new UpdateStatus(data.Id, data.MobileNumber, approvalEvent.Result, data.Email);
await ctx.CallActivityAsync(Activities.UpdateEnrollmentStatus, dataStatus);
if (data.Channel == ChannelType.Email)
{
await ctx.CallActivityAsync(Activities.Email.SendEnrollmentFinishedNotification, dataStatus);
}
else
{
await ctx.CallActivityAsync(Activities.Sms.SendEnrollmentFinishedNotification, dataStatus);
}
timeoutCts.Cancel();
}
else
{
if (data.Channel == ChannelType.Email)
{
await ctx.CallActivityAsync(Activities.Sms.SendReminderEnrollmentNotification, data.MobileNumber);
}
else
{
await ctx.CallActivityAsync(Activities.Email.SendReminderEnrollmentNotification, data.Email);
}
}
await ctx.CallActivityAsync(Activities.CleanCustomerInfoTable, data.MobileNumber);
}
}