From cad90e4e4edfedfead0c435e898d47750550ef6b Mon Sep 17 00:00:00 2001 From: Sipke Schoorstra Date: Wed, 13 Mar 2024 12:07:39 +0100 Subject: [PATCH] Remove FetchProducts activity and model The FetchProducts.cs and Product.cs files have been removed as they are no longer needed. Additionally, changes in the OrderBatchProcessor.cs and FetchOrders.cs reflect updates to order fetching logic to accommodate these removals. --- .../Activities/FetchOrders.cs | 24 +++++--- .../Activities/FetchProducts.cs | 59 ------------------- .../Models/Product.cs | 8 --- .../Program.cs | 6 ++ .../Workflows/OrderBatchProcessor.cs | 11 +++- 5 files changed, 32 insertions(+), 76 deletions(-) delete mode 100644 samples/aspnet/Elsa.Samples.AspNet.BatchProcessing/Activities/FetchProducts.cs delete mode 100644 samples/aspnet/Elsa.Samples.AspNet.BatchProcessing/Models/Product.cs diff --git a/samples/aspnet/Elsa.Samples.AspNet.BatchProcessing/Activities/FetchOrders.cs b/samples/aspnet/Elsa.Samples.AspNet.BatchProcessing/Activities/FetchOrders.cs index 9736e1b93..68d870a41 100644 --- a/samples/aspnet/Elsa.Samples.AspNet.BatchProcessing/Activities/FetchOrders.cs +++ b/samples/aspnet/Elsa.Samples.AspNet.BatchProcessing/Activities/FetchOrders.cs @@ -7,6 +7,9 @@ using Elsa.Workflows.Models; namespace Elsa.Samples.AspNet.BatchProcessing.Activities; +/// +/// Fetches orders from the data source. +/// [Activity("Demo", "Warehousing", "Fetch orders from the data source.")] [Output(IsSerializable = false)] public class FetchOrders : CodeActivity>> @@ -14,24 +17,31 @@ public class FetchOrders : CodeActivity>> /// /// The total number of orders to fetch. /// - [Input(Description = "The total number of orders to fetch.")] - public Input Count { get; set; } = new(100); - + [Input( + Description = "The total number of orders to fetch.", + DefaultValue = 1000 + )] + public Input Count { get; set; } = new(1000); + /// /// The number of orders to fetch per batch. /// - [Input(Description = "The number of orders to fetch per batch.")] + [Input( + Description = "The number of orders to fetch per batch.", + DefaultValue = 100 + )] public Input BatchSize { get; set; } = new(100); - + + /// protected override void Execute(ActivityExecutionContext context) { var count = Count.Get(context); var batchSize = BatchSize.Get(context); var orders = GenerateOrders(count).Chunk(batchSize).ToAsyncEnumerable(); - + Result.Set(context, orders); } - + private IEnumerable GenerateOrders(int count) { var orderFaker = new Faker() diff --git a/samples/aspnet/Elsa.Samples.AspNet.BatchProcessing/Activities/FetchProducts.cs b/samples/aspnet/Elsa.Samples.AspNet.BatchProcessing/Activities/FetchProducts.cs deleted file mode 100644 index ead9d45a1..000000000 --- a/samples/aspnet/Elsa.Samples.AspNet.BatchProcessing/Activities/FetchProducts.cs +++ /dev/null @@ -1,59 +0,0 @@ -using Bogus; -using Elsa.Extensions; -using Elsa.Samples.AspNet.BatchProcessing.Models; -using Elsa.Workflows; -using Elsa.Workflows.Attributes; -using Elsa.Workflows.Models; -using Elsa.Workflows.Options; -using Elsa.Workflows.Signals; - -namespace Elsa.Samples.AspNet.BatchProcessing.Activities; - -[Activity("Demo", "Warehousing", "Fetch products from the data source.")] -[Output(IsSerializable = false)] -public class FetchProducts : CodeActivity> -{ - private const string CurrentBathKey = nameof(CurrentBathKey); - - /// - /// The total number of products to fetch. - /// - [Input(Description = "The total number of products to fetch.")] - public Input Count { get; set; } = new(100); - - /// - /// The number of products to fetch per batch. - /// - [Input(Description = "The number of products to fetch per batch.")] - public Input BatchSize { get; set; } = new(100); - - protected override async ValueTask ExecuteAsync(ActivityExecutionContext context) - { - var count = Count.Get(context); - var batchSize = BatchSize.Get(context); - var currentBatch = context.ActivityInput.TryGetValue(CurrentBathKey, out var currentBatchValue) ? (int)currentBatchValue : 0; - var orders = GenerateProducts(count).Skip(currentBatch * batchSize).Take(batchSize).ToList(); - - Result.Set(context, orders); - await context.CompleteActivityAsync(); - - if (orders.Any()) - { - currentBatch++; - context.SetProperty(CurrentBathKey, currentBatch); - - // Schedule the next batch. - await context.SendSignalAsync(new ScheduleChildActivity(this, new Dictionary { [CurrentBathKey] = currentBatch })); - } - } - - private IEnumerable GenerateProducts(int count) - { - var productFaker = new Faker() - .RuleFor(o => o.Id, f => Guid.NewGuid().ToString()) - .RuleFor(o => o.Name, f => Guid.NewGuid().ToString()) - .RuleFor(o => o.Price, f => f.Random.Decimal(0.01m, 1000.00m)); - - return productFaker.Generate(count); - } -} \ No newline at end of file diff --git a/samples/aspnet/Elsa.Samples.AspNet.BatchProcessing/Models/Product.cs b/samples/aspnet/Elsa.Samples.AspNet.BatchProcessing/Models/Product.cs deleted file mode 100644 index af72291c9..000000000 --- a/samples/aspnet/Elsa.Samples.AspNet.BatchProcessing/Models/Product.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Elsa.Samples.AspNet.BatchProcessing.Models; - -public class Product -{ - public string Id { get; set; } = default!; - public string Name { get; set; } = default!; - public decimal Price { get; set; } -} \ No newline at end of file diff --git a/samples/aspnet/Elsa.Samples.AspNet.BatchProcessing/Program.cs b/samples/aspnet/Elsa.Samples.AspNet.BatchProcessing/Program.cs index 53681d835..6bf9d1e5e 100644 --- a/samples/aspnet/Elsa.Samples.AspNet.BatchProcessing/Program.cs +++ b/samples/aspnet/Elsa.Samples.AspNet.BatchProcessing/Program.cs @@ -1,6 +1,7 @@ using Elsa.EntityFrameworkCore.Modules.Management; using Elsa.EntityFrameworkCore.Modules.Runtime; using Elsa.Extensions; +using Elsa.Samples.AspNet.BatchProcessing.Models; var builder = WebApplication.CreateBuilder(args); @@ -28,12 +29,17 @@ builder.Services.AddElsa(elsa => elsa.UseDefaultAuthentication(auth => auth.UseAdminApiKey()); elsa.AddActivitiesFrom(); elsa.AddWorkflowsFrom(); + + elsa.AddVariableTypeAndAlias("Order", "Warehousing"); + elsa.AddVariableTypeAndAlias>>("BatchedOrderStream", "Warehousing"); }); +builder.Services.AddHealthChecks(); builder.Services.AddCors(cors => cors.AddDefaultPolicy(policy => policy.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod().WithExposedHeaders("*"))); var app = builder.Build(); app.UseHttpsRedirection(); +app.UseHealthChecks("/"); app.UseCors(); app.UseAuthentication(); app.UseAuthorization(); diff --git a/samples/aspnet/Elsa.Samples.AspNet.BatchProcessing/Workflows/OrderBatchProcessor.cs b/samples/aspnet/Elsa.Samples.AspNet.BatchProcessing/Workflows/OrderBatchProcessor.cs index c8ffdc7b7..42d727eb5 100644 --- a/samples/aspnet/Elsa.Samples.AspNet.BatchProcessing/Workflows/OrderBatchProcessor.cs +++ b/samples/aspnet/Elsa.Samples.AspNet.BatchProcessing/Workflows/OrderBatchProcessor.cs @@ -6,17 +6,24 @@ using Elsa.Workflows.Contracts; namespace Elsa.Samples.AspNet.BatchProcessing.Workflows; +/// +/// A workflow that processes orders in batches. +/// public class OrderBatchProcessor : WorkflowBase { + /// protected override void Build(IWorkflowBuilder builder) { - var orders = builder.WithVariable>(); + var orders = builder.WithVariable>>(); builder.Root = new Sequence { Activities = { new WriteLine("Fetching orders..."), - new FetchOrders(), + new FetchOrders + { + Result = new(orders) + }, new ParallelForEach { Items = new(orders)