using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using AutoMapper; using Elsa.Metadata; using Elsa.Models; using Elsa.Queries; using Elsa.Server.GraphQL.Models; using Elsa.Services; using HotChocolate; namespace Elsa.Server.GraphQL { public class Query { public IEnumerable GetActivityDescriptors( [Service] IActivityActivator activityActivator, [Service] IActivityDescriber describer) => activityActivator.GetActivityTypes().Select(describer.Describe).ToList(); public ActivityDescriptor? GetActivityDescriptor( [Service] IActivityActivator activityActivator, [Service] IActivityDescriber describer, string typeName) { var type = activityActivator.GetActivityType(typeName); return type == null ? default : describer.Describe(type); } public async Task> GetWorkflowDefinitions( VersionOptionsInput? version, [Service] IWorkflowDefinitionManager manager, [Service] IMapper mapper, CancellationToken cancellationToken) { var mappedVersion = mapper.Map(version); return await manager.ListAsync(mappedVersion ?? VersionOptions.Latest, cancellationToken); } public async Task GetWorkflowDefinition( string? workflowDefinitionVersionId, string? workflowDefinitionId, VersionOptionsInput? version, [Service] IWorkflowDefinitionManager manager, [Service] IMapper mapper, CancellationToken cancellationToken) { if (workflowDefinitionVersionId != null) return await manager.GetByVersionIdAsync(workflowDefinitionVersionId, cancellationToken); var mappedVersion = mapper.Map(version); return await manager.GetAsync( workflowDefinitionId!, mappedVersion ?? VersionOptions.Latest, cancellationToken); } public async Task> GetWorkflowInstances( string definitionId, WorkflowStatus? status, [Service] IWorkflowInstanceManager manager, CancellationToken cancellationToken) => status == null ? await manager.ListByDefinitionAsync(definitionId, cancellationToken) : await manager.ListByDefinitionAndStatusAsync(definitionId, status.Value, cancellationToken); public async Task GetWorkflowInstance( string id, [Service] IWorkflowInstanceManager manager, CancellationToken cancellationToken) => await manager.GetByWorkflowInstanceIdAsync(id, cancellationToken); } }