diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index e3caee3..7c942c9 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -65,7 +65,9 @@ jobs: dotnet pack ./Email/Core/Odin.Email.csproj --configuration $CONFIGURATION --output $PACKAGE_DIR dotnet pack ./Logging/Core/Odin.Logging.csproj --configuration $CONFIGURATION --output $PACKAGE_DIR dotnet pack ./Messaging/RabbitMq/Odin.Messaging.RabbitMq.csproj --configuration $CONFIGURATION --output $PACKAGE_DIR - dotnet pack ./Patterns/CommandHandler/Odin.Patterns.CommandHandler.csproj --configuration $CONFIGURATION --output $PACKAGE_DIR + dotnet pack ./Patterns/Commands/Odin.Patterns.Commands.csproj --configuration $CONFIGURATION --output $PACKAGE_DIR + dotnet pack ./Patterns/Queries/Odin.Patterns.Queries.csproj --configuration $CONFIGURATION --output $PACKAGE_DIR + dotnet pack ./Patterns/Notifications/Odin.Patterns.Notifications.csproj --configuration $CONFIGURATION --output $PACKAGE_DIR dotnet pack ./RemoteFiles/Abstractions/Odin.RemoteFiles.Abstractions.csproj --configuration $CONFIGURATION --output $PACKAGE_DIR dotnet pack ./RemoteFiles/SFTP/Odin.RemoteFiles.SFTP.csproj --configuration $CONFIGURATION --output $PACKAGE_DIR dotnet pack ./RemoteFiles/Core/Odin.RemoteFiles.csproj --configuration $CONFIGURATION --output $PACKAGE_DIR diff --git a/Odin.sln b/Odin.sln index b35309d..8631206 100644 --- a/Odin.sln +++ b/Odin.sln @@ -100,7 +100,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests.Odin.System", "System EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Odin.DesignContracts.Analyzers", "DesignContracts\Analyzers\Odin.DesignContracts.Analyzers.csproj", "{12C40512-CA83-4209-9318-6CBCABF8C798}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Odin.Patterns.CommandHandler", "Patterns\CommandHandler\Odin.Patterns.CommandHandler.csproj", "{382C1CC0-F981-4682-9EFD-4471955327C3}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Odin.Patterns.Commands", "Patterns\Commands\Odin.Patterns.Commands.csproj", "{382C1CC0-F981-4682-9EFD-4471955327C3}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Patterns", "Patterns", "{605A7674-8EA4-458D-9FEB-A86C927AC0F0}" EndProject @@ -110,6 +110,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Odin.Domain", "Domain\Core\ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Odin.Domain.EntityFramework", "Domain\EntityFramework\Odin.Domain.EntityFramework.csproj", "{F0C4BEDA-4B20-4EC8-8265-EFF66D2B1B15}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Odin.Patterns.Notifications", "Patterns\Notifications\Odin.Patterns.Notifications.csproj", "{36D412FB-8A69-47A4-BABF-7B851603C9A1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Odin.Patterns.Queries", "Patterns\Queries\Odin.Patterns.Queries.csproj", "{FA79B472-DEDA-4BEE-B151-2B553A6528C2}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -248,6 +252,14 @@ Global {F0C4BEDA-4B20-4EC8-8265-EFF66D2B1B15}.Debug|Any CPU.Build.0 = Debug|Any CPU {F0C4BEDA-4B20-4EC8-8265-EFF66D2B1B15}.Release|Any CPU.ActiveCfg = Release|Any CPU {F0C4BEDA-4B20-4EC8-8265-EFF66D2B1B15}.Release|Any CPU.Build.0 = Release|Any CPU + {36D412FB-8A69-47A4-BABF-7B851603C9A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {36D412FB-8A69-47A4-BABF-7B851603C9A1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {36D412FB-8A69-47A4-BABF-7B851603C9A1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {36D412FB-8A69-47A4-BABF-7B851603C9A1}.Release|Any CPU.Build.0 = Release|Any CPU + {FA79B472-DEDA-4BEE-B151-2B553A6528C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FA79B472-DEDA-4BEE-B151-2B553A6528C2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FA79B472-DEDA-4BEE-B151-2B553A6528C2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FA79B472-DEDA-4BEE-B151-2B553A6528C2}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {CE323D9C-635B-EFD3-5B3F-7CE371D8A86A} = {BF440C74-E223-3CBF-8FA7-83F7D164F7C3} @@ -283,5 +295,7 @@ Global {382C1CC0-F981-4682-9EFD-4471955327C3} = {605A7674-8EA4-458D-9FEB-A86C927AC0F0} {9EF181C9-41C7-4C02-97AB-AD0D1DDFA323} = {5B5DADD3-07F8-40E9-949A-82BEB18093CC} {F0C4BEDA-4B20-4EC8-8265-EFF66D2B1B15} = {5B5DADD3-07F8-40E9-949A-82BEB18093CC} + {36D412FB-8A69-47A4-BABF-7B851603C9A1} = {605A7674-8EA4-458D-9FEB-A86C927AC0F0} + {FA79B472-DEDA-4BEE-B151-2B553A6528C2} = {605A7674-8EA4-458D-9FEB-A86C927AC0F0} EndGlobalSection EndGlobal diff --git a/Patterns/CommandHandler/FakeCommandHandler.cs b/Patterns/Commands/FakeCommandHandler.cs similarity index 97% rename from Patterns/CommandHandler/FakeCommandHandler.cs rename to Patterns/Commands/FakeCommandHandler.cs index 2541818..910bfc8 100644 --- a/Patterns/CommandHandler/FakeCommandHandler.cs +++ b/Patterns/Commands/FakeCommandHandler.cs @@ -1,4 +1,4 @@ -namespace Odin.Patterns.CommandHandler; +namespace Odin.Patterns.Commands; /// /// Generic treatment of ICommandHandler for use in testing and other scenarios. diff --git a/Patterns/Commands/ICommand.cs b/Patterns/Commands/ICommand.cs new file mode 100644 index 0000000..ce2a4ba --- /dev/null +++ b/Patterns/Commands/ICommand.cs @@ -0,0 +1,16 @@ +namespace Odin.Patterns.Commands; + +/// +/// Defines a command request that returns an operation result +/// (e.g., a new ID, a Result class, etc.) +/// or could be a query that returns query results data. +/// +/// +public interface ICommand { } + +/// +/// Defines a command request that doesn't return a value +/// +public interface ICommand +{ +} \ No newline at end of file diff --git a/Patterns/CommandHandler/Interfaces.cs b/Patterns/Commands/ICommandHandler.cs similarity index 56% rename from Patterns/CommandHandler/Interfaces.cs rename to Patterns/Commands/ICommandHandler.cs index 0a04edf..6f31633 100644 --- a/Patterns/CommandHandler/Interfaces.cs +++ b/Patterns/Commands/ICommandHandler.cs @@ -1,17 +1,4 @@ -namespace Odin.Patterns.CommandHandler; - -/// -/// Defines a command request that doesn't return a value -/// -public interface ICommand { } - -/// -/// Defines a command request that returns an operation result -/// (e.g., a new ID, a Result class, etc.) -/// or could be a query that returns query results data. -/// -/// -public interface ICommand { } +namespace Odin.Patterns.Commands; /// /// Defines the handling implementation for a command request that does not return a Result. @@ -33,9 +20,9 @@ public interface ICommandHandler /// Defines the handling implementation for a command request that returns a Result. /// /// -/// -public interface ICommandHandler - where TCommand : ICommand +/// +public interface ICommandHandler + where TCommand : ICommand { /// /// Handles the command request and returns a result. @@ -43,5 +30,5 @@ public interface ICommandHandler /// /// /// - Task HandleAsync(TCommand command, CancellationToken ct = default); + Task HandleAsync(TCommand command, CancellationToken ct = default); } \ No newline at end of file diff --git a/Patterns/CommandHandler/Odin.Patterns.CommandHandler.csproj b/Patterns/Commands/Odin.Patterns.Commands.csproj similarity index 100% rename from Patterns/CommandHandler/Odin.Patterns.CommandHandler.csproj rename to Patterns/Commands/Odin.Patterns.Commands.csproj diff --git a/Patterns/Notifications/INotification.cs b/Patterns/Notifications/INotification.cs new file mode 100644 index 0000000..4a8d7fd --- /dev/null +++ b/Patterns/Notifications/INotification.cs @@ -0,0 +1,8 @@ +namespace Odin.Patterns.Notifications; + +/// +/// Defines a notification request. +/// +public interface INotification +{ +} \ No newline at end of file diff --git a/Patterns/Notifications/INotificationHandler.cs b/Patterns/Notifications/INotificationHandler.cs new file mode 100644 index 0000000..00e1862 --- /dev/null +++ b/Patterns/Notifications/INotificationHandler.cs @@ -0,0 +1,17 @@ +namespace Odin.Patterns.Notifications; + +/// +/// Defines the publishing implementation for a notification request. +/// +/// +public interface INotificationHandler + where TNotification : INotification +{ + /// + /// Handles the command request + /// + /// + /// + /// + Task HandleAsync(TNotification command, CancellationToken ct = default); +} diff --git a/Patterns/Notifications/Odin.Patterns.Notifications.csproj b/Patterns/Notifications/Odin.Patterns.Notifications.csproj new file mode 100644 index 0000000..746cd50 --- /dev/null +++ b/Patterns/Notifications/Odin.Patterns.Notifications.csproj @@ -0,0 +1,18 @@ + + + net8.0;net9.0;net10.0 + true + enable + icon.png + README.md + + + + 1591;1573; + + + + + + + diff --git a/Patterns/Queries/IQuery.cs b/Patterns/Queries/IQuery.cs new file mode 100644 index 0000000..956eea9 --- /dev/null +++ b/Patterns/Queries/IQuery.cs @@ -0,0 +1,9 @@ +namespace Odin.Patterns.Queries; + +/// +/// Defines a query request that returns +/// one or other for of data or a result. +/// +/// +public interface IQuery { } + diff --git a/Patterns/Queries/IQueryHandler.cs b/Patterns/Queries/IQueryHandler.cs new file mode 100644 index 0000000..b82db74 --- /dev/null +++ b/Patterns/Queries/IQueryHandler.cs @@ -0,0 +1,18 @@ +namespace Odin.Patterns.Queries; + +/// +/// Defines the handling implementation for a command request that returns a Result. +/// +/// +/// +public interface IQueryHandler + where TQuery : IQuery +{ + /// + /// Handles the query request and returns a result. + /// + /// + /// + /// + Task HandleAsync(TQuery query, CancellationToken ct = default); +} \ No newline at end of file diff --git a/Patterns/Queries/Odin.Patterns.Queries.csproj b/Patterns/Queries/Odin.Patterns.Queries.csproj new file mode 100644 index 0000000..746cd50 --- /dev/null +++ b/Patterns/Queries/Odin.Patterns.Queries.csproj @@ -0,0 +1,18 @@ + + + net8.0;net9.0;net10.0 + true + enable + icon.png + README.md + + + + 1591;1573; + + + + + + +