From 7f44bfe4c17c4db644d19b2fa7fb24f6fae7ac48 Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Tue, 3 Nov 2020 10:50:32 +0100 Subject: [PATCH] Replace precompiled queries with extensions, process warnings and fix test --- .../SendHttpRequest/SendHttpRequest.cs | 11 +-- .../SendHttpRequestBuilderExtensions.cs | 10 --- .../WriteHttpResponseBuilderExtensions.cs | 19 +++-- .../Extensions/HttpRequestExtensions.cs | 6 +- .../Models/HttpRequestModel.cs | 12 ++-- .../Models/HttpResponseModel.cs | 2 +- .../Elsa.Activities.Http/Models/Signal.cs | 4 +- .../Models/StringValuesModel.cs | 19 +++-- .../Options/HttpActivityOptions.cs | 2 +- .../Parsers/DefaultHttpRequestBodyParser.cs | 2 +- .../Parsers/DefaultHttpResponseBodyParser.cs | 6 +- .../Parsers/JsonHttpRequestBodyParser.cs | 6 +- .../Parsers/JsonHttpResponseBodyParser.cs | 2 +- .../Results/BadRequestResult.cs | 2 +- .../Services/IHttpRequestBodyParser.cs | 2 +- .../Services/IHttpResponseBodyParser.cs | 2 +- .../Services/TokenService.cs | 2 +- .../WorkflowDefinitionManagerExtensions.cs | 69 +++++++++++++++++++ .../WorkflowDefinitionByIdAndVersionQuery.cs | 46 ------------- .../WorkflowDefinitionByVersionIdQuery.cs | 38 ---------- .../WorkflowDefinitionByVersionQuery.cs | 35 ---------- ...WorkflowInstanceByBlockingActivityQuery.cs | 47 ------------- .../Queries/WorkflowInstanceByStatusQuery.cs | 38 ---------- .../Elsa.Core/Services/WorkflowPublisher.cs | 2 +- .../ResumeRunningWorkflowsTask.cs | 2 +- .../Models/Comment.cs | 4 +- .../Workflows/DocumentApprovalWorkflow.cs | 4 +- .../Endpoints/WorkflowDefinitions/Get.cs | 2 +- .../Helpers/ElsaHostApplicationFactory.cs | 2 +- .../Assets/hello-world-workflow.json | 2 +- 30 files changed, 127 insertions(+), 273 deletions(-) delete mode 100644 src/activities/Elsa.Activities.Http/Activities/SendHttpRequest/SendHttpRequestBuilderExtensions.cs create mode 100644 src/core/Elsa.Core/Extensions/WorkflowDefinitionManagerExtensions.cs delete mode 100644 src/core/Elsa.Core/Queries/WorkflowDefinitionByIdAndVersionQuery.cs delete mode 100644 src/core/Elsa.Core/Queries/WorkflowDefinitionByVersionIdQuery.cs delete mode 100644 src/core/Elsa.Core/Queries/WorkflowDefinitionByVersionQuery.cs delete mode 100644 src/core/Elsa.Core/Queries/WorkflowInstanceByBlockingActivityQuery.cs delete mode 100644 src/core/Elsa.Core/Queries/WorkflowInstanceByStatusQuery.cs diff --git a/src/activities/Elsa.Activities.Http/Activities/SendHttpRequest/SendHttpRequest.cs b/src/activities/Elsa.Activities.Http/Activities/SendHttpRequest/SendHttpRequest.cs index 9d608f9c7..4ac83641a 100644 --- a/src/activities/Elsa.Activities.Http/Activities/SendHttpRequest/SendHttpRequest.cs +++ b/src/activities/Elsa.Activities.Http/Activities/SendHttpRequest/SendHttpRequest.cs @@ -46,7 +46,7 @@ namespace Elsa.Activities.Http /// The URL to invoke. /// [ActivityProperty(Hint = "The URL to send the HTTP request to.")] - public PathString Url { get; set; } + public PathString? Url { get; set; } /// /// The HTTP method to use. @@ -56,7 +56,7 @@ namespace Elsa.Activities.Http Hint = "The HTTP method to use when making the request." )] [SelectOptions("GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS", "HEAD")] - public string Method { get; set; } + public string? Method { get; set; } /// /// The body to send along with the request. @@ -73,10 +73,10 @@ namespace Elsa.Activities.Http Hint = "The content type to send with the request (if applicable)." )] [SelectOptions("text/plain", "text/html", "application/json", "application/xml")] - public string ContentType { get; set; } + public string? ContentType { get; set; } [ActivityProperty(Hint = "The Authorization header value to send.")] - public string Authorization { get; set; } + public string? Authorization { get; set; } /// /// The headers to send along with the request. @@ -141,7 +141,8 @@ namespace Elsa.Activities.Http private HttpRequestMessage CreateRequest() { - var methodSupportsBody = GetMethodSupportsBody(Method); + var method = Method ?? HttpMethods.Get; + var methodSupportsBody = GetMethodSupportsBody(method); var url = Url; var request = new HttpRequestMessage(new HttpMethod(Method), url); var authorizationHeaderValue = Authorization; diff --git a/src/activities/Elsa.Activities.Http/Activities/SendHttpRequest/SendHttpRequestBuilderExtensions.cs b/src/activities/Elsa.Activities.Http/Activities/SendHttpRequest/SendHttpRequestBuilderExtensions.cs deleted file mode 100644 index 51edcdb95..000000000 --- a/src/activities/Elsa.Activities.Http/Activities/SendHttpRequest/SendHttpRequestBuilderExtensions.cs +++ /dev/null @@ -1,10 +0,0 @@ - - -// ReSharper disable once CheckNamespace -namespace Elsa.Activities.Http -{ - public static class SendHttpRequestBuilderExtensions - { - - } -} \ No newline at end of file diff --git a/src/activities/Elsa.Activities.Http/Activities/WriteHttpResponse/WriteHttpResponseBuilderExtensions.cs b/src/activities/Elsa.Activities.Http/Activities/WriteHttpResponse/WriteHttpResponseBuilderExtensions.cs index 3e199fd63..270148e86 100644 --- a/src/activities/Elsa.Activities.Http/Activities/WriteHttpResponse/WriteHttpResponseBuilderExtensions.cs +++ b/src/activities/Elsa.Activities.Http/Activities/WriteHttpResponse/WriteHttpResponseBuilderExtensions.cs @@ -9,14 +9,13 @@ namespace Elsa.Activities.Http { public static class WriteHttpResponseBuilderExtensions { - public static IActivityBuilder WriteHttpResponse(this IBuilder builder, - Action> setup) => builder.Then(setup); + public static IActivityBuilder WriteHttpResponse(this IBuilder builder, Action> setup) => builder.Then(setup); public static IActivityBuilder WriteHttpResponse( this IBuilder builder, Func statusCode, - Func> content, - Func contentType) => + Func> content, + Func contentType) => builder.WriteHttpResponse( setup => setup .Set(x => x.StatusCode, statusCode) @@ -26,8 +25,8 @@ namespace Elsa.Activities.Http public static IActivityBuilder WriteHttpResponse( this IBuilder builder, Func statusCode, - Func content, - Func contentType) => + Func content, + Func contentType) => builder.WriteHttpResponse( setup => setup .Set(x => x.StatusCode, statusCode) @@ -37,8 +36,8 @@ namespace Elsa.Activities.Http public static IActivityBuilder WriteHttpResponse( this IBuilder builder, Func statusCode, - Func content, - Func contentType) => + Func content, + Func contentType) => builder.WriteHttpResponse( setup => setup .Set(x => x.StatusCode, statusCode) @@ -48,8 +47,8 @@ namespace Elsa.Activities.Http public static IActivityBuilder WriteHttpResponse( this IBuilder builder, HttpStatusCode statusCode, - string content, - string contentType) => + string? content, + string? contentType) => builder.WriteHttpResponse( setup => setup .Set(x => x.StatusCode, statusCode) diff --git a/src/activities/Elsa.Activities.Http/Extensions/HttpRequestExtensions.cs b/src/activities/Elsa.Activities.Http/Extensions/HttpRequestExtensions.cs index b30242807..0ff3c8824 100644 --- a/src/activities/Elsa.Activities.Http/Extensions/HttpRequestExtensions.cs +++ b/src/activities/Elsa.Activities.Http/Extensions/HttpRequestExtensions.cs @@ -9,7 +9,7 @@ namespace Elsa.Activities.Http.Extensions { public static class HttpRequestExtensions { - public static async Task ReadContentAsBytesAsync( + public static async Task ReadContentAsBytesAsync( this HttpRequest request, CancellationToken cancellationToken = default) { @@ -25,12 +25,12 @@ namespace Elsa.Activities.Http.Extensions return content; } - public static async Task ReadContentAsStringAsync( + public static async Task ReadContentAsStringAsync( this HttpRequest request, CancellationToken cancellationToken = default) { var bytes = await request.ReadContentAsBytesAsync(cancellationToken); - return Encoding.UTF8.GetString(bytes); + return bytes != null ? Encoding.UTF8.GetString(bytes) : default; } public static Uri ToAbsoluteUrl(this HttpRequest request, string relativePath) diff --git a/src/activities/Elsa.Activities.Http/Models/HttpRequestModel.cs b/src/activities/Elsa.Activities.Http/Models/HttpRequestModel.cs index 9ee2912fd..21596360b 100644 --- a/src/activities/Elsa.Activities.Http/Models/HttpRequestModel.cs +++ b/src/activities/Elsa.Activities.Http/Models/HttpRequestModel.cs @@ -5,11 +5,11 @@ namespace Elsa.Activities.Http.Models { public class HttpRequestModel { - public Uri Path { get; set; } - public string Method { get; set; } - public IDictionary QueryString { get; set; } - public IDictionary Headers { get; set; } - public object Body { get; set; } - public T GetBody() => (T)Body; + public Uri Path { get; set; } = default!; + public string Method { get; set; } = default!; + public IDictionary QueryString { get; set; } = default!; + public IDictionary Headers { get; set; } = default!; + public object? Body { get; set; } + public T GetBody() => (T)Body!; } } \ No newline at end of file diff --git a/src/activities/Elsa.Activities.Http/Models/HttpResponseModel.cs b/src/activities/Elsa.Activities.Http/Models/HttpResponseModel.cs index 9bec772f8..294042c2f 100644 --- a/src/activities/Elsa.Activities.Http/Models/HttpResponseModel.cs +++ b/src/activities/Elsa.Activities.Http/Models/HttpResponseModel.cs @@ -7,6 +7,6 @@ namespace Elsa.Activities.Http.Models { public HttpStatusCode StatusCode { get; set; } public Dictionary Headers { get; set; } = new Dictionary(); - public object Content { get; set; } + public object? Content { get; set; } } } \ No newline at end of file diff --git a/src/activities/Elsa.Activities.Http/Models/Signal.cs b/src/activities/Elsa.Activities.Http/Models/Signal.cs index 410742c02..b61b039a5 100644 --- a/src/activities/Elsa.Activities.Http/Models/Signal.cs +++ b/src/activities/Elsa.Activities.Http/Models/Signal.cs @@ -12,7 +12,7 @@ namespace Elsa.Activities.Http.Models WorkflowInstanceId = workflowInstanceId; } - public string Name { get; set; } - public string WorkflowInstanceId { get; set; } + public string Name { get; set; } = default!; + public string WorkflowInstanceId { get; set; } = default!; } } \ No newline at end of file diff --git a/src/activities/Elsa.Activities.Http/Models/StringValuesModel.cs b/src/activities/Elsa.Activities.Http/Models/StringValuesModel.cs index d14477110..71fe2125b 100644 --- a/src/activities/Elsa.Activities.Http/Models/StringValuesModel.cs +++ b/src/activities/Elsa.Activities.Http/Models/StringValuesModel.cs @@ -4,8 +4,8 @@ namespace Elsa.Activities.Http.Models { public class StringValuesModel { - public string Value { get; set; } - public string[] Values { get; set; } + public string? Value { get; set; } + public string[]? Values { get; set; } public StringValuesModel() { @@ -17,20 +17,17 @@ namespace Elsa.Activities.Http.Models Values = value.Count != 1 ? value.ToArray() : default; } - public override string ToString() + public override string? ToString() { if (Values == null) return Value; - switch (Values.Length) + return Values.Length switch { - case 0: - return null; - case 1: - return Values[0]; - default: - return string.Join(",", Values); - } + 0 => default, + 1 => Values[0], + _ => string.Join(",", Values) + }; } } } \ No newline at end of file diff --git a/src/activities/Elsa.Activities.Http/Options/HttpActivityOptions.cs b/src/activities/Elsa.Activities.Http/Options/HttpActivityOptions.cs index fb60fefa9..3e77dab1d 100644 --- a/src/activities/Elsa.Activities.Http/Options/HttpActivityOptions.cs +++ b/src/activities/Elsa.Activities.Http/Options/HttpActivityOptions.cs @@ -4,6 +4,6 @@ namespace Elsa.Activities.Http.Options { public class HttpActivityOptions { - public Uri BaseUrl { get; set; } + public Uri BaseUrl { get; set; } = default!; } } \ No newline at end of file diff --git a/src/activities/Elsa.Activities.Http/Parsers/DefaultHttpRequestBodyParser.cs b/src/activities/Elsa.Activities.Http/Parsers/DefaultHttpRequestBodyParser.cs index e12c9479c..dd5dba9eb 100644 --- a/src/activities/Elsa.Activities.Http/Parsers/DefaultHttpRequestBodyParser.cs +++ b/src/activities/Elsa.Activities.Http/Parsers/DefaultHttpRequestBodyParser.cs @@ -12,6 +12,6 @@ namespace Elsa.Activities.Http.Parsers public int Priority => -1; public string?[] SupportedContentTypes => new[] { "", default }; - public async Task ParseAsync(HttpRequest request, Type? targetType = default, CancellationToken cancellationToken = default) => await request.ReadContentAsStringAsync(cancellationToken); + public async Task ParseAsync(HttpRequest request, Type? targetType = default, CancellationToken cancellationToken = default) => await request.ReadContentAsStringAsync(cancellationToken); } } \ No newline at end of file diff --git a/src/activities/Elsa.Activities.Http/Parsers/DefaultHttpResponseBodyParser.cs b/src/activities/Elsa.Activities.Http/Parsers/DefaultHttpResponseBodyParser.cs index bfbc72319..495455cdd 100644 --- a/src/activities/Elsa.Activities.Http/Parsers/DefaultHttpResponseBodyParser.cs +++ b/src/activities/Elsa.Activities.Http/Parsers/DefaultHttpResponseBodyParser.cs @@ -9,9 +9,7 @@ namespace Elsa.Activities.Http.Parsers public class DefaultHttpResponseBodyParser : IHttpResponseBodyParser { public int Priority => -1; - public IEnumerable SupportedContentTypes => new[] { "", default }; - - public async Task ParseAsync(HttpResponseMessage response, CancellationToken cancellationToken) - => await response.Content.ReadAsStringAsync(); + public IEnumerable SupportedContentTypes => new[] { "", default }; + public async Task ParseAsync(HttpResponseMessage response, CancellationToken cancellationToken) => await response.Content.ReadAsStringAsync(); } } \ No newline at end of file diff --git a/src/activities/Elsa.Activities.Http/Parsers/JsonHttpRequestBodyParser.cs b/src/activities/Elsa.Activities.Http/Parsers/JsonHttpRequestBodyParser.cs index 3c0c4d4d6..94ef5756e 100644 --- a/src/activities/Elsa.Activities.Http/Parsers/JsonHttpRequestBodyParser.cs +++ b/src/activities/Elsa.Activities.Http/Parsers/JsonHttpRequestBodyParser.cs @@ -21,9 +21,13 @@ namespace Elsa.Activities.Http.Parsers public int Priority => 0; public string?[] SupportedContentTypes => new[] { "application/json", "text/json" }; - public async Task ParseAsync(HttpRequest request, Type? targetType = default, CancellationToken cancellationToken = default) + public async Task ParseAsync(HttpRequest request, Type? targetType = default, CancellationToken cancellationToken = default) { var json = await request.ReadContentAsStringAsync(cancellationToken); + + if (json == null) + return default; + targetType ??= typeof(ExpandoObject); return _serializer.Deserialize(json, targetType)!; } diff --git a/src/activities/Elsa.Activities.Http/Parsers/JsonHttpResponseBodyParser.cs b/src/activities/Elsa.Activities.Http/Parsers/JsonHttpResponseBodyParser.cs index c9d211d6d..2c1d1c8ea 100644 --- a/src/activities/Elsa.Activities.Http/Parsers/JsonHttpResponseBodyParser.cs +++ b/src/activities/Elsa.Activities.Http/Parsers/JsonHttpResponseBodyParser.cs @@ -11,7 +11,7 @@ namespace Elsa.Activities.Http.Parsers public class JsonHttpResponseBodyParser : IHttpResponseBodyParser { public int Priority => 0; - public IEnumerable SupportedContentTypes => new[] { "application/json", "text/json" }; + public IEnumerable SupportedContentTypes => new[] { "application/json", "text/json" }; public async Task ParseAsync(HttpResponseMessage response, CancellationToken cancellationToken) { diff --git a/src/activities/Elsa.Activities.Http/RequestHandlers/Results/BadRequestResult.cs b/src/activities/Elsa.Activities.Http/RequestHandlers/Results/BadRequestResult.cs index 489785154..5f300ca3b 100644 --- a/src/activities/Elsa.Activities.Http/RequestHandlers/Results/BadRequestResult.cs +++ b/src/activities/Elsa.Activities.Http/RequestHandlers/Results/BadRequestResult.cs @@ -16,7 +16,7 @@ namespace Elsa.Activities.Http.RequestHandlers.Results Message = message; } - public string Message { get; } + public string? Message { get; } public async Task ExecuteResultAsync(HttpContext httpContext, RequestDelegate next) diff --git a/src/activities/Elsa.Activities.Http/Services/IHttpRequestBodyParser.cs b/src/activities/Elsa.Activities.Http/Services/IHttpRequestBodyParser.cs index 148db19f0..cbcb575c4 100644 --- a/src/activities/Elsa.Activities.Http/Services/IHttpRequestBodyParser.cs +++ b/src/activities/Elsa.Activities.Http/Services/IHttpRequestBodyParser.cs @@ -9,6 +9,6 @@ namespace Elsa.Activities.Http.Services { int Priority { get; } string?[] SupportedContentTypes { get; } - Task ParseAsync(HttpRequest request, Type? targetType = default, CancellationToken cancellationToken = default); + Task ParseAsync(HttpRequest request, Type? targetType = default, CancellationToken cancellationToken = default); } } \ No newline at end of file diff --git a/src/activities/Elsa.Activities.Http/Services/IHttpResponseBodyParser.cs b/src/activities/Elsa.Activities.Http/Services/IHttpResponseBodyParser.cs index 1e2f1031e..eed5762f7 100644 --- a/src/activities/Elsa.Activities.Http/Services/IHttpResponseBodyParser.cs +++ b/src/activities/Elsa.Activities.Http/Services/IHttpResponseBodyParser.cs @@ -8,7 +8,7 @@ namespace Elsa.Activities.Http.Services public interface IHttpResponseBodyParser { int Priority { get; } - IEnumerable SupportedContentTypes { get; } + IEnumerable SupportedContentTypes { get; } Task ParseAsync(HttpResponseMessage response, CancellationToken cancellationToken); } } \ No newline at end of file diff --git a/src/activities/Elsa.Activities.Http/Services/TokenService.cs b/src/activities/Elsa.Activities.Http/Services/TokenService.cs index 63664b135..9f6f8feb9 100644 --- a/src/activities/Elsa.Activities.Http/Services/TokenService.cs +++ b/src/activities/Elsa.Activities.Http/Services/TokenService.cs @@ -21,7 +21,7 @@ namespace Elsa.Activities.Http.Services public bool TryDecryptToken(string token, out T payload) { - payload = default; + payload = default!; try { diff --git a/src/core/Elsa.Core/Extensions/WorkflowDefinitionManagerExtensions.cs b/src/core/Elsa.Core/Extensions/WorkflowDefinitionManagerExtensions.cs new file mode 100644 index 000000000..afbe63370 --- /dev/null +++ b/src/core/Elsa.Core/Extensions/WorkflowDefinitionManagerExtensions.cs @@ -0,0 +1,69 @@ +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using Elsa.Indexes; +using Elsa.Models; +using Elsa.Services; +using YesSql; + +namespace Elsa.Extensions +{ + public static class WorkflowDefinitionManagerExtensions + { + public static IQuery QueryByIdAndVersion(this IWorkflowDefinitionManager manager, string workflowDefinitionId, VersionOptions versionOptions) => + manager.Query(x => x.WorkflowDefinitionId == workflowDefinitionId).WithVersion(versionOptions); + + public static IQuery QueryByVersionId( + this IWorkflowDefinitionManager manager, + string workflowDefinitionVersionId) => + manager.Query(x => x.WorkflowDefinitionVersionId == workflowDefinitionVersionId); + + public static IQuery QueryByVersion( + this IWorkflowDefinitionManager manager, + VersionOptions versionOptions) => + manager.Query().WithVersion(versionOptions); + + public static IQuery QueryByBlockingActivity( + this IWorkflowInstanceManager manager, + string activityType) => + manager.Query(x => x.ActivityType == activityType); + + public static async Task GetAsync( + this IWorkflowDefinitionManager manager, + string workflowDefinitionId, + VersionOptions versionOptions, + CancellationToken cancellationToken = default) => + await manager.QueryByIdAndVersion(workflowDefinitionId, versionOptions).FirstOrDefaultAsync(); + + public static async Task GetByVersionIdAsync( + this IWorkflowDefinitionManager manager, + string workflowDefinitionVersionId, + CancellationToken cancellationToken = default) => + await manager.QueryByVersionId(workflowDefinitionVersionId).FirstOrDefaultAsync(); + + public static async Task> ListAsync( + this IWorkflowDefinitionManager manager, + VersionOptions versionOptions, + CancellationToken cancellationToken = default) => + await manager.QueryByVersion(versionOptions).ListAsync(); + + public static Task> ListByStatusAsync( + this IWorkflowInstanceManager manager, + WorkflowStatus workflowStatus, + CancellationToken cancellationToken = default) => + manager + .Query(x => x.WorkflowStatus == workflowStatus) + .ListAsync(); + + public static async Task> ListByBlockingActivityAsync( + this IWorkflowInstanceManager manager, + string activityType, + CancellationToken cancellationToken = default) => + await manager.QueryByBlockingActivity(activityType).ListAsync(); + + public static async Task> ListByBlockingActivityAsync( + this IWorkflowInstanceManager manager, + CancellationToken cancellationToken = default) => + await manager.ListByBlockingActivityAsync(typeof(TActivity).Name, cancellationToken); + } +} \ No newline at end of file diff --git a/src/core/Elsa.Core/Queries/WorkflowDefinitionByIdAndVersionQuery.cs b/src/core/Elsa.Core/Queries/WorkflowDefinitionByIdAndVersionQuery.cs deleted file mode 100644 index 7cedd57c2..000000000 --- a/src/core/Elsa.Core/Queries/WorkflowDefinitionByIdAndVersionQuery.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System; -using System.Linq.Expressions; -using System.Threading; -using System.Threading.Tasks; -using Elsa.Extensions; -using Elsa.Indexes; -using Elsa.Models; -using Elsa.Services; -using YesSql; - -namespace Elsa.Queries -{ - public class WorkflowDefinitionByIdAndVersionQuery : ICompiledQuery - { - public string WorkflowDefinitionId { get; } - public VersionOptions VersionOptions { get; } - - public WorkflowDefinitionByIdAndVersionQuery(string workflowDefinitionId, VersionOptions versionOptions) - { - WorkflowDefinitionId = workflowDefinitionId; - VersionOptions = versionOptions; - } - - public Expression, IQuery>> Query() => - query => query - .With(x => x.WorkflowDefinitionId == WorkflowDefinitionId) - .WithVersion(VersionOptions); - } - - public static class WorkflowDefinitionByIdAndVersionQueryWorkflowDefinitionManagerExtensions - { - public static IQuery QueryByIdAndVersion( - this IWorkflowDefinitionManager manager, - string workflowDefinitionId, - VersionOptions versionOptions) => - manager.Query(x => x.WorkflowDefinitionId == workflowDefinitionId).WithVersion(versionOptions); - //manager.ExecuteQuery(new WorkflowDefinitionByIdAndVersionQuery(workflowDefinitionId, versionOptions)); - - public static async Task GetAsync( - this IWorkflowDefinitionManager manager, - string workflowDefinitionId, - VersionOptions versionOptions, - CancellationToken cancellationToken = default) => - await manager.QueryByIdAndVersion(workflowDefinitionId, versionOptions).FirstOrDefaultAsync(); - } -} \ No newline at end of file diff --git a/src/core/Elsa.Core/Queries/WorkflowDefinitionByVersionIdQuery.cs b/src/core/Elsa.Core/Queries/WorkflowDefinitionByVersionIdQuery.cs deleted file mode 100644 index 670c80ae9..000000000 --- a/src/core/Elsa.Core/Queries/WorkflowDefinitionByVersionIdQuery.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using System.Linq.Expressions; -using System.Threading; -using System.Threading.Tasks; -using Elsa.Indexes; -using Elsa.Models; -using Elsa.Services; -using YesSql; - -namespace Elsa.Queries -{ - public class WorkflowDefinitionByVersionIdQuery : ICompiledQuery - { - public string WorkflowDefinitionVersionId { get; } - - public WorkflowDefinitionByVersionIdQuery(string workflowDefinitionVersionId) => - WorkflowDefinitionVersionId = workflowDefinitionVersionId; - - public Expression, IQuery>> Query() - { - return query => query - .With(x => x.WorkflowDefinitionVersionId == WorkflowDefinitionVersionId); - } - } - - public static class WorkflowDefinitionByVersionIdQueryWorkflowDefinitionManagerExtensions - { - public static IQuery QueryByVersionId(this IWorkflowDefinitionManager manager, - string workflowDefinitionVersionId) => - manager.ExecuteQuery(new WorkflowDefinitionByVersionIdQuery(workflowDefinitionVersionId)); - - public static async Task GetByVersionIdAsync( - this IWorkflowDefinitionManager manager, - string workflowDefinitionVersionId, - CancellationToken cancellationToken = default) => - await manager.QueryByVersionId(workflowDefinitionVersionId).FirstOrDefaultAsync(); - } -} \ No newline at end of file diff --git a/src/core/Elsa.Core/Queries/WorkflowDefinitionByVersionQuery.cs b/src/core/Elsa.Core/Queries/WorkflowDefinitionByVersionQuery.cs deleted file mode 100644 index be2a38327..000000000 --- a/src/core/Elsa.Core/Queries/WorkflowDefinitionByVersionQuery.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq.Expressions; -using System.Threading; -using System.Threading.Tasks; -using Elsa.Extensions; -using Elsa.Models; -using Elsa.Services; -using YesSql; - -namespace Elsa.Queries -{ - public class WorkflowDefinitionByVersionQuery : ICompiledQuery - { - public VersionOptions VersionOptions { get; } - public WorkflowDefinitionByVersionQuery(VersionOptions versionOptions) => VersionOptions = versionOptions; - - public Expression, IQuery>> Query() => - query => query.WithVersion(VersionOptions); - } - - public static class WorkflowDefinitionByVersionQueryWorkflowDefinitionManagerExtensions - { - public static IQuery QueryByVersion(this IWorkflowDefinitionManager manager, - VersionOptions versionOptions) => - manager.ExecuteQuery( - new WorkflowDefinitionByVersionQuery(versionOptions)); - - public static async Task> ListAsync( - this IWorkflowDefinitionManager manager, - VersionOptions versionOptions, - CancellationToken cancellationToken = default) => - await manager.QueryByVersion(versionOptions).ListAsync(); - } -} \ No newline at end of file diff --git a/src/core/Elsa.Core/Queries/WorkflowInstanceByBlockingActivityQuery.cs b/src/core/Elsa.Core/Queries/WorkflowInstanceByBlockingActivityQuery.cs deleted file mode 100644 index 47ed1a82f..000000000 --- a/src/core/Elsa.Core/Queries/WorkflowInstanceByBlockingActivityQuery.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq.Expressions; -using System.Threading; -using System.Threading.Tasks; -using Elsa.Indexes; -using Elsa.Models; -using Elsa.Services; -using YesSql; - -namespace Elsa.Queries -{ - public class WorkflowInstanceByBlockingActivityQuery : ICompiledQuery - { - public string ActivityType { get; } - - public WorkflowInstanceByBlockingActivityQuery(string activityType) - { - ActivityType = activityType; - } - - public Expression, IQuery>> Query() => query => - query.With().Where( - x => x.ActivityType == ActivityType); - } - - public static class WorkflowInstanceByBlockingActivityQueryWorkflowInstanceManagerExtensions - { - public static IQuery QueryByBlockingActivity( - this IWorkflowInstanceManager manager, - string activityType) => - manager - .ExecuteQuery( - new WorkflowInstanceByBlockingActivityQuery(activityType)); - - public static async Task> ListByBlockingActivityAsync( - this IWorkflowInstanceManager manager, - string activityType, - CancellationToken cancellationToken = default) => - await manager.QueryByBlockingActivity(activityType).ListAsync(); - - public static async Task> ListByBlockingActivityAsync( - this IWorkflowInstanceManager manager, - CancellationToken cancellationToken = default) => - await manager.ListByBlockingActivityAsync(typeof(TActivity).Name, cancellationToken); - } -} \ No newline at end of file diff --git a/src/core/Elsa.Core/Queries/WorkflowInstanceByStatusQuery.cs b/src/core/Elsa.Core/Queries/WorkflowInstanceByStatusQuery.cs deleted file mode 100644 index 97c2d3924..000000000 --- a/src/core/Elsa.Core/Queries/WorkflowInstanceByStatusQuery.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq.Expressions; -using System.Threading; -using System.Threading.Tasks; -using Elsa.Indexes; -using Elsa.Models; -using Elsa.Services; -using YesSql; - -namespace Elsa.Queries -{ - public class WorkflowInstanceByStatusQuery : ICompiledQuery - { - public WorkflowStatus Status { get; } - - public WorkflowInstanceByStatusQuery(WorkflowStatus status) - { - Status = status; - } - - public Expression, IQuery>> Query() => query => - query.With().Where( - x => x.WorkflowStatus == Status); - } - - public static class WorkflowInstanceByStatusQueryWorkflowInstanceManagerExtensions - { - public static Task> ListByStatusAsync( - this IWorkflowInstanceManager manager, - WorkflowStatus workflowStatus, - CancellationToken cancellationToken = default) => - manager - .ExecuteQuery( - new WorkflowInstanceByStatusQuery(workflowStatus)) - .ListAsync(); - } -} \ No newline at end of file diff --git a/src/core/Elsa.Core/Services/WorkflowPublisher.cs b/src/core/Elsa.Core/Services/WorkflowPublisher.cs index 897b7aa57..aaa58e994 100644 --- a/src/core/Elsa.Core/Services/WorkflowPublisher.cs +++ b/src/core/Elsa.Core/Services/WorkflowPublisher.cs @@ -1,7 +1,7 @@ using System.Threading; using System.Threading.Tasks; +using Elsa.Extensions; using Elsa.Models; -using Elsa.Queries; namespace Elsa.Services { diff --git a/src/core/Elsa.Core/StartupTasks/ResumeRunningWorkflowsTask.cs b/src/core/Elsa.Core/StartupTasks/ResumeRunningWorkflowsTask.cs index fec5b69df..1fc213dca 100644 --- a/src/core/Elsa.Core/StartupTasks/ResumeRunningWorkflowsTask.cs +++ b/src/core/Elsa.Core/StartupTasks/ResumeRunningWorkflowsTask.cs @@ -1,8 +1,8 @@ using System.Threading; using System.Threading.Tasks; using Elsa.DistributedLock; +using Elsa.Extensions; using Elsa.Models; -using Elsa.Queries; using Elsa.Services; namespace Elsa.StartupTasks diff --git a/src/samples/Elsa.Samples.ContextualWorkflowHttp/Models/Comment.cs b/src/samples/Elsa.Samples.ContextualWorkflowHttp/Models/Comment.cs index dc6096040..2e42c0a0a 100644 --- a/src/samples/Elsa.Samples.ContextualWorkflowHttp/Models/Comment.cs +++ b/src/samples/Elsa.Samples.ContextualWorkflowHttp/Models/Comment.cs @@ -4,8 +4,8 @@ namespace Elsa.Samples.ContextualWorkflowHttp.Models { public class Comment { - public string Author { get; set; } + public string Author { get; set; } = default!; public Instant Timestamp { get; set; } - public string Text { get; set; } + public string Text { get; set; } = default!; } } \ No newline at end of file diff --git a/src/samples/Elsa.Samples.ContextualWorkflowHttp/Workflows/DocumentApprovalWorkflow.cs b/src/samples/Elsa.Samples.ContextualWorkflowHttp/Workflows/DocumentApprovalWorkflow.cs index 1fd07e354..8561d7a4c 100644 --- a/src/samples/Elsa.Samples.ContextualWorkflowHttp/Workflows/DocumentApprovalWorkflow.cs +++ b/src/samples/Elsa.Samples.ContextualWorkflowHttp/Workflows/DocumentApprovalWorkflow.cs @@ -28,7 +28,7 @@ namespace Elsa.Samples.ContextualWorkflowHttp.Workflows .ReceiveHttpPostRequest("/documents") // Store the document as the workflow context. It will be saved automatically when the workflow gets suspended. - .Then(context => context.WorkflowExecutionContext.WorkflowContext = (Document)((HttpRequestModel)context.Input!).Body) + .Then(context => context.WorkflowExecutionContext.WorkflowContext = (Document)((HttpRequestModel)context.Input!).Body!) // Write an HTTP response. .WriteHttpResponse( @@ -63,7 +63,7 @@ namespace Elsa.Samples.ContextualWorkflowHttp.Workflows private static void StoreComment(ActivityExecutionContext context) { var document = (Document)context.WorkflowExecutionContext.WorkflowContext!; - var comment = (Comment)((HttpRequestModel)context.Input)!.Body; + var comment = (Comment)((HttpRequestModel)context.Input)!.Body!; document.Comments.Add(comment); } diff --git a/src/server/Elsa.Server.Api/Endpoints/WorkflowDefinitions/Get.cs b/src/server/Elsa.Server.Api/Endpoints/WorkflowDefinitions/Get.cs index b4222d6c8..47940db17 100644 --- a/src/server/Elsa.Server.Api/Endpoints/WorkflowDefinitions/Get.cs +++ b/src/server/Elsa.Server.Api/Endpoints/WorkflowDefinitions/Get.cs @@ -1,7 +1,7 @@ using System.Threading; using System.Threading.Tasks; +using Elsa.Extensions; using Elsa.Models; -using Elsa.Queries; using Elsa.Serialization; using Elsa.Services; using Microsoft.AspNetCore.Mvc; diff --git a/test/component/Elsa.ComponentTests/Helpers/ElsaHostApplicationFactory.cs b/test/component/Elsa.ComponentTests/Helpers/ElsaHostApplicationFactory.cs index ca12aaaf8..b30230533 100644 --- a/test/component/Elsa.ComponentTests/Helpers/ElsaHostApplicationFactory.cs +++ b/test/component/Elsa.ComponentTests/Helpers/ElsaHostApplicationFactory.cs @@ -7,7 +7,7 @@ namespace Elsa.ComponentTests.Helpers { public class ElsaHostApplicationFactory : WebApplicationFactory { - private string _dbConnectionString; + private string _dbConnectionString = default!; public void SetDbConnectionString(string connectionString) { diff --git a/test/integration/Elsa.Core.IntegrationTests/Assets/hello-world-workflow.json b/test/integration/Elsa.Core.IntegrationTests/Assets/hello-world-workflow.json index 59672ec5a..f7a5177d7 100644 --- a/test/integration/Elsa.Core.IntegrationTests/Assets/hello-world-workflow.json +++ b/test/integration/Elsa.Core.IntegrationTests/Assets/hello-world-workflow.json @@ -15,7 +15,7 @@ "$values": [ { "$id": "4", - "id": "activity-1", + "activityId": "activity-1", "type": "WriteLine", "properties": { "$id": "5",