More work on the workflow processing engine, removed the predecessors, and have change the architecture to progress based on IOutcome<T> only.
This commit is contained in:
parent
4bf1ab73fa
commit
8afe7ac5a0
@ -8,10 +8,10 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="10.0.3" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="10.0.4" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="Moq" Version="4.20.72" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.3" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.4" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@ -22,4 +22,5 @@ public interface IActivityRepository : IRepository
|
||||
);
|
||||
|
||||
Task AddActivityTasksAsync(AuditUserDetails auditUserDetails, IEnumerable<ActivityTask> activityTasks, CancellationToken cancellationToken);
|
||||
Task UpdateActivityTasksAsync(AuditUserDetails auditUserDetails, ICollection<ActivityTask> tasks, CancellationToken cancellationToken);
|
||||
}
|
||||
@ -14,7 +14,7 @@
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||
<PackageReference Include="Moq" Version="4.20.72" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -34,9 +34,9 @@
|
||||
<PackageReference Include="AspNetCore.HealthChecks.SqlServer" Version="9.0.0" />
|
||||
<PackageReference Include="AspNetCore.HealthChecks.UI.Client" Version="9.0.0" />
|
||||
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="10.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" Version="10.0.3" />
|
||||
<PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks.EntityFrameworkCore" Version="10.0.4" />
|
||||
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.23.0" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="10.1.4" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="10.1.5" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -10,6 +10,8 @@ public enum ActivityState
|
||||
Cancelled,
|
||||
[Description("The activity is currently active for processing")]
|
||||
Active,
|
||||
[Description("Interactive processing of this task has finished and the workflow processor can process the outcome")]
|
||||
ReadyToComplete,
|
||||
[Description("Processing of this activity has finished")]
|
||||
Completed
|
||||
}
|
||||
@ -7,8 +7,8 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="10.0.3" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.3" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="10.0.4" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.4" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@ -16,10 +16,10 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="10.0.3" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="10.0.4" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="Moq" Version="4.20.72" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="10.0.3" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="10.0.4" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
|
||||
<PackageReference Include="System.Linq.Dynamic.Core" Version="1.7.1" />
|
||||
</ItemGroup>
|
||||
|
||||
@ -8,11 +8,11 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="10.0.3" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="10.0.4" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||
<PackageReference Include="Moq" Version="4.20.72" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -31,6 +31,12 @@ public class ActivityTask : IGeneralId, ISoftDeletable
|
||||
[Required]
|
||||
public Guid TaskGuid { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// This is the fullname of the tasktype
|
||||
/// </summary>
|
||||
[Required]
|
||||
public string TaskType { get; set; }
|
||||
|
||||
[AuditName]
|
||||
[Required]
|
||||
public string TaskName { get; set; }
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="10.0.0" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="10.0.3">
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="10.0.4">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="Moq" Version="4.20.72" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
2224
e-suite.Database.SqlServer/e-suite.Database.SqlServer/Migrations/20260311161348_addingTaskType.Designer.cs
generated
Normal file
2224
e-suite.Database.SqlServer/e-suite.Database.SqlServer/Migrations/20260311161348_addingTaskType.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,31 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace esuite.Database.SqlServer.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class addingTaskType : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.AddColumn<string>(
|
||||
name: "TaskType",
|
||||
schema: "Activity",
|
||||
table: "ActivityTasks",
|
||||
type: "nvarchar(max)",
|
||||
nullable: false,
|
||||
defaultValue: "");
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropColumn(
|
||||
name: "TaskType",
|
||||
schema: "Activity",
|
||||
table: "ActivityTasks");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -17,7 +17,7 @@ namespace esuite.Database.SqlServer.Migrations
|
||||
{
|
||||
#pragma warning disable 612, 618
|
||||
modelBuilder
|
||||
.HasAnnotation("ProductVersion", "10.0.3")
|
||||
.HasAnnotation("ProductVersion", "10.0.4")
|
||||
.HasAnnotation("Relational:MaxIdentifierLength", 128);
|
||||
|
||||
SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
|
||||
@ -196,6 +196,10 @@ namespace esuite.Database.SqlServer.Migrations
|
||||
.IsRequired()
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.Property<string>("TaskType")
|
||||
.IsRequired()
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.HasKey("Id");
|
||||
|
||||
b.HasIndex("Guid")
|
||||
|
||||
@ -13,8 +13,8 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Data.SqlClient" Version="6.1.4" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="10.0.3" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.3">
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="10.0.4" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="10.0.4">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="Moq" Version="4.20.72" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="10.0.3" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="10.0.3" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="10.0.4" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="10.0.4" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
@ -12,9 +12,9 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
<PackageReference Include="NUnit.Analyzers" Version="4.11.2">
|
||||
<PackageReference Include="NUnit.Analyzers" Version="4.12.0">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="Moq" Version="4.20.72" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="Moq" Version="4.20.72" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.3" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.4" />
|
||||
<PackageReference Include="RabbitMQ.Client" Version="7.2.1" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -12,9 +12,9 @@
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||
<PackageReference Include="Moq" Version="4.20.72" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
<PackageReference Include="NUnit.Analyzers" Version="4.11.2">
|
||||
<PackageReference Include="NUnit.Analyzers" Version="4.12.0">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||
<PackageReference Include="Moq" Version="4.20.72" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -12,9 +12,9 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
<PackageReference Include="NUnit.Analyzers" Version="4.11.2">
|
||||
<PackageReference Include="NUnit.Analyzers" Version="4.12.0">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
|
||||
@ -11,9 +11,9 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
<PackageReference Include="NUnit.Analyzers" Version="4.11.2">
|
||||
<PackageReference Include="NUnit.Analyzers" Version="4.12.0">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||
<PackageReference Include="Moq" Version="4.20.72" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -11,9 +11,9 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
<PackageReference Include="NUnit.Analyzers" Version="4.11.2">
|
||||
<PackageReference Include="NUnit.Analyzers" Version="4.12.0">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
|
||||
@ -14,6 +14,6 @@
|
||||
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
|
||||
</ItemGroup>
|
||||
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.entityframeworkcore\10.0.3\buildTransitive\net10.0\Microsoft.EntityFrameworkCore.props" Condition="Exists('$(NuGetPackageRoot)microsoft.entityframeworkcore\10.0.3\buildTransitive\net10.0\Microsoft.EntityFrameworkCore.props')" />
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.entityframeworkcore\10.0.4\buildTransitive\net10.0\Microsoft.EntityFrameworkCore.props" Condition="Exists('$(NuGetPackageRoot)microsoft.entityframeworkcore\10.0.4\buildTransitive\net10.0\Microsoft.EntityFrameworkCore.props')" />
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.extensions.options\10.0.3\buildTransitive\net8.0\Microsoft.Extensions.Options.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.options\10.0.3\buildTransitive\net8.0\Microsoft.Extensions.Options.targets')" />
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\10.0.3\buildTransitive\net8.0\Microsoft.Extensions.Logging.Abstractions.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\10.0.3\buildTransitive\net8.0\Microsoft.Extensions.Logging.Abstractions.targets')" />
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.extensions.configuration.binder\10.0.3\buildTransitive\netstandard2.0\Microsoft.Extensions.Configuration.Binder.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.configuration.binder\10.0.3\buildTransitive\netstandard2.0\Microsoft.Extensions.Configuration.Binder.targets')" />
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.extensions.options\10.0.4\buildTransitive\net8.0\Microsoft.Extensions.Options.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.options\10.0.4\buildTransitive\net8.0\Microsoft.Extensions.Options.targets')" />
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\10.0.4\buildTransitive\net8.0\Microsoft.Extensions.Logging.Abstractions.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\10.0.4\buildTransitive\net8.0\Microsoft.Extensions.Logging.Abstractions.targets')" />
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.extensions.configuration.binder\10.0.4\buildTransitive\netstandard2.0\Microsoft.Extensions.Configuration.Binder.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.configuration.binder\10.0.4\buildTransitive\netstandard2.0\Microsoft.Extensions.Configuration.Binder.targets')" />
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
@ -11,7 +11,7 @@
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||
<PackageReference Include="Moq" Version="4.20.72" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -46,4 +46,13 @@ public class ActivityRepository : RepositoryBase, IActivityRepository
|
||||
DatabaseDbContext.ActivityTasks.AddRange(activityTasks);
|
||||
await DatabaseDbContext.SaveChangesAsync(auditUserDetails, cancellationToken);
|
||||
}
|
||||
|
||||
public async Task UpdateActivityTasksAsync(
|
||||
AuditUserDetails auditUserDetails,
|
||||
ICollection<ActivityTask> tasks,
|
||||
CancellationToken cancellationToken
|
||||
)
|
||||
{
|
||||
await DatabaseDbContext.SaveChangesAsync(auditUserDetails, cancellationToken);
|
||||
}
|
||||
}
|
||||
@ -9,7 +9,7 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -11,9 +11,9 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
<PackageReference Include="NUnit.Analyzers" Version="4.11.2">
|
||||
<PackageReference Include="NUnit.Analyzers" Version="4.12.0">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||
<PackageReference Include="Moq" Version="4.20.72" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||
<PackageReference Include="Moq" Version="4.20.72" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -9,9 +9,9 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="GoogleAuthenticator" Version="3.2.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.3" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.3" />
|
||||
<PackageReference Include="Microsoft.Extensions.Identity.Core" Version="10.0.3" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="10.0.4" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.4" />
|
||||
<PackageReference Include="Microsoft.Extensions.Identity.Core" Version="10.0.4" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="Moq" Version="4.20.72" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="10.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.3" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting" Version="10.0.4" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="Moq" Version="4.20.72" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -18,7 +18,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Dapper" Version="2.1.66" />
|
||||
<PackageReference Include="Dapper" Version="2.1.72" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||
<PackageReference Include="Moq" Version="4.20.72" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.3" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="10.0.4" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@ -12,9 +12,9 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="Moq" Version="4.20.72" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
<PackageReference Include="NUnit.Analyzers" Version="4.11.2">
|
||||
<PackageReference Include="NUnit.Analyzers" Version="4.12.0">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="Moq" Version="4.20.72" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="Moq" Version="4.20.72" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -21,7 +21,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Dapper" Version="2.1.66" />
|
||||
<PackageReference Include="Dapper" Version="2.1.72" />
|
||||
<PackageReference Include="MySqlConnector" Version="2.5.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
using e_suite.Database.Audit;
|
||||
using e_suite.Database.Core.Tables.Activity;
|
||||
using e_suite.Workflow.Core;
|
||||
using e_suite.Workflow.Core.Interfaces;
|
||||
using e_suite.Workflow.Core.Extensions;
|
||||
using eSuite.Core.Clock;
|
||||
using eSuite.Core.Enums;
|
||||
using eSuite.Core.Miscellaneous;
|
||||
@ -58,9 +58,10 @@ public class WorkflowProcessor : IWorkflowProcessor
|
||||
|
||||
var workflowVersion = _workflowConverter.DeserialiseFromDatabase(activityInstance.WorkflowVersion);
|
||||
|
||||
bool hasCompletedTask = false;
|
||||
|
||||
await _activityRepository.TransactionAsync(async () =>
|
||||
{
|
||||
|
||||
ICollection<ActivityTask> tasks;
|
||||
if (activityInstance.ActivityState == ActivityState.Pending)
|
||||
{
|
||||
@ -69,14 +70,37 @@ public class WorkflowProcessor : IWorkflowProcessor
|
||||
cancellationToken);
|
||||
|
||||
tasks = await PlanTaskExecution(auditUserDetails, activityInstance, workflowVersion, cancellationToken);
|
||||
}
|
||||
else
|
||||
{
|
||||
tasks = activityInstance.Tasks;
|
||||
}
|
||||
|
||||
//Invoke startable tasks.
|
||||
await StartInitialTasks(auditUserDetails, tasks, workflowVersion, cancellationToken);
|
||||
|
||||
if (tasks.Any(task => task.ActivityState == ActivityState.ReadyToComplete))
|
||||
{
|
||||
hasCompletedTask = true;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if (hasCompletedTask)
|
||||
{
|
||||
//send workflow progress message here.
|
||||
}
|
||||
}
|
||||
|
||||
private async Task StartInitialTasks(AuditUserDetails auditUserDetails, ICollection<ActivityTask> tasks, WorkflowVersion workflowVersion, CancellationToken cancellationToken)
|
||||
{
|
||||
var startTasks = workflowVersion.GetStartTasks().ToList();
|
||||
var startTaskGuids = startTasks.Select(t => t.Guid).ToHashSet();
|
||||
|
||||
foreach (var task in tasks)
|
||||
{
|
||||
if (startTaskGuids.Contains(task.TaskGuid))
|
||||
{
|
||||
var taskDefinition = workflowVersion.FindTask(task.TaskGuid)!;
|
||||
await taskDefinition.StartTask(task, _clock);
|
||||
}
|
||||
}
|
||||
|
||||
await _activityRepository.UpdateActivityTasksAsync(auditUserDetails, tasks, cancellationToken);
|
||||
}
|
||||
|
||||
private async Task<ICollection<ActivityTask>> PlanTaskExecution(AuditUserDetails auditUserDetails, Activity activityInstance, WorkflowVersion workflowVersion, CancellationToken cancellationToken)
|
||||
@ -94,8 +118,10 @@ public class WorkflowProcessor : IWorkflowProcessor
|
||||
Activity = activityInstance,
|
||||
ActivityState = ActivityState.Pending,
|
||||
TaskGuid = task.Guid,
|
||||
ActivityOrdinal = activityOrdinalCounter++,
|
||||
TaskType = task.GetType().FullName!,
|
||||
TaskName = task.Name,
|
||||
ActivityOrdinal = activityOrdinalCounter++,
|
||||
|
||||
};
|
||||
activityTasks.Add(activityTask);
|
||||
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.3" />
|
||||
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.4" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.3" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration" Version="10.0.4" />
|
||||
<PackageReference Include="Moq" Version="4.20.72" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.3.0" />
|
||||
<PackageReference Include="MockQueryable.Moq" Version="10.0.2" />
|
||||
<PackageReference Include="Moq" Version="4.20.72" />
|
||||
<PackageReference Include="NUnit" Version="4.5.0" />
|
||||
<PackageReference Include="NUnit" Version="4.5.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="6.1.0" />
|
||||
</ItemGroup>
|
||||
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="10.0.3" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="10.0.4" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
6
e-suite.Workflow.Core/Enums/DefaultOutcome.cs
Normal file
6
e-suite.Workflow.Core/Enums/DefaultOutcome.cs
Normal file
@ -0,0 +1,6 @@
|
||||
namespace e_suite.Workflow.Core.Enums;
|
||||
|
||||
public enum DefaultOutcome
|
||||
{
|
||||
Complete
|
||||
}
|
||||
@ -2,8 +2,11 @@
|
||||
|
||||
public static class ObjectExtensions
|
||||
{
|
||||
public static bool In<T>(this T obj, params T[] args)
|
||||
extension<T>(T obj)
|
||||
{
|
||||
return args.Contains(obj);
|
||||
public bool In(params T[] args)
|
||||
{
|
||||
return args.Contains(obj);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,6 +1,8 @@
|
||||
using System.Collections.Concurrent;
|
||||
using e_suite.Workflow.Core.Attributes;
|
||||
using e_suite.Workflow.Core.Attributes;
|
||||
using e_suite.Workflow.Core.Interfaces;
|
||||
using e_suite.Workflow.Core.Tasks;
|
||||
using System.Collections.Concurrent;
|
||||
using static System.Net.Mime.MediaTypeNames;
|
||||
|
||||
namespace e_suite.Workflow.Core.Extensions;
|
||||
|
||||
@ -92,10 +94,44 @@ public static class StageExtensions
|
||||
});
|
||||
}
|
||||
|
||||
public static IEnumerable<Type> AllowedTasks<T>(this IStage<T> stage)
|
||||
where T : TaskTypeAttribute
|
||||
extension<T>(IStage<T> stage) where T : TaskTypeAttribute
|
||||
{
|
||||
var attributeType = typeof(T);
|
||||
return GetAllowedTaskTypes(attributeType);
|
||||
public IEnumerable<Type> AllowedTasks()
|
||||
{
|
||||
var attributeType = typeof(T);
|
||||
return GetAllowedTaskTypes(attributeType);
|
||||
}
|
||||
}
|
||||
|
||||
extension(IStage stage)
|
||||
{
|
||||
public IEnumerable<Guid> GetAllTargets()
|
||||
{
|
||||
return stage.Tasks.SelectMany(t => t.GetTargetGuids()).Distinct();
|
||||
}
|
||||
|
||||
public IEnumerable<ITask> GetStartTasks()
|
||||
{
|
||||
var allTargets = stage.GetAllTargets().ToHashSet();
|
||||
return stage.Tasks.Where(t => !allTargets.Contains(t.Guid));
|
||||
}
|
||||
|
||||
public ITask? FindTask(Guid taskGuid, bool deepScan = true)
|
||||
{
|
||||
foreach (var task in stage.Tasks)
|
||||
{
|
||||
if (task.Guid == taskGuid)
|
||||
return task;
|
||||
|
||||
if (!deepScan || task is not IStage nestedStage)
|
||||
continue;
|
||||
|
||||
var found = nestedStage.FindTask(taskGuid, deepScan);
|
||||
if (found != null)
|
||||
return found;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,38 +1,41 @@
|
||||
using e_suite.Database.Core.Models;
|
||||
using e_suite.Database.Core.Tables.Contacts;
|
||||
using e_suite.Database.Core.Tables.Domain;
|
||||
using e_suite.Database.Core.Tables.Activity;
|
||||
using e_suite.Workflow.Core.Attributes;
|
||||
using e_suite.Workflow.Core.Interfaces;
|
||||
using eSuite.Core.Miscellaneous;
|
||||
using eSuite.Core.Clock;
|
||||
using eSuite.Core.Enums;
|
||||
using System.Collections;
|
||||
using System.Reflection;
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace e_suite.Workflow.Core.Extensions;
|
||||
|
||||
public static class TaskExtensions
|
||||
{
|
||||
private static Dictionary<string, object?> ToConfigDictionary(this ITask task)
|
||||
extension(ITask task)
|
||||
{
|
||||
var dictionary = new Dictionary<string, object?>();
|
||||
|
||||
var type = task.GetType();
|
||||
var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
|
||||
|
||||
foreach (var prop in properties)
|
||||
private Dictionary<string, object?> ToConfigDictionary()
|
||||
{
|
||||
if (!prop.CanRead)
|
||||
continue;
|
||||
var dictionary = new Dictionary<string, object?>();
|
||||
|
||||
if (!prop.CanWrite)
|
||||
continue;
|
||||
var type = task.GetType();
|
||||
var properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);
|
||||
|
||||
var value = prop.GetValue(task);
|
||||
foreach (var prop in properties)
|
||||
{
|
||||
if (!prop.CanRead)
|
||||
continue;
|
||||
|
||||
dictionary[prop.Name] = value;
|
||||
if (!prop.CanWrite)
|
||||
continue;
|
||||
|
||||
var value = prop.GetValue(task);
|
||||
|
||||
dictionary[prop.Name] = value;
|
||||
}
|
||||
|
||||
return dictionary;
|
||||
}
|
||||
|
||||
return dictionary;
|
||||
}
|
||||
|
||||
public static ITask ToTask(this TaskDefinition definition, JsonSerializerOptions jsonSerializerOptions)
|
||||
@ -87,37 +90,7 @@ public static class TaskExtensions
|
||||
prop.SetValue(obj, value);
|
||||
}
|
||||
}
|
||||
|
||||
public static TaskDefinition ToDefinition(this ITask task)
|
||||
{
|
||||
if (task is null)
|
||||
throw new NullReferenceException();
|
||||
|
||||
|
||||
return new TaskDefinition
|
||||
{
|
||||
Type = task.GetType().FullName,
|
||||
Config = task.ToConfigDictionary()
|
||||
};
|
||||
}
|
||||
|
||||
//public static TaskDefinition ToDefinition(this ITask task)
|
||||
//{
|
||||
// if (task is ITemplateValidatable v)
|
||||
// {
|
||||
// var errors = v.ValidateForTemplate().ToList();
|
||||
// if (errors.Count != 0)
|
||||
// throw new InvalidOperationException(
|
||||
// $"Task {task.GetType().Name} is invalid: {string.Join("; ", errors)}");
|
||||
// }
|
||||
|
||||
// return new TaskDefinition
|
||||
// {
|
||||
// Type = task.GetType().FullName!,
|
||||
// Config = ExtractConfig(task)
|
||||
// };
|
||||
//}
|
||||
|
||||
|
||||
private static Dictionary<string, object> ExtractConfig(object task)
|
||||
{
|
||||
var dict = new Dictionary<string, object>();
|
||||
@ -136,6 +109,48 @@ public static class TaskExtensions
|
||||
|
||||
return dict;
|
||||
}
|
||||
|
||||
extension(ITask task)
|
||||
{
|
||||
public TaskDefinition ToDefinition()
|
||||
{
|
||||
if (task is null)
|
||||
throw new NullReferenceException();
|
||||
|
||||
|
||||
return new TaskDefinition
|
||||
{
|
||||
Type = task.GetType().FullName!,
|
||||
Config = task.ToConfigDictionary()!
|
||||
};
|
||||
}
|
||||
|
||||
public IEnumerable<Guid> GetTargetGuids()
|
||||
{
|
||||
var outcomeInterface = task.GetType()
|
||||
.GetInterfaces()
|
||||
.FirstOrDefault(i => i.IsGenericType &&
|
||||
i.GetGenericTypeDefinition() == typeof(IOutcome<>));
|
||||
|
||||
if (outcomeInterface == null)
|
||||
return Enumerable.Empty<Guid>();
|
||||
|
||||
var prop = outcomeInterface.GetProperty("OutcomeActions");
|
||||
var dict = (IDictionary)prop.GetValue(task);
|
||||
|
||||
return dict!.Values.Cast<Guid>();
|
||||
}
|
||||
|
||||
public async Task StartTask(ActivityTask activityTask, IClock clock)
|
||||
{
|
||||
activityTask.ActivityState = ActivityState.Active;
|
||||
activityTask.StartDateTime = clock.GetNow;
|
||||
|
||||
await task.OnStartedAsync(activityTask);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
//public static ITask ToTask(this TaskDefinition def)
|
||||
//{
|
||||
|
||||
6
e-suite.Workflow.Core/Interfaces/IJoin.cs
Normal file
6
e-suite.Workflow.Core/Interfaces/IJoin.cs
Normal file
@ -0,0 +1,6 @@
|
||||
namespace e_suite.Workflow.Core.Interfaces;
|
||||
|
||||
public interface IJoin
|
||||
{
|
||||
List<Guid> WaitFor { get; }
|
||||
}
|
||||
@ -9,5 +9,4 @@ public interface IOutcome<T>
|
||||
//public T? TaskOutcome { get; set; }
|
||||
|
||||
Dictionary<T, Guid> OutcomeActions { get; set; }
|
||||
bool OverrideDefaultTaskProgression { get; set; }
|
||||
}
|
||||
@ -3,12 +3,17 @@ using e_suite.Workflow.Core.Attributes;
|
||||
|
||||
namespace e_suite.Workflow.Core.Interfaces;
|
||||
|
||||
[TaskCapability]
|
||||
public interface IStage<T> where T : TaskTypeAttribute
|
||||
public interface IStage
|
||||
{
|
||||
/// <summary>
|
||||
/// Tasks that need to be completed before this stage of a workflow is considered complete.
|
||||
/// </summary>
|
||||
[Required]
|
||||
ICollection<ITask> Tasks { get; }
|
||||
}
|
||||
|
||||
|
||||
[TaskCapability]
|
||||
public interface IStage<T> : IStage where T : TaskTypeAttribute
|
||||
{
|
||||
}
|
||||
@ -1,4 +1,5 @@
|
||||
using e_suite.Workflow.Core.Attributes;
|
||||
using e_suite.Database.Core.Tables.Activity;
|
||||
using e_suite.Workflow.Core.Attributes;
|
||||
|
||||
namespace e_suite.Workflow.Core.Interfaces;
|
||||
|
||||
@ -31,25 +32,19 @@ public interface ITask
|
||||
public TimeSpan Duration { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// List of tasks that need to be completed before this on can start. (If empty, will start when the workflow starts)
|
||||
/// Called when the task status has been progressed from Pending to Active.
|
||||
///
|
||||
/// Note: You can use this method to set the TaskStatus to ReadyToComplete if there is no manual processing needed for this task.
|
||||
/// After this method is completed, the TaskStatus must be either Active or ReadyToComplete.
|
||||
/// </summary>
|
||||
List<ITask> Predecessors { get; set; }
|
||||
/// <returns></returns>
|
||||
public Task OnStartedAsync(ActivityTask activityTask);
|
||||
|
||||
//Todo can only be on a run-time instance
|
||||
///// <summary>
|
||||
///// Called when the task status has been progressed from Pending to Active.
|
||||
/////
|
||||
///// Note: You can use this method to set the TaskStatus to ReadyToComplete if there is no manual processing needed for this task.
|
||||
///// After this method is completed, the TaskStatus must be either Active or ReadyToComplete.
|
||||
///// </summary>
|
||||
///// <returns></returns>
|
||||
//Task OnActivateAsync();
|
||||
|
||||
///// <summary>
|
||||
///// Called when the task status has been progressed from ReadyToComplete to Completed
|
||||
///// </summary>
|
||||
///// <returns>True when the task completes successfully, false when it is considered failed.</returns>
|
||||
//Task<bool> OnCompleteAsync();
|
||||
/// <summary>
|
||||
/// Called when the task status has been progressed from ReadyToComplete to Completed
|
||||
/// </summary>
|
||||
/// <returns>True when the task completes successfully, false when it is considered failed.</returns>
|
||||
public Task OnCompleteAsync(ActivityTask activityTask);
|
||||
|
||||
//Todo add support for events (soap, rest, sftp, e-mail)
|
||||
}
|
||||
@ -1,9 +1,10 @@
|
||||
using e_suite.Workflow.Core.Enums;
|
||||
using e_suite.Database.Core.Tables.Activity;
|
||||
using e_suite.Workflow.Core.Enums;
|
||||
using e_suite.Workflow.Core.Interfaces;
|
||||
|
||||
namespace e_suite.Workflow.Core;
|
||||
|
||||
public abstract class TaskBase : ITask, IBudget, ITags
|
||||
public abstract class TaskBase : ITask, IBudget, ITags, IJoin
|
||||
{
|
||||
public Guid Guid { get; set; } = Guid.CreateVersion7();
|
||||
public required ITask Parent { get; set; }
|
||||
@ -19,14 +20,15 @@ public abstract class TaskBase : ITask, IBudget, ITags
|
||||
public Priority Priority { get; set; } = Priority.Normal;
|
||||
public IList<string> Tags { get; set; } = new List<string>();
|
||||
|
||||
//Todo can only be on a run-time instance
|
||||
//public virtual Task OnActivateAsync()
|
||||
//{
|
||||
// return Task.CompletedTask;
|
||||
//}
|
||||
public List<Guid> WaitFor { get; }
|
||||
|
||||
//public virtual Task<bool> OnCompleteAsync()
|
||||
//{
|
||||
// return Task.FromResult(true);
|
||||
//}
|
||||
public virtual Task OnStartedAsync(ActivityTask activityTask)
|
||||
{
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
public virtual Task OnCompleteAsync(ActivityTask activityTask)
|
||||
{
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
@ -9,6 +9,6 @@ public class AdhocApprovalTask : TaskBase, IAssignees<ApprovalTaskAssignee>, IOu
|
||||
{
|
||||
public List<ApprovalTaskAssignee> Assignees { get; set; } = [];
|
||||
public ApprovalVerdict TaskOutcome { get; set; }
|
||||
public Dictionary<ApprovalVerdict, Guid> OutcomeActions { get; set; }
|
||||
public Dictionary<ApprovalVerdict, Guid> OutcomeActions { get; set; } = [];
|
||||
public bool OverrideDefaultTaskProgression { get; set; }
|
||||
}
|
||||
@ -1,11 +1,13 @@
|
||||
using e_suite.Workflow.Core.Attributes;
|
||||
using e_suite.Workflow.Core.Enums;
|
||||
using e_suite.Workflow.Core.Interfaces;
|
||||
|
||||
namespace e_suite.Workflow.Core.Tasks;
|
||||
|
||||
[ApprovalTask]
|
||||
public class ApprovalStep : TaskBase, IAssignees<ApprovalTaskAssignee>
|
||||
public class ApprovalStep : TaskBase, IAssignees<ApprovalTaskAssignee>, IOutcome<DefaultOutcome>
|
||||
{
|
||||
public List<ApprovalTaskAssignee> Assignees { get; set; } = [];
|
||||
|
||||
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
|
||||
}
|
||||
@ -9,6 +9,6 @@ public class ApprovalTask : TaskBase, IStage<ApprovalTaskAttribute>, IOutcome<Ap
|
||||
{
|
||||
public ICollection<ITask> Tasks { get; } = new List<ITask>();
|
||||
public ApprovalVerdict TaskOutcome { get; set; }
|
||||
public Dictionary<ApprovalVerdict, Guid> OutcomeActions { get; set; }
|
||||
public Dictionary<ApprovalVerdict, Guid> OutcomeActions { get; set; } = [];
|
||||
public bool OverrideDefaultTaskProgression { get; set; }
|
||||
}
|
||||
@ -1,8 +1,11 @@
|
||||
using e_suite.Workflow.Core.Attributes;
|
||||
using e_suite.Workflow.Core.Enums;
|
||||
using e_suite.Workflow.Core.Interfaces;
|
||||
|
||||
namespace e_suite.Workflow.Core.Tasks;
|
||||
|
||||
[GeneralTask]
|
||||
public class AssetUploadTask : TaskBase
|
||||
public class AssetUploadTask : TaskBase, IOutcome<DefaultOutcome>
|
||||
{
|
||||
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
|
||||
}
|
||||
@ -1,5 +1,6 @@
|
||||
using System.ComponentModel;
|
||||
using e_suite.Workflow.Core.Attributes;
|
||||
using e_suite.Workflow.Core.Enums;
|
||||
using e_suite.Workflow.Core.Interfaces;
|
||||
|
||||
namespace e_suite.Workflow.Core.Tasks;
|
||||
@ -8,7 +9,8 @@ namespace e_suite.Workflow.Core.Tasks;
|
||||
/// A user has to open this task, manually set it to ready to complete
|
||||
/// </summary>
|
||||
[GeneralTask]
|
||||
public class BasicTask : TaskBase, IAssignees<TaskAssignee>
|
||||
public class BasicTask : TaskBase, IAssignees<TaskAssignee>, IOutcome<DefaultOutcome>
|
||||
{
|
||||
public List<TaskAssignee> Assignees { get; set; } = [];
|
||||
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
|
||||
}
|
||||
@ -1,4 +1,5 @@
|
||||
using e_suite.Workflow.Core.Attributes;
|
||||
using e_suite.Workflow.Core.Enums;
|
||||
using e_suite.Workflow.Core.Interfaces;
|
||||
|
||||
namespace e_suite.Workflow.Core.Tasks;
|
||||
@ -7,7 +8,8 @@ namespace e_suite.Workflow.Core.Tasks;
|
||||
/// Create a table of field data for output to PDF or AdobeIllustrator
|
||||
/// </summary>
|
||||
[GeneralTask]
|
||||
public class ContentCollationTask : TaskBase, IAssignees<TaskAssignee>
|
||||
public class ContentCollationTask : TaskBase, IAssignees<TaskAssignee>, IOutcome<DefaultOutcome>
|
||||
{
|
||||
public List<TaskAssignee> Assignees { get; set; } = [];
|
||||
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
|
||||
}
|
||||
@ -1,4 +1,6 @@
|
||||
using e_suite.Workflow.Core.Attributes;
|
||||
using e_suite.Workflow.Core.Enums;
|
||||
using e_suite.Workflow.Core.Interfaces;
|
||||
|
||||
namespace e_suite.Workflow.Core.Tasks;
|
||||
|
||||
@ -6,7 +8,7 @@ namespace e_suite.Workflow.Core.Tasks;
|
||||
/// This task will allow Asset files to be released, and automatically uploaded to an external source
|
||||
/// </summary>
|
||||
[GeneralTask(allowMultiple: false)]
|
||||
public class FileReleaseTask : TaskBase
|
||||
public class FileReleaseTask : TaskBase, IOutcome<DefaultOutcome>
|
||||
{
|
||||
|
||||
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
|
||||
}
|
||||
@ -1,11 +1,12 @@
|
||||
using e_suite.Workflow.Core.Attributes;
|
||||
using e_suite.Workflow.Core.Enums;
|
||||
using e_suite.Workflow.Core.Interfaces;
|
||||
using eSuite.Core.Miscellaneous;
|
||||
|
||||
namespace e_suite.Workflow.Core.Tasks;
|
||||
|
||||
[GeneralTask]
|
||||
public class FormDataInputTask : TaskBase, IAssignees<TaskAssignee>, IFormTemplate
|
||||
public class FormDataInputTask : TaskBase, IAssignees<TaskAssignee>, IFormTemplate, IOutcome<DefaultOutcome>
|
||||
{
|
||||
public List<TaskAssignee> Assignees { get; set; } = [];
|
||||
public bool IsMultiple { get; set; }
|
||||
@ -16,4 +17,6 @@ public class FormDataInputTask : TaskBase, IAssignees<TaskAssignee>, IFormTempla
|
||||
if (FormIdRef == null)
|
||||
yield return "FormIdRef is required.";
|
||||
}
|
||||
|
||||
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
|
||||
}
|
||||
@ -1,9 +1,11 @@
|
||||
using e_suite.Workflow.Core.Attributes;
|
||||
using e_suite.Workflow.Core.Enums;
|
||||
using e_suite.Workflow.Core.Interfaces;
|
||||
|
||||
namespace e_suite.Workflow.Core.Tasks;
|
||||
|
||||
[GeneralTask]
|
||||
public class LinkActivityTask : TaskBase
|
||||
public class LinkActivityTask : TaskBase, IOutcome<DefaultOutcome>
|
||||
{
|
||||
|
||||
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
|
||||
}
|
||||
@ -1,4 +1,8 @@
|
||||
using e_suite.Workflow.Core.Attributes;
|
||||
using e_suite.Database.Core.Tables.Activity;
|
||||
using e_suite.Workflow.Core.Attributes;
|
||||
using e_suite.Workflow.Core.Enums;
|
||||
using e_suite.Workflow.Core.Interfaces;
|
||||
using eSuite.Core.Enums;
|
||||
|
||||
namespace e_suite.Workflow.Core.Tasks;
|
||||
|
||||
@ -6,12 +10,14 @@ namespace e_suite.Workflow.Core.Tasks;
|
||||
/// A Milestone task does not have any specific processing, so is ready to complete as soon at it starts.
|
||||
/// </summary>
|
||||
[GeneralTask]
|
||||
public class MilestoneTask : TaskBase
|
||||
public class MilestoneTask : TaskBase, IOutcome<DefaultOutcome>
|
||||
{
|
||||
//Todo can only be on a run-time instance
|
||||
//public override async Task OnActivateAsync()
|
||||
//{
|
||||
// await base.OnActivateAsync();
|
||||
// TaskState = TaskState.ReadyToComplete;
|
||||
//}
|
||||
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
|
||||
|
||||
public override async Task OnStartedAsync(ActivityTask activityTask)
|
||||
{
|
||||
await base.OnStartedAsync(activityTask);
|
||||
activityTask.ActivityState = ActivityState.ReadyToComplete;
|
||||
//TODO need to set the outcome of completed here
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,12 +1,14 @@
|
||||
using e_suite.Workflow.Core.Attributes;
|
||||
using e_suite.Workflow.Core.Enums;
|
||||
using e_suite.Workflow.Core.Interfaces;
|
||||
|
||||
namespace e_suite.Workflow.Core.Tasks;
|
||||
|
||||
[GeneralTask]
|
||||
public class StageTask : TaskBase, IStage<GeneralTaskAttribute>, IBypassable
|
||||
public class StageTask : TaskBase, IStage<GeneralTaskAttribute>, IBypassable, IOutcome<DefaultOutcome>
|
||||
{
|
||||
public ICollection<ITask> Tasks { get; } = new List<ITask>();
|
||||
|
||||
public bool Bypassable { get; set; }
|
||||
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
|
||||
}
|
||||
@ -1,9 +1,11 @@
|
||||
using e_suite.Workflow.Core.Attributes;
|
||||
using e_suite.Workflow.Core.Enums;
|
||||
using e_suite.Workflow.Core.Interfaces;
|
||||
|
||||
namespace e_suite.Workflow.Core.Tasks;
|
||||
|
||||
[GeneralTask]
|
||||
public class VisualBriefReviewTask : TaskBase
|
||||
public class VisualBriefReviewTask : TaskBase, IOutcome<DefaultOutcome>
|
||||
{
|
||||
|
||||
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
|
||||
}
|
||||
@ -1,9 +1,11 @@
|
||||
using e_suite.Workflow.Core.Attributes;
|
||||
using e_suite.Workflow.Core.Enums;
|
||||
using e_suite.Workflow.Core.Interfaces;
|
||||
|
||||
namespace e_suite.Workflow.Core.Tasks;
|
||||
|
||||
[GeneralTask]
|
||||
public class VisualBriefUploadTask : TaskBase
|
||||
public class VisualBriefUploadTask : TaskBase, IOutcome<DefaultOutcome>
|
||||
{
|
||||
|
||||
public Dictionary<DefaultOutcome, Guid> OutcomeActions { get; set; } = [];
|
||||
}
|
||||
@ -14,6 +14,6 @@
|
||||
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
|
||||
</ItemGroup>
|
||||
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.entityframeworkcore\10.0.3\buildTransitive\net10.0\Microsoft.EntityFrameworkCore.props" Condition="Exists('$(NuGetPackageRoot)microsoft.entityframeworkcore\10.0.3\buildTransitive\net10.0\Microsoft.EntityFrameworkCore.props')" />
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.entityframeworkcore\10.0.4\buildTransitive\net10.0\Microsoft.EntityFrameworkCore.props" Condition="Exists('$(NuGetPackageRoot)microsoft.entityframeworkcore\10.0.4\buildTransitive\net10.0\Microsoft.EntityFrameworkCore.props')" />
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
@ -1,8 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.extensions.options\10.0.3\buildTransitive\net8.0\Microsoft.Extensions.Options.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.options\10.0.3\buildTransitive\net8.0\Microsoft.Extensions.Options.targets')" />
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\10.0.3\buildTransitive\net8.0\Microsoft.Extensions.Logging.Abstractions.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\10.0.3\buildTransitive\net8.0\Microsoft.Extensions.Logging.Abstractions.targets')" />
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.extensions.configuration.binder\10.0.3\buildTransitive\netstandard2.0\Microsoft.Extensions.Configuration.Binder.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.configuration.binder\10.0.3\buildTransitive\netstandard2.0\Microsoft.Extensions.Configuration.Binder.targets')" />
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.extensions.options\10.0.4\buildTransitive\net8.0\Microsoft.Extensions.Options.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.options\10.0.4\buildTransitive\net8.0\Microsoft.Extensions.Options.targets')" />
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\10.0.4\buildTransitive\net8.0\Microsoft.Extensions.Logging.Abstractions.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.logging.abstractions\10.0.4\buildTransitive\net8.0\Microsoft.Extensions.Logging.Abstractions.targets')" />
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.extensions.configuration.binder\10.0.4\buildTransitive\netstandard2.0\Microsoft.Extensions.Configuration.Binder.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.configuration.binder\10.0.4\buildTransitive\netstandard2.0\Microsoft.Extensions.Configuration.Binder.targets')" />
|
||||
</ImportGroup>
|
||||
</Project>
|
||||
Loading…
Reference in New Issue
Block a user