336 lines
12 KiB
Markdown
336 lines
12 KiB
Markdown
# Package Index
|
|
|
|
> Complete reference for all 18 NuGet packages in the Svrnty.CQRS framework.
|
|
|
|
## Overview
|
|
|
|
| # | Package | Path | NuGet Package |
|
|
|---|---------|------|:---:|
|
|
| 1 | [Svrnty.CQRS.Abstractions](#1-svrntycqrsabstractions) | `Svrnty.CQRS.Abstractions/` | Yes |
|
|
| 2 | [Svrnty.CQRS](#2-svrntycqrs) | `Svrnty.CQRS/` | Yes |
|
|
| 3 | [Svrnty.CQRS.MinimalApi](#3-svrntycqrsminimalapi) | `Svrnty.CQRS.MinimalApi/` | Yes |
|
|
| 4 | [Svrnty.CQRS.Grpc](#4-svrntycqrsgrpc) | `Svrnty.CQRS.Grpc/` | Yes |
|
|
| 5 | [Svrnty.CQRS.Grpc.Abstractions](#5-svrntycqrsgrpcabstractions) | `Svrnty.CQRS.Grpc.Abstractions/` | Yes |
|
|
| 6 | [Svrnty.CQRS.Grpc.Generators](#6-svrntycqrsgrpcgenerators) | `Svrnty.CQRS.Grpc.Generators/` | Yes |
|
|
| 7 | [Svrnty.CQRS.FluentValidation](#7-svrntycqrsfluentvalidation) | `Svrnty.CQRS.FluentValidation/` | Yes |
|
|
| 8 | [Svrnty.CQRS.DynamicQuery.Abstractions](#8-svrntycqrsdynamicqueryabstractions) | `Svrnty.CQRS.DynamicQuery.Abstractions/` | Yes |
|
|
| 9 | [Svrnty.CQRS.DynamicQuery](#9-svrntycqrsdynamicquery) | `Svrnty.CQRS.DynamicQuery/` | Yes |
|
|
| 10 | [Svrnty.CQRS.DynamicQuery.MinimalApi](#10-svrntycqrsdynamicqueryminimalapi) | `Svrnty.CQRS.DynamicQuery.MinimalApi/` | Yes |
|
|
| 11 | [Svrnty.CQRS.DynamicQuery.EntityFramework](#11-svrntycqrsdynamicqueryentityframework) | `Svrnty.CQRS.DynamicQuery.EntityFramework/` | Yes |
|
|
| 12 | [Svrnty.CQRS.Events.Abstractions](#12-svrntycqrseventsabstractions) | `Svrnty.CQRS.Events.Abstractions/` | Yes |
|
|
| 13 | [Svrnty.CQRS.Events.RabbitMQ](#13-svrntycqrseventsrabbitmq) | `Svrnty.CQRS.Events.RabbitMQ/` | Yes |
|
|
| 14 | [Svrnty.CQRS.Sagas.Abstractions](#14-svrntycqrssagasabstractions) | `Svrnty.CQRS.Sagas.Abstractions/` | Yes |
|
|
| 15 | [Svrnty.CQRS.Sagas](#15-svrntycqrssagas) | `Svrnty.CQRS.Sagas/` | Yes |
|
|
| 16 | [Svrnty.CQRS.Sagas.RabbitMQ](#16-svrntycqrssagasrabbitmq) | `Svrnty.CQRS.Sagas.RabbitMQ/` | Yes |
|
|
| 17 | [Svrnty.CQRS.Notifications.Abstractions](#17-svrntycqrsnotificationsabstractions) | `Svrnty.CQRS.Notifications.Abstractions/` | Yes |
|
|
| 18 | [Svrnty.CQRS.Notifications.Grpc](#18-svrntycqrsnotificationsgrpc) | `Svrnty.CQRS.Notifications.Grpc/` | Yes |
|
|
|
|
---
|
|
|
|
## Package Details
|
|
|
|
### 1. Svrnty.CQRS.Abstractions
|
|
|
|
**Purpose**: Core interfaces that define the CQRS contract. This is the only package your domain/application layer needs to reference.
|
|
|
|
**Target**: `net10.0` | **AOT**: Yes
|
|
|
|
**Key Types**:
|
|
- `ICommandHandler<TCommand>` -- Handler for commands with no return value
|
|
- `ICommandHandler<TCommand, TResult>` -- Handler for commands returning a result
|
|
- `IQueryHandler<TQuery, TResult>` -- Handler for queries
|
|
- `ICommandMeta` / `IQueryMeta` -- Discovery metadata
|
|
- `ICommandDiscovery` / `IQueryDiscovery` -- Service discovery interfaces
|
|
- `ICommandAuthorizationService<TCommand>` -- Per-command authorization
|
|
- `IQueryAuthorizationService<TQuery>` -- Per-query authorization
|
|
- `CommandNameAttribute` / `QueryNameAttribute` -- Custom naming
|
|
- `IgnoreCommandAttribute` / `IgnoreQueryAttribute` -- Exclude from auto-discovery
|
|
|
|
**Internal Dependencies**: None
|
|
|
|
---
|
|
|
|
### 2. Svrnty.CQRS
|
|
|
|
**Purpose**: Core registration and discovery engine. Provides the `AddSvrntyCqrs()` fluent API and auto-discovers registered handlers.
|
|
|
|
**Target**: `net10.0` | **AOT**: Yes
|
|
|
|
**Key Types**:
|
|
- `CqrsBuilder` -- Fluent builder for configuring transports and features
|
|
- `CqrsConfiguration` -- Configuration state
|
|
- `ServiceCollectionExtensions.AddSvrntyCqrs()` -- Entry point
|
|
- `ServiceCollectionExtensions.AddCommand<T, TResult, THandler>()` -- Register a command handler
|
|
- `ServiceCollectionExtensions.AddQuery<T, TResult, THandler>()` -- Register a query handler
|
|
- `CommandDiscovery` / `QueryDiscovery` -- Default discovery implementations
|
|
|
|
**Internal Dependencies**: `Svrnty.CQRS.Abstractions`
|
|
|
|
---
|
|
|
|
### 3. Svrnty.CQRS.MinimalApi
|
|
|
|
**Purpose**: Maps registered commands and queries to ASP.NET Core Minimal API HTTP endpoints. Includes RFC 7807 Problem Details for validation errors.
|
|
|
|
**Target**: `net10.0` | **AOT**: No
|
|
|
|
**Key Types**:
|
|
- `CqrsBuilderExtensions.AddMinimalApi()` -- Enable HTTP endpoints
|
|
- `MinimalApiCqrsOptions` -- Configuration (route prefixes, etc.)
|
|
- `ValidationFilter` -- Endpoint filter for FluentValidation
|
|
- `WebApplicationExtensions.UseSvrntyCqrs()` -- Map endpoints at startup
|
|
- `EndpointRouteBuilderExtensions` -- Route mapping helpers
|
|
|
|
**Internal Dependencies**: `Svrnty.CQRS.Abstractions`, `Svrnty.CQRS`
|
|
|
|
**External Dependencies**: `FluentValidation 11.x`, `Microsoft.AspNetCore.App`
|
|
|
|
---
|
|
|
|
### 4. Svrnty.CQRS.Grpc
|
|
|
|
**Purpose**: Maps registered commands and queries to gRPC services. Uses Google Rich Error Model for structured validation errors.
|
|
|
|
**Target**: `net10.0` | **AOT**: No
|
|
|
|
**Key Types**:
|
|
- `CqrsBuilderExtensions.AddGrpc()` -- Enable gRPC endpoints
|
|
- `GrpcCqrsOptions` -- Configuration (reflection, etc.)
|
|
|
|
**Internal Dependencies**: `Svrnty.CQRS`
|
|
|
|
**External Dependencies**: `Grpc.AspNetCore 2.71.0`
|
|
|
|
---
|
|
|
|
### 5. Svrnty.CQRS.Grpc.Abstractions
|
|
|
|
**Purpose**: Attributes for controlling gRPC code generation behavior.
|
|
|
|
**Target**: `net10.0` | **AOT**: Yes
|
|
|
|
**Key Types**:
|
|
- `GrpcIgnoreAttribute` -- Marks a command/query to be excluded from gRPC service generation
|
|
|
|
**Internal Dependencies**: None
|
|
|
|
---
|
|
|
|
### 6. Svrnty.CQRS.Grpc.Generators
|
|
|
|
**Purpose**: Roslyn source generator that auto-generates `.proto` files and gRPC service implementations from registered command/query types.
|
|
|
|
**Target**: `netstandard2.0` (Roslyn component) | **AOT**: N/A
|
|
|
|
**Key Types**:
|
|
- Source generator (analyzer DLL)
|
|
- MSBuild `WriteProtoFileTask` -- Writes generated `.proto` files to disk
|
|
- Build targets and props for NuGet consumers
|
|
|
|
**Internal Dependencies**: None (ships as analyzer)
|
|
|
|
**External Dependencies**: `Microsoft.CodeAnalysis.CSharp 5.0.0`, `Microsoft.Build.Utilities.Core 17.0.0`
|
|
|
|
---
|
|
|
|
### 7. Svrnty.CQRS.FluentValidation
|
|
|
|
**Purpose**: Integrates FluentValidation with command/query registration. Validators are automatically invoked before handler execution.
|
|
|
|
**Target**: `net10.0` | **AOT**: Yes
|
|
|
|
**Key Types**:
|
|
- `ServiceCollectionExtensions.AddCommand<TCmd, TResult, THandler, TValidator>()` -- Register command with validator
|
|
- Automatic `AbstractValidator<T>` binding
|
|
|
|
**Internal Dependencies**: `Svrnty.CQRS`, `Svrnty.CQRS.Abstractions`
|
|
|
|
**External Dependencies**: `FluentValidation 11.11.0`
|
|
|
|
---
|
|
|
|
### 8. Svrnty.CQRS.DynamicQuery.Abstractions
|
|
|
|
**Purpose**: Interfaces for the dynamic query subsystem. Defines how data sources are provided and queries are intercepted.
|
|
|
|
**Target**: `netstandard2.1`, `net10.0` (multi-target) | **AOT**: Conditional
|
|
|
|
**Key Types**:
|
|
- `IQueryableProvider<TSource>` -- Provides an `IQueryable<T>` data source
|
|
- `IQueryableProviderOverride<TSource>` -- Override default provider
|
|
- `IAlterQueryableService<TSource>` -- Intercept/modify queryables
|
|
- `IDynamicQuery` / `IDynamicQueryParams` -- Query parameter contracts
|
|
- `IDynamicQueryInterceptorProvider` -- Interceptor registration
|
|
|
|
**Internal Dependencies**: None
|
|
|
|
**External Dependencies**: `PoweredSoft.DynamicQuery.Core 3.0.1`
|
|
|
|
---
|
|
|
|
### 9. Svrnty.CQRS.DynamicQuery
|
|
|
|
**Purpose**: Implementation of dynamic query execution with filtering, sorting, grouping, pagination, and aggregation.
|
|
|
|
**Target**: `net10.0` | **AOT**: Yes
|
|
|
|
**Key Types**:
|
|
- `ServiceCollectionExtensions.AddDynamicQueryWithProvider<TSource, TProvider>()` -- Register a queryable provider
|
|
- Dynamic query handler pipeline
|
|
|
|
**Internal Dependencies**: `Svrnty.CQRS.DynamicQuery.Abstractions`, `Svrnty.CQRS`
|
|
|
|
**External Dependencies**: `PoweredSoft.DynamicQuery 3.0.1`, `Pluralize.NET 1.0.2`
|
|
|
|
---
|
|
|
|
### 10. Svrnty.CQRS.DynamicQuery.MinimalApi
|
|
|
|
**Purpose**: HTTP Minimal API endpoints for dynamic queries. Exposes each registered entity as a POST endpoint with filter/sort/page parameters.
|
|
|
|
**Target**: `net10.0` | **AOT**: No
|
|
|
|
**Key Types**:
|
|
- Endpoint mapping for dynamic query routes (`/api/dynamic-query/{entity}`)
|
|
|
|
**Internal Dependencies**: `Svrnty.CQRS.Abstractions`, `Svrnty.CQRS.DynamicQuery.Abstractions`, `Svrnty.CQRS.DynamicQuery`
|
|
|
|
**External Dependencies**: `Microsoft.AspNetCore.App`
|
|
|
|
---
|
|
|
|
### 11. Svrnty.CQRS.DynamicQuery.EntityFramework
|
|
|
|
**Purpose**: Entity Framework Core integration for dynamic queries. Provides an EF-backed `IAsyncQueryableService`.
|
|
|
|
**Target**: `net10.0` | **AOT**: No
|
|
|
|
**Key Types**:
|
|
- EF Core queryable service adapter
|
|
|
|
**Internal Dependencies**: `Svrnty.CQRS.DynamicQuery`
|
|
|
|
**External Dependencies**: `PoweredSoft.Data.EntityFrameworkCore 3.0.0`
|
|
|
|
---
|
|
|
|
### 12. Svrnty.CQRS.Events.Abstractions
|
|
|
|
**Purpose**: Interfaces for domain event publishing.
|
|
|
|
**Target**: `net10.0` | **AOT**: Yes
|
|
|
|
**Key Types**:
|
|
- `IDomainEvent` -- Marker interface (EventId, OccurredAt)
|
|
- `IDomainEventPublisher` -- Publish events to external systems
|
|
|
|
**Internal Dependencies**: None
|
|
|
|
---
|
|
|
|
### 13. Svrnty.CQRS.Events.RabbitMQ
|
|
|
|
**Purpose**: RabbitMQ-backed implementation of domain event publishing.
|
|
|
|
**Target**: `net10.0` | **AOT**: No
|
|
|
|
**Key Types**:
|
|
- RabbitMQ event publisher implementation
|
|
|
|
**Internal Dependencies**: `Svrnty.CQRS.Events.Abstractions`
|
|
|
|
**External Dependencies**: `RabbitMQ.Client 7.0.0`, `Microsoft.Extensions.DependencyInjection.Abstractions`, `Microsoft.Extensions.Logging.Abstractions`, `Microsoft.Extensions.Options`
|
|
|
|
---
|
|
|
|
### 14. Svrnty.CQRS.Sagas.Abstractions
|
|
|
|
**Purpose**: Interfaces and types for the saga orchestration pattern with compensation (rollback) support.
|
|
|
|
**Target**: `net10.0` | **AOT**: Yes
|
|
|
|
**Key Types**:
|
|
- `ISaga<TData>` -- Define a saga with steps
|
|
- `ISagaBuilder<TData>` -- Fluent builder for local and remote steps
|
|
- `ISagaStepBuilder<TData>` -- Configure Execute/Compensate actions
|
|
- `ISagaRemoteStepBuilder<TData, TCommand>` -- Remote command steps with timeout/retry
|
|
- `ISagaOrchestrator` -- Start sagas, query state
|
|
- `ISagaData` -- Marker interface (CorrelationId)
|
|
- `SagaState` -- Persistent saga state (status, completed steps, errors)
|
|
- `SagaStatus` -- Enum: NotStarted, InProgress, Completed, Failed, Compensating, Compensated
|
|
- `ISagaStateStore` -- Persistence abstraction
|
|
- `ISagaMessageBus` -- Messaging abstraction
|
|
- `SagaMessage` / `SagaStepResponse` -- Message types
|
|
- `ISagaContext` -- Step execution context
|
|
|
|
**Internal Dependencies**: None
|
|
|
|
---
|
|
|
|
### 15. Svrnty.CQRS.Sagas
|
|
|
|
**Purpose**: Default saga orchestrator implementation with step execution, compensation, and state management.
|
|
|
|
**Target**: `net10.0` | **AOT**: Yes
|
|
|
|
**Key Types**:
|
|
- Saga orchestrator engine
|
|
- In-memory state store (default)
|
|
|
|
**Internal Dependencies**: `Svrnty.CQRS`, `Svrnty.CQRS.Sagas.Abstractions`
|
|
|
|
**External Dependencies**: `Microsoft.Extensions.Logging.Abstractions`, `Microsoft.Extensions.Options`
|
|
|
|
---
|
|
|
|
### 16. Svrnty.CQRS.Sagas.RabbitMQ
|
|
|
|
**Purpose**: RabbitMQ-backed message bus for distributed saga step execution across microservices.
|
|
|
|
**Target**: `net10.0` | **AOT**: No
|
|
|
|
**Key Types**:
|
|
- RabbitMQ saga message bus implementation
|
|
|
|
**Internal Dependencies**: `Svrnty.CQRS.Sagas`
|
|
|
|
**External Dependencies**: `RabbitMQ.Client 7.0.0`, `Microsoft.Extensions.Hosting.Abstractions`, `Microsoft.Extensions.Options`
|
|
|
|
---
|
|
|
|
### 17. Svrnty.CQRS.Notifications.Abstractions
|
|
|
|
**Purpose**: Interfaces for real-time notification streaming to clients.
|
|
|
|
**Target**: `net10.0` | **AOT**: Yes
|
|
|
|
**Key Types**:
|
|
- `INotificationPublisher` -- Publish notifications to subscribed clients
|
|
- `StreamingNotificationAttribute` -- Marks a type as a streamable notification with a subscription key
|
|
|
|
**Internal Dependencies**: None
|
|
|
|
---
|
|
|
|
### 18. Svrnty.CQRS.Notifications.Grpc
|
|
|
|
**Purpose**: gRPC server-streaming implementation for real-time notifications.
|
|
|
|
**Target**: `net10.0` | **AOT**: No
|
|
|
|
**Key Types**:
|
|
- gRPC notification streaming service
|
|
|
|
**Internal Dependencies**: `Svrnty.CQRS.Notifications.Abstractions`
|
|
|
|
**External Dependencies**: `Grpc.AspNetCore 2.71.0`, `Microsoft.Extensions.DependencyInjection.Abstractions`, `Microsoft.Extensions.Logging.Abstractions`
|
|
|
|
---
|
|
|
|
## Additional Projects (not NuGet packages)
|
|
|
|
| Project | Path | Purpose |
|
|
|---------|------|---------|
|
|
| `Svrnty.Sample` | `Svrnty.Sample/` | Sample web application demonstrating commands, queries, gRPC, MinimalApi, DynamicQuery, and validation |
|
|
| `Svrnty.CQRS.Tests` | `tests/Svrnty.CQRS.Tests/` | Unit and integration test suite |
|