Skip to content

Feature/add mediator and command#16

Merged
JerrettDavis merged 2 commits intomainfrom
feature/add-mediator-and-command
Sep 20, 2025
Merged

Feature/add mediator and command#16
JerrettDavis merged 2 commits intomainfrom
feature/add-mediator-and-command

Conversation

@JerrettDavis
Copy link
Copy Markdown
Owner

No description provided.

@JerrettDavis JerrettDavis self-assigned this Sep 20, 2025
@JerrettDavis JerrettDavis added the enhancement New feature or request label Sep 20, 2025
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR adds two major behavioral patterns - Mediator and Command - to PatternKit's core library and examples, along with modernizing collection syntax and dependency updates across the codebase.

Key changes:

  • Added allocation-light Mediator pattern supporting commands, notifications, and streaming with pipeline behaviors
  • Added Command pattern with Do/Undo capabilities and macro composition
  • Updated collection syntax to use collection expressions ([] instead of new())
  • Added JetBrains.Annotations package dependency

Reviewed Changes

Copilot reviewed 40 out of 40 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
src/PatternKit.Core/Behavioral/Mediator/Mediator.cs New mediator implementation with commands, notifications, streaming, and behaviors
src/PatternKit.Core/Behavioral/Command/Command.cs New command pattern with undo support and macro composition
src/PatternKit.Examples/MediatorDemo/ Demo abstractions and DI scanning for MediatR-like functionality
test/PatternKit.Tests/Behavioral/Mediator/MediatorTests.cs Comprehensive tests for mediator functionality
test/PatternKit.Tests/Behavioral/Command/CommandTests.cs Tests for command execution and macro scenarios
Various files Collection syntax modernization and JetBrains.Annotations dependency

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

Comment thread src/PatternKit.Examples/Pricing/Pipeline.cs
Comment on lines +165 to +166
if (!r.ShouldApply(ctx, total))
continue;
Copy link

Copilot AI Sep 20, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[nitpick] The early continue pattern is good, but the removed braces and the logic that follows should be properly aligned. The subsequent code block starting at line 168 should be indented to show it's part of the else condition.

Suggested change
if (!r.ShouldApply(ctx, total))
continue;
if (!r.ShouldApply(ctx, total))
{
continue;
}

Copilot uses AI. Check for mistakes.
Comment thread src/PatternKit.Core/Creational/Singleton/Singleton.cs
@github-actions
Copy link
Copy Markdown
Contributor

Code Coverage

Summary
  Generated on: 09/20/2025 - 03:28:47
  Coverage date: 09/20/2025 - 03:28:37 - 09/20/2025 - 03:28:44
  Parser: MultiReport (6x Cobertura)
  Assemblies: 3
  Classes: 117
  Files: 43
  Line coverage: 88%
  Covered lines: 2150
  Uncovered lines: 293
  Coverable lines: 2443
  Total lines: 7863
  Branch coverage: 77.7% (695 of 894)
  Covered branches: 695
  Total branches: 894
  Method coverage: 88.4% (582 of 658)
  Full method coverage: 82.3% (542 of 658)
  Covered methods: 582
  Fully covered methods: 542
  Total methods: 658

PatternKit.Core                                                                  85.8%
  PatternKit.Behavioral.Chain.ActionChain<T>                                     84.7%
  PatternKit.Behavioral.Chain.ResultChain<T1, T2>                                 100%
  PatternKit.Behavioral.Command.Command<T>                                       48.3%
  PatternKit.Behavioral.Mediator.Mediator                                        87.6%
  PatternKit.Behavioral.Mediator.MediatorHelpers                                   20%
  PatternKit.Behavioral.Mediator.TaskExtensions                                     0%
  PatternKit.Behavioral.Strategy.ActionStrategy<T>                                 97%
  PatternKit.Behavioral.Strategy.AsyncStrategy<T1, T2>                           93.5%
  PatternKit.Behavioral.Strategy.Strategy<T1, T2>                                 100%
  PatternKit.Behavioral.Strategy.TryStrategy<T1, T2>                             95.8%
  PatternKit.Common.Option<T>                                                      60%
  PatternKit.Common.Throw                                                         100%
  PatternKit.Common.TryHandlerExtensions                                         33.3%
  PatternKit.Creational.Builder.BranchBuilder<T1, T2>                             100%
  PatternKit.Creational.Builder.BuilderExtensions                                 100%
  PatternKit.Creational.Builder.ChainBuilder<T>                                   100%
  PatternKit.Creational.Builder.Composer<T1, T2>                                  100%
  PatternKit.Creational.Builder.MutableBuilder<T>                                 100%
  PatternKit.Creational.Factory.Factory<T1, T2>                                    90%
  PatternKit.Creational.Factory.Factory<T1, T2, T3>                                90%
  PatternKit.Creational.Prototype.Prototype<T>                                    100%
  PatternKit.Creational.Prototype.Prototype<T1, T2>                                90%
  PatternKit.Creational.Singleton.Singleton<T>                                   96.5%
  PatternKit.Structural.Adapter.Adapter<T1, T2>                                  82.2%
  PatternKit.Structural.Bridge.Bridge<T1, T2, T3>                                77.5%
  PatternKit.Structural.Composite.Composite<T1, T2>                              97.4%

PatternKit.Examples                                                              89.1%
  PatternKit.Examples.ApiGateway.Demo                                            97.8%
  PatternKit.Examples.ApiGateway.MiniRouter                                      96.6%
  PatternKit.Examples.ApiGateway.Request                                           75%
  PatternKit.Examples.ApiGateway.Response                                         100%
  PatternKit.Examples.ApiGateway.Responses                                        100%
  PatternKit.Examples.Chain.AuthLoggingDemo                                      95.2%
  PatternKit.Examples.Chain.CardProcessors                                        100%
  PatternKit.Examples.Chain.CardTenderStrategy                                      0%
  PatternKit.Examples.Chain.CashTenderStrategy                                      0%
  PatternKit.Examples.Chain.ChainStage                                            100%
  PatternKit.Examples.Chain.CharityRoundUpRule                                     20%
  PatternKit.Examples.Chain.ConfigDriven.Bundle1OffEach                          14.2%
  PatternKit.Examples.Chain.ConfigDriven.CardTender                              72.2%
  PatternKit.Examples.Chain.ConfigDriven.Cash2Pct                                16.6%
  PatternKit.Examples.Chain.ConfigDriven.CashTender                              90.9%
  PatternKit.Examples.Chain.ConfigDriven.CharityRoundUp                           100%
  PatternKit.Examples.Chain.ConfigDriven.ConfigDrivenPipelineBuilderExtensions   94.2%
  PatternKit.Examples.Chain.ConfigDriven.ConfigDrivenPipelineDemo                 100%
  PatternKit.Examples.Chain.ConfigDriven.Loyalty5Pct                               20%
  PatternKit.Examples.Chain.ConfigDriven.NickelCashOnly                          77.7%
  PatternKit.Examples.Chain.ConfigDriven.PipelineOptions                          100%
  PatternKit.Examples.Chain.Customer                                              100%
  PatternKit.Examples.Chain.DeviceBus                                             100%
  PatternKit.Examples.Chain.GenericProcessor                                      100%
  PatternKit.Examples.Chain.HttpRequest                                           100%
  PatternKit.Examples.Chain.IRoundingRule                                         100%
  PatternKit.Examples.Chain.LineItem                                              100%
  PatternKit.Examples.Chain.MediatedTransactionPipelineDemo                       100%
  PatternKit.Examples.Chain.NickelCashOnlyRule                                    100%
  PatternKit.Examples.Chain.NoopCharityTracker                                      0%
  PatternKit.Examples.Chain.RoundingPipeline                                      100%
  PatternKit.Examples.Chain.Tender                                                100%
  PatternKit.Examples.Chain.TenderRouterFactory                                  91.3%
  PatternKit.Examples.Chain.TransactionContext                                    100%
  PatternKit.Examples.Chain.TransactionPipeline                                   100%
  PatternKit.Examples.Chain.TransactionPipelineBuilder                           92.3%
  PatternKit.Examples.Chain.TxResult                                              100%
  PatternKit.Examples.Generators.IntParser                                         60%
  PatternKit.Examples.Generators.OrderRouter                                     95.2%
  PatternKit.Examples.Generators.ScoreLabeler                                     100%
  PatternKit.Examples.MediatorDemo.AppMediator                                    100%
  PatternKit.Examples.MediatorDemo.AuditLogHandler                                100%
  PatternKit.Examples.MediatorDemo.BoxHelper                                       25%
  PatternKit.Examples.MediatorDemo.CountUpCmd                                     100%
  PatternKit.Examples.MediatorDemo.CountUpHandler                                 100%
  PatternKit.Examples.MediatorDemo.EchoCmd                                        100%
  PatternKit.Examples.MediatorDemo.EchoHandler                                    100%
  PatternKit.Examples.MediatorDemo.LoggingBehavior<T1, T2>                        100%
  PatternKit.Examples.MediatorDemo.MediatorDemoSink                               100%
  PatternKit.Examples.MediatorDemo.MediatorRegistry                               100%
  PatternKit.Examples.MediatorDemo.PingCmd                                        100%
  PatternKit.Examples.MediatorDemo.PingHandler                                    100%
  PatternKit.Examples.MediatorDemo.ServiceCollectionExtensions                   97.4%
  PatternKit.Examples.MediatorDemo.SumCmd                                         100%
  PatternKit.Examples.MediatorDemo.SumCmdBehavior                                 100%
  PatternKit.Examples.MediatorDemo.SumHandler                                     100%
  PatternKit.Examples.MediatorDemo.UserCreated                                    100%
  PatternKit.Examples.MediatorDemo.WelcomeEmailHandler                            100%
  PatternKit.Examples.Pricing.ApiPricingSource                                    100%
  PatternKit.Examples.Pricing.CharityRoundUpRule                                  100%
  PatternKit.Examples.Pricing.Coupon                                              100%
  PatternKit.Examples.Pricing.DbPricingSource                                     100%
  PatternKit.Examples.Pricing.DefaultSourceRouting                               83.3%
  PatternKit.Examples.Pricing.FilePricingSource                                   100%
  PatternKit.Examples.Pricing.LineItem                                            100%
  PatternKit.Examples.Pricing.Location                                            100%
  PatternKit.Examples.Pricing.LoyaltyMembership                                   100%
  PatternKit.Examples.Pricing.NickelCashOnlyRule                                  100%
  PatternKit.Examples.Pricing.PercentLoyaltyRule                                  100%
  PatternKit.Examples.Pricing.PricingContext                                      100%
  PatternKit.Examples.Pricing.PricingDemo                                        56.7%
  PatternKit.Examples.Pricing.PricingPipeline                                     100%
  PatternKit.Examples.Pricing.PricingPipelineBuilder                              100%
  PatternKit.Examples.Pricing.PricingResult                                       100%
  PatternKit.Examples.Pricing.RegionCategoryTaxPolicy                             100%
  PatternKit.Examples.Pricing.Sku                                                85.7%
  PatternKit.Examples.Pricing.SourceRouter                                       92.3%
  PatternKit.Examples.Singleton.DeviceRegistry                                    100%
  PatternKit.Examples.Singleton.PosAppState                                       100%
  PatternKit.Examples.Singleton.PosAppStateDemo                                   100%
  PatternKit.Examples.Singleton.PricingCache                                      100%
  PatternKit.Examples.Singleton.StoreConfig                                       100%
  PatternKit.Examples.Strategies.Coercion.Coercer<T>                             83.3%
  PatternKit.Examples.Strategies.Coercion.CoercerExtensions                       100%
  PatternKit.Examples.Strategies.Composed.ChannelPolicy                           100%
  PatternKit.Examples.Strategies.Composed.ChannelPolicyFactory                    100%
  PatternKit.Examples.Strategies.Composed.ComposedStrategies                     94.2%
  PatternKit.Examples.Strategies.Composed.SendContext                             100%
  PatternKit.Examples.Strategies.Composed.SendResult                              100%

PatternKit.Generators                                                            88.2%
  PatternKit.Generators.GenerateStrategyAttribute                                   0%
  PatternKit.Generators.StrategyGenerator                                        93.9%

@codecov-commenter
Copy link
Copy Markdown

codecov-commenter commented Sep 20, 2025

Codecov Report

❌ Patch coverage is 87.47300% with 58 lines in your changes missing coverage. Please review.
✅ Project coverage is 89.58%. Comparing base (0e1623f) to head (33f9afd).
⚠️ Report is 91 commits behind head on main.

Files with missing lines Patch % Lines
src/PatternKit.Core/Behavioral/Command/Command.cs 56.66% 26 Missing ⚠️
...rc/PatternKit.Core/Behavioral/Mediator/Mediator.cs 86.76% 18 Missing ⚠️
src/PatternKit.Examples/Pricing/Demo.cs 12.50% 7 Missing ⚠️
...c/PatternKit.Examples/MediatorDemo/Abstractions.cs 96.49% 6 Missing ⚠️
.../PatternKit.Core/Creational/Singleton/Singleton.cs 92.30% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main      #16      +/-   ##
==========================================
+ Coverage   84.93%   89.58%   +4.64%     
==========================================
  Files          33       37       +4     
  Lines        1932     2333     +401     
  Branches      277      356      +79     
==========================================
+ Hits         1641     2090     +449     
- Misses        216      243      +27     
+ Partials       75        0      -75     
Flag Coverage Δ
unittests 89.58% <87.47%> (+4.64%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@JerrettDavis JerrettDavis merged commit a9c68b3 into main Sep 20, 2025
4 checks passed
@JerrettDavis JerrettDavis deleted the feature/add-mediator-and-command branch September 20, 2025 03:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants