コード例 #1
0
        public static async Task <IActionResult> ConfirmUser(
            [HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = null)]
            HttpRequest req,
            [Queue(Global.QUEUE)] IAsyncCollector <string> console,
            [OrchestrationClient] IDurableOrchestrationClient durableClient,
            ILogger log)
        {
            log.LogInformation("ConfirmUser called.");

            string  requestBody = await new StreamReader(req.Body).ReadToEndAsync();
            dynamic data        = JsonConvert.DeserializeObject(requestBody);
            string  name        = data?.name;

            if (string.IsNullOrWhiteSpace(name))
            {
                await console.AddAsync("An attempt to confirm a user with no name was made.");

                return(new BadRequestObjectResult("User name is required."));
            }

            var userCheck = await durableClient.ReadUserEntityAsync <User>(name);

            if (!userCheck.EntityExists)
            {
                await console.AddAsync($"Attempt to confirm missing user {name} failed.");

                return(new BadRequestObjectResult("Username does not exist."));
            }

            log.LogInformation("User {user} is valid, searching for workflow.", name);

            var instance = await durableClient.FindJob(
                DateTime.UtcNow,
                nameof(UserConfirmationWorkflow),
                name);

            if (instance == null)
            {
                log.LogInformation("Workflow not found for user {user}.", name);
                return(new NotFoundResult());
            }
            log.LogInformation("Workflow with id {instanceId} found for user {user}.", instance.InstanceId, name);
            await durableClient.RaiseEventAsync(instance.InstanceId, APPROVAL_TASK, true);

            return(new OkResult());
        }