diff --git a/.gitignore b/.gitignore index 31c7257..b299ff1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ .tasks/ .agile/ +**/bin/ +**/obj/ diff --git a/BuildingBlock.Dispatch.slnx b/BuildingBlock.Dispatch.slnx new file mode 100644 index 0000000..1893428 --- /dev/null +++ b/BuildingBlock.Dispatch.slnx @@ -0,0 +1,5 @@ + + + + + diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 0000000..fcb3a65 --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,10 @@ + + + AgileWebs + AgileWebs + git + http://192.168.68.156:3000/AgileWebs/building-block-dispatch + http://192.168.68.156:3000/AgileWebs/building-block-dispatch + false + + diff --git a/src/BuildingBlock.Dispatch.Contracts/Abstractions/IDispatchCapabilityContract.cs b/src/BuildingBlock.Dispatch.Contracts/Abstractions/IDispatchCapabilityContract.cs new file mode 100644 index 0000000..1e58fac --- /dev/null +++ b/src/BuildingBlock.Dispatch.Contracts/Abstractions/IDispatchCapabilityContract.cs @@ -0,0 +1,11 @@ +using BuildingBlock.Dispatch.Contracts.Requests; +using BuildingBlock.Dispatch.Contracts.Responses; + +namespace BuildingBlock.Dispatch.Contracts.Abstractions; + +public interface IDispatchCapabilityContract +{ + Task EvaluateDispatchAsync( + EvaluateDispatchRequest request, + CancellationToken cancellationToken); +} diff --git a/src/BuildingBlock.Dispatch.Contracts/BuildingBlock.Dispatch.Contracts.csproj b/src/BuildingBlock.Dispatch.Contracts/BuildingBlock.Dispatch.Contracts.csproj new file mode 100644 index 0000000..b760144 --- /dev/null +++ b/src/BuildingBlock.Dispatch.Contracts/BuildingBlock.Dispatch.Contracts.csproj @@ -0,0 +1,9 @@ + + + + net10.0 + enable + enable + + + diff --git a/src/BuildingBlock.Dispatch.Contracts/Contracts/DispatchCandidateContract.cs b/src/BuildingBlock.Dispatch.Contracts/Contracts/DispatchCandidateContract.cs new file mode 100644 index 0000000..d295cd4 --- /dev/null +++ b/src/BuildingBlock.Dispatch.Contracts/Contracts/DispatchCandidateContract.cs @@ -0,0 +1,7 @@ +namespace BuildingBlock.Dispatch.Contracts.Contracts; + +public sealed record DispatchCandidateContract( + string WorkItemId, + string QueueName, + DispatchPriority Priority, + DateTime DeadlineUtc); diff --git a/src/BuildingBlock.Dispatch.Contracts/Contracts/DispatchPriority.cs b/src/BuildingBlock.Dispatch.Contracts/Contracts/DispatchPriority.cs new file mode 100644 index 0000000..d7114a5 --- /dev/null +++ b/src/BuildingBlock.Dispatch.Contracts/Contracts/DispatchPriority.cs @@ -0,0 +1,9 @@ +namespace BuildingBlock.Dispatch.Contracts.Contracts; + +public enum DispatchPriority +{ + Low = 0, + Normal = 1, + High = 2, + Critical = 3 +} diff --git a/src/BuildingBlock.Dispatch.Contracts/Requests/EvaluateDispatchRequest.cs b/src/BuildingBlock.Dispatch.Contracts/Requests/EvaluateDispatchRequest.cs new file mode 100644 index 0000000..a7a5208 --- /dev/null +++ b/src/BuildingBlock.Dispatch.Contracts/Requests/EvaluateDispatchRequest.cs @@ -0,0 +1,8 @@ +using BuildingBlock.Dispatch.Contracts.Contracts; + +namespace BuildingBlock.Dispatch.Contracts.Requests; + +public sealed record EvaluateDispatchRequest( + string DispatchContext, + IReadOnlyCollection Candidates, + int AvailableCapacity); diff --git a/src/BuildingBlock.Dispatch.Contracts/Responses/EvaluateDispatchResponse.cs b/src/BuildingBlock.Dispatch.Contracts/Responses/EvaluateDispatchResponse.cs new file mode 100644 index 0000000..eb2133e --- /dev/null +++ b/src/BuildingBlock.Dispatch.Contracts/Responses/EvaluateDispatchResponse.cs @@ -0,0 +1,6 @@ +namespace BuildingBlock.Dispatch.Contracts.Responses; + +public sealed record EvaluateDispatchResponse( + IReadOnlyCollection SelectedWorkItemIds, + IReadOnlyCollection DeferredWorkItemIds, + string SelectionReason);