readme and publish workflow
This commit is contained in:
38
.gitea/workflows/publish-nuget.yaml
Normal file
38
.gitea/workflows/publish-nuget.yaml
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
name: .NET Publish
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- 'v[0-9]+.[0-9]+.[0-9]+'
|
||||||
|
- 'v[0-9]+.[0-9]+.[0-9]+-rc[0-9]+'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
publish:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Setup .NET
|
||||||
|
uses: https://github.com/actions/setup-dotnet@v4
|
||||||
|
with:
|
||||||
|
dotnet-version: 9.x
|
||||||
|
|
||||||
|
- name: Restore dependencies
|
||||||
|
run: dotnet restore --nologo
|
||||||
|
|
||||||
|
- name: Test
|
||||||
|
run: dotnet test --nologo --no-restore --configuration Release
|
||||||
|
|
||||||
|
- name: Create the package
|
||||||
|
env:
|
||||||
|
RELEASE_VERSION: ${{ gitea.ref_name }}
|
||||||
|
run: >
|
||||||
|
dotnet pack --no-restore --configuration Release --output nupkgs
|
||||||
|
`echo $RELEASE_VERSION | sed -E 's|^(v([0-9]+(\.[0-9]+){2}))(-([a-z0-9]+)){1}|/p:ReleaseVersion=\2 /p:VersionSuffix=\5|; s|^(v([0-9]+(\.[0-9]+){2}))$|/p:ReleaseVersion=\2|'`
|
||||||
|
|
||||||
|
- name: Publish the package to Gitea
|
||||||
|
run: dotnet nuget push --source ${{ vars.OUTPUT_NUGET_REGISTRY }} --api-key ${{ secrets.LOCAL_NUGET_PACKAGE_TOKEN }} nupkgs/*.nupkg
|
||||||
|
|
||||||
|
- name: Publish the package to NuGet.org
|
||||||
|
run: dotnet nuget push --source https://api.nuget.org/v3/index.json --api-key ${{ secrets.NUGET_PACKAGE_TOKEN }} nupkgs/*.nupkg
|
||||||
76
readme.md
76
readme.md
@@ -7,24 +7,90 @@ Inspired by [MediatR](https://github.com/jbogard/MediatR)
|
|||||||
## Features
|
## Features
|
||||||
|
|
||||||
* Separate dispatching of Commands/Queries
|
* Separate dispatching of Commands/Queries
|
||||||
* Middleware-like behaviours
|
* Middleware-like Behaviors
|
||||||
|
|
||||||
|
## Compatibility
|
||||||
|
|
||||||
|
**Just.Cqrs** is built for .Net Standard 2.1 and .NET 8.0 and 9.0.
|
||||||
|
|
||||||
## Getting Started
|
## Getting Started
|
||||||
|
|
||||||
### Install from NuGet.org
|
### Install from NuGet.org
|
||||||
|
|
||||||
```
|
```bash
|
||||||
# install the package using NuGet
|
# install the package using NuGet
|
||||||
dotnet add package Just.Cqrs
|
dotnet add package Just.Cqrs
|
||||||
```
|
```
|
||||||
|
|
||||||
### Register in DI with ```IServiceCollection```
|
### Register in DI with ```IServiceCollection```
|
||||||
|
|
||||||
```cs
|
```csharp
|
||||||
services.AddCqrs(opt => opt
|
services.AddCqrs(opt => opt
|
||||||
.AddQueryHandler<SomeQueryHandler>()
|
.AddQueryHandler<SomeQueryHandler>()
|
||||||
.AddCommandHandler<SomeCommandHandler>()
|
.AddCommandHandler<SomeCommandHandler>()
|
||||||
.AddBehaviour<SomeBehaviour>()
|
.AddBehavior<SomeQueryBehavior>()
|
||||||
.AddOpenBehaviour(typeof(SomeOpenBehaviour<,>))
|
.AddOpenBehavior(typeof(LoggingBehavior<,>))
|
||||||
);
|
);
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Example Usage
|
||||||
|
|
||||||
|
### Define a Query and Handler
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
record GetUserByIdQuery(int UserId) : IKnownQuery<User>;
|
||||||
|
|
||||||
|
class GetUserByIdQueryHandler : IQueryHandler<GetUserByIdQuery, User>
|
||||||
|
{
|
||||||
|
public ValueTask<User> Handle(GetUserByIdQuery query, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
// Fetch user logic here
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use Dispatcher to execute the query
|
||||||
|
class GetUserByIdUseCase(IQueryDispatcher dispatcher)
|
||||||
|
{
|
||||||
|
public async Task<IResult> Execute(int userId, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
var user = await dispatcher.Dispatch(new GetUserByIdQuery(userId), cancellationToken);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
\* *the same principles apply to commands*
|
||||||
|
|
||||||
|
### Define a Behavior
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
class LoggingBehavior<TRequest, TResult>(ILogger logger) : IDispatchBehavior<TRequest, TResult>
|
||||||
|
where TRequest: notnull
|
||||||
|
{
|
||||||
|
public async ValueTask<TResult> Handle(
|
||||||
|
TRequest request,
|
||||||
|
DispatchFurtherDelegate<TResult> next,
|
||||||
|
CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
logger.LogInformation("Handling request: {RequestType}", typeof(TRequest).Name);
|
||||||
|
var result = await next();
|
||||||
|
logger.LogInformation("Request handled: {RequestType}", typeof(TRequest).Name);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class SomeQueryBehavior : IDispatchBehavior<SomeQuery, SomeQueryResult>
|
||||||
|
{
|
||||||
|
public async ValueTask<SomeQueryResult> Handle(
|
||||||
|
SomeQuery request,
|
||||||
|
DispatchFurtherDelegate<SomeQueryResult> next,
|
||||||
|
CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
// do something
|
||||||
|
return await next();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
**Just.Cqrs** is licensed under the [MIT License](LICENSE).
|
||||||
|
|||||||
Reference in New Issue
Block a user