public static async Task RunOrchestrator([OrchestrationTrigger] IDurableOrchestrationContext context, ILogger log)
        {
            log.LogInformation($"************** RunOrchestrator method executing ********************");

            // Using tuples but could also define a class for this data
            var(descontoRequest, requestUri) = context.GetInput <Tuple <DescontoRequest, Uri> >();
            var moderationRequest = new DescontoModeracaoRequest
            {
                DescontoRequest   = descontoRequest,
                ApproveRequestUrl = $"{requestUri.Scheme}://{requestUri.Host}:{requestUri.Port}/api/HumanPatternExample_Approve?id={context.InstanceId}",
                DeclineRequestUrl = $"{requestUri.Scheme}://{requestUri.Host}:{requestUri.Port}/api/HumanPatternExample_Decline?id={context.InstanceId}",
            };

            await context.CallActivityAsync("HumanPatternExample_RequestApproval", moderationRequest);

            using (var timeout = new CancellationTokenSource()) // Defino o Timeout para aprovação do workflow
            {
                DateTime moderationDeadline = context.CurrentUtcDateTime.AddSeconds(10);

                Task durableTimeout = context.CreateTimer(moderationDeadline, timeout.Token);

                Task <bool> moderatedEvent = context.WaitForExternalEvent <bool>("Moderation");

                if (moderatedEvent == await Task.WhenAny(moderatedEvent, durableTimeout))
                {
                    timeout.Cancel();

                    bool isApproved = moderatedEvent.Result;

                    if (isApproved)
                    {
                        log.LogInformation($"************** Desconto de  { descontoRequest.ValorDesconto } aprovado com sucesso. ********************");
                        //CRIAR REGRA DE NEGOCIO PARA APROVAR
                    }
                    else
                    {
                        log.LogInformation($"************** Desconto de  { descontoRequest.ValorDesconto } reprovado. ********************");
                        //CRIAR REGRA DE NEGOCIO PARA NEGAR DESCONTO
                    }
                }
                else
                {
                    log.LogInformation($"************** Desconto de  { descontoRequest.ValorDesconto } não recebeu intervenção...  ********************");
                    //CRIAR REGRA DE NEGOCIO QUANDO NAO RECEBER INTERVENCAO
                }
            }

            log.LogInformation($"************** Orchestration complete ********************");
        }
 public static void RequestApproval([ActivityTrigger] DescontoModeracaoRequest moderationRequest, ILogger log)
 {
     log.LogInformation($"ENVIAR MENSAGEM AO USUARIO COM OS LINKS DE APROVAÇÂO");
     log.LogInformation($"=> { moderationRequest.ApproveRequestUrl }");
     log.LogInformation($"=> { moderationRequest.DeclineRequestUrl }");
 }