elsa-core/src/server/Elsa.Server.GraphQL/Query.cs

92 lines
3.3 KiB
C#
Raw Normal View History

2020-10-10 15:13:52 +00:00
using System;
using System.Collections.Generic;
using System.Linq;
2020-10-10 15:13:52 +00:00
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
using AutoMapper;
2020-10-10 15:13:52 +00:00
using Elsa.Extensions;
using Elsa.Indexes;
using Elsa.Metadata;
using Elsa.Models;
2020-10-10 15:13:52 +00:00
using Elsa.Queries;
using Elsa.Server.GraphQL.Models;
using Elsa.Services;
using HotChocolate;
2020-10-10 15:13:52 +00:00
using YesSql;
namespace Elsa.Server.GraphQL
{
public class Query
{
public IEnumerable<ActivityDescriptor> GetActivityDescriptors(
[Service] IActivityResolver activityResolver,
[Service] IActivityDescriber describer) =>
activityResolver.GetActivityTypes().Select(describer.Describe).ToList();
public ActivityDescriptor? GetActivityDescriptor(
2020-10-10 15:13:52 +00:00
[Service] IActivityResolver activityResolver,
[Service] IActivityDescriber describer,
string typeName)
{
var type = activityResolver.GetActivityType(typeName);
return type == null ? default : describer.Describe(type);
}
2020-10-09 20:26:19 +00:00
public async Task<IEnumerable<WorkflowDefinition>> GetWorkflowDefinitions(
VersionOptionsInput? version,
2020-10-10 15:13:52 +00:00
[Service] ISession session,
[Service] IMapper mapper,
CancellationToken cancellationToken)
{
var mappedVersion = mapper.Map<VersionOptions?>(version);
2020-10-10 15:13:52 +00:00
return await session.QueryWorkflowDefinitions().WithVersion(mappedVersion ?? VersionOptions.Latest)
.ListAsync();
}
2020-10-10 15:13:52 +00:00
public async Task<WorkflowDefinition?> GetWorkflowDefinition(
string? workflowDefinitionVersionId,
string? workflowDefinitionId,
VersionOptionsInput? version,
2020-10-10 15:13:52 +00:00
[Service] ISession session,
[Service] IMapper mapper,
CancellationToken cancellationToken)
{
2020-10-10 15:13:52 +00:00
if (workflowDefinitionVersionId != null)
return await session.QueryWorkflowDefinitions<WorkflowDefinitionIndex>(
x => x.WorkflowDefinitionVersionId == workflowDefinitionVersionId).FirstOrDefaultAsync();
var mappedVersion = mapper.Map<VersionOptions?>(version);
2020-10-10 15:13:52 +00:00
return await session.GetWorkflowDefinitionAsync(
workflowDefinitionId!,
mappedVersion ?? VersionOptions.Latest,
cancellationToken);
}
public async Task<IEnumerable<WorkflowInstance>> GetWorkflowInstances(
2020-10-10 15:13:52 +00:00
string definitionId,
WorkflowStatus? status,
2020-10-10 15:13:52 +00:00
[Service] ISession session,
CancellationToken cancellationToken)
{
2020-10-10 15:13:52 +00:00
Expression<Func<WorkflowInstanceIndex, bool>> predicate;
if (status == null)
predicate = x => x.WorkflowDefinitionId == definitionId;
else
predicate = x => x.WorkflowDefinitionId == definitionId && x.WorkflowStatus == status;
2020-10-10 15:13:52 +00:00
return await session.QueryWorkflowInstances(predicate).ListAsync();
}
2020-10-10 15:13:52 +00:00
public async Task<WorkflowInstance?> GetWorkflowInstance(
string id,
2020-10-10 15:13:52 +00:00
[Service] ISession session,
CancellationToken cancellationToken)
{
2020-10-10 15:13:52 +00:00
return await session.GetWorkflowInstanceByIdAsync(id, cancellationToken);
}
}
}