public static string Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log)
        {
            NarsHttpResponseObject result = new NarsHttpResponseObject();

            log.Info("GetNarsUser HttpTrigger executing...");

            var content = req.Content.ReadAsStringAsync().Result;

            var response = NarsCaller.Execute(Environment.GetEnvironmentVariable("userUrl"), content);

            var responseResult = response.Content.ReadAsStringAsync().Result;

            if (response.IsSuccessStatusCode)
            {
                log.Info("****SUCCESS****");

                JObject respResult = (JObject)JsonConvert.DeserializeObject(responseResult);

                result = new NarsHttpResponseObject
                {
                    ReturnType = "NarsUser",
                    ReturnObject = JsonConvert.DeserializeObject<NarsUser>(respResult["d"].ToString()),
                    Success = true,
                    Exception = null
                };
            }
            else
            {
                log.Warning(responseResult);
                result = new NarsHttpResponseObject
                {
                    ReturnType = "HttpResponse.Content.ToString",
                    ReturnObject = responseResult,
                    Success = false,
                    Exception = null
                };
            }

            return JsonConvert.SerializeObject(result);
        }
        /// <summary>
        /// This is the ACTIVITY trigger version of the GetNarsUser Azure Function.  This would be called by an Orchestrator.
        /// </summary>
        /// <param name="content"></param>
        /// <param name="log"></param>
        /// <returns></returns>
        public static string GetCalls([ActivityTrigger] string content, ILogger log)
        {
            NarsHttpResponseObject result = new NarsHttpResponseObject();

            log.LogInformation("GetCalls ActivityTrigger executing...");

            var response       = NarsCaller.Execute(Environment.GetEnvironmentVariable("callsUrl"), content);
            var responseResult = response.Content.ReadAsStringAsync().Result;

            JObject joResult = (JObject)JsonConvert.DeserializeObject(responseResult);

            if (response.IsSuccessStatusCode)
            {
                log.LogInformation("****SUCCESS****");

                result = new NarsHttpResponseObject
                {
                    ReturnType   = "List<NarsCall>",
                    ReturnObject = JsonConvert.DeserializeObject <List <NarsCall> >(joResult["d"]["Calls"].ToString()),
                    Success      = true,
                    Exception    = null
                };
            }
            else
            {
                log.LogWarning(responseResult);

                result = new NarsHttpResponseObject
                {
                    ReturnType   = "HttpResponse.Content.ToString()",
                    ReturnObject = responseResult,
                    Success      = false,
                    Exception    = null,
                };
            }


            return(JsonConvert.SerializeObject(result));
        }
        public static async Task <string> RunOrchestrator(
            [OrchestrationTrigger] DurableOrchestrationContext context)
        {
            var Tasks1        = new List <Task <string> >();
            var parallelTasks = new List <Task <string> >();

            string content = context.GetInput <string>();

            Task <string> task = context.CallActivityAsync <string>("CallNarsUser", content);

            Tasks1.Add(task);
            await Task.WhenAll(Tasks1);

            JObject JSONObj = (JObject)JsonConvert.DeserializeObject(content);
            JsonSerializerSettings microsoftDateFormatSettings = new JsonSerializerSettings
            {
                DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
            };

            var nrk = new NarsRequestKey
            {
                OriginInfo = new OriginInfo
                {
                    UserName  = "******",
                    LocalDate = DateTime.UtcNow
                },
                UserName   = (string)JSONObj["userName"],
                Force      = false,
                CallStatus = 2
            };

            var jsonObject = Newtonsoft.Json.JsonConvert.SerializeObject(nrk, microsoftDateFormatSettings);

            // Replace "hello" with the name of your Durable Activity Function.
            Task <string> task1 = context.CallActivityAsync <string>("GetCalls", nrk);

            //Task<string> task2 =  context.CallActivityAsync<string>("MyFunction_Second", "Seattle");
            //Task<string> task3 =  context.CallActivityAsync<string>("MyFunction_Third", "London");

            parallelTasks.Add(task1);
            //parallelTasks.Add(task2);
            //parallelTasks.Add(task3);

            await Task.WhenAll(parallelTasks);

            NarsHttpResponseObject userResponseObject  = JsonConvert.DeserializeObject <NarsHttpResponseObject>(Tasks1[0].Result);
            NarsHttpResponseObject callsResponseObject = JsonConvert.DeserializeObject <NarsHttpResponseObject>(parallelTasks[0].Result);

            List <CallReturnObject> callReturns = new List <CallReturnObject>();

            callReturns.Add(new CallReturnObject("CallNarsUser", userResponseObject));
            callReturns.Add(new CallReturnObject("GetCalls", callsResponseObject));

            EngageAPIReturnObject result = new EngageAPIReturnObject
            {
                User  = (NarsUser)userResponseObject.ReturnObject,
                Calls = (List <NarsCall>)callsResponseObject.ReturnObject,
                APICallReturnStatus = callReturns
            };

            return(JsonConvert.SerializeObject(result));
        }