feat: add transaction script pattern support#258
Conversation
Dependency Review✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.Scanned FilesNone |
Test Results 1 files 1 suites 2m 50s ⏱️ Results for commit 81d1045. ♻️ This comment has been updated with latest results. |
🔍 PR Validation ResultsVersion: `` ✅ Validation Steps
📊 ArtifactsDry-run artifacts have been uploaded and will be available for 7 days. This comment was automatically generated by the PR validation workflow. |
There was a problem hiding this comment.
Pull request overview
Adds a first-class Transaction Script pattern slice to PatternKit, including a fluent runtime API, Roslyn source generator + attributes/diagnostics, a production-shaped order submission demo (with DI integration), and accompanying tests + documentation/catalog updates.
Changes:
- Introduces
TransactionScript<TRequest,TResponse>runtime API and result model (TransactionScriptResult<TResponse>+ status/errors). - Adds
TransactionScriptGeneratorand new generator abstractions attributes ([GenerateTransactionScript],[TransactionScriptHandler],[TransactionScriptValidator]) plus diagnostics tracking. - Adds an order submission demo + registers it into the examples DI/catalog + adds docs/TOCs and test coverage.
Reviewed changes
Copilot reviewed 22 out of 22 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| test/PatternKit.Tests/Application/TransactionScript/TransactionScriptTests.cs | Adds runtime tests covering validation, rejection, handled failures, and argument validation. |
| test/PatternKit.Generators.Tests/TransactionScriptGeneratorTests.cs | Adds generator tests for factory emission and diagnostics. |
| test/PatternKit.Generators.Tests/AbstractionsAttributeCoverageTests.cs | Extends attribute coverage to include Transaction Script generator attributes/defaults. |
| test/PatternKit.Examples.Tests/TransactionScriptDemo/OrderTransactionScriptDemoTests.cs | Adds demo tests for fluent vs generated execution and DI registration. |
| test/PatternKit.Examples.Tests/ProductionReadiness/PatternKitPatternCatalogTests.cs | Updates pattern list/count assertions to include Transaction Script. |
| test/PatternKit.Examples.Tests/DependencyInjection/PatternKitExampleDependencyInjectionTests.cs | Ensures the new Transaction Script example is DI-registered and runnable. |
| src/PatternKit.Generators/TransactionScript/TransactionScriptGenerator.cs | Implements the incremental generator and diagnostics for Transaction Script factories. |
| src/PatternKit.Generators/AnalyzerReleases.Unshipped.md | Registers new diagnostic IDs PKTS001–PKTS004 for release tracking. |
| src/PatternKit.Generators.Abstractions/TransactionScript/TransactionScriptAttributes.cs | Adds generator-facing attributes for Transaction Script factory generation. |
| src/PatternKit.Examples/TransactionScriptDemo/OrderTransactionScriptDemo.cs | Adds the order submission demo (fluent + generated) and IServiceCollection integration. |
| src/PatternKit.Examples/ProductionReadiness/PatternKitPatternCatalog.cs | Adds Transaction Script to the pattern catalog with links to docs/tests/generator/example. |
| src/PatternKit.Examples/ProductionReadiness/PatternKitExampleCatalog.cs | Adds an “Order Transaction Script Pattern” example descriptor. |
| src/PatternKit.Examples/DependencyInjection/PatternKitExampleServiceCollectionExtensions.cs | Wires the new example into the shared examples DI registration. |
| src/PatternKit.Core/Application/TransactionScript/TransactionScript.cs | Introduces the Transaction Script runtime API, results, status, and error model. |
| docs/patterns/toc.yml | Adds Transaction Script to the patterns TOC. |
| docs/patterns/application/transaction-script.md | Adds pattern documentation and a fluent usage snippet. |
| docs/guides/pattern-coverage.md | Updates the coverage guide to include Transaction Script. |
| docs/generators/transaction-script.md | Adds generator documentation, usage example, and diagnostics list. |
| docs/generators/toc.yml | Adds Transaction Script to the generators TOC. |
| docs/generators/index.md | Adds Transaction Script to the generators index table. |
| docs/examples/toc.yml | Adds the new order transaction script example doc to examples TOC. |
| docs/examples/order-transaction-script-pattern.md | Adds example documentation for the order transaction script demo. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| public static async ValueTask<OrderTransactionScriptSummary> RunGeneratedAsync() | ||
| { | ||
| GeneratedSubmitOrderScript.Repository = InMemoryRepository<SubmittedOrder, string>.Create(static order => order.OrderId).Build(); | ||
| var result = await GeneratedSubmitOrderScript.CreateScript().ExecuteAsync(new SubmitOrderRequest("order-200", "customer-20", 75m)); | ||
| return new(result.Succeeded, result.Response?.OrderId ?? "", (await GeneratedSubmitOrderScript.Repository.ListAsync()).Count); | ||
| } |
|
|
||
| public OrderTransactionScriptWorkflow(ITransactionScript<SubmitOrderRequest, SubmitOrderReceipt> script) | ||
| { | ||
| _script = script; | ||
| } | ||
|
|
||
| public async ValueTask<OrderTransactionScriptSummary> SubmitAsync(SubmitOrderRequest request, CancellationToken cancellationToken = default) | ||
| { | ||
| var result = await _script.ExecuteAsync(request, cancellationToken).ConfigureAwait(false); | ||
| return new(result.Succeeded, result.Response?.OrderId ?? "", result.Succeeded ? 1 : 0); |
53173d0 to
81d1045
Compare
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #258 +/- ##
==========================================
+ Coverage 90.78% 96.14% +5.36%
==========================================
Files 328 332 +4
Lines 30049 30328 +279
Branches 4197 4245 +48
==========================================
+ Hits 27279 29158 +1879
+ Misses 1237 1170 -67
+ Partials 1533 0 -1533
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Code Coverage |
Closes #253.
Adds a first-class Transaction Script pattern slice:
Local validation:
Note: local PatternKit.Examples build still hits the known CS9057 analyzer/compiler mismatch on this machine; hosted CI validates the examples project.