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/Directory.Build.props b/Directory.Build.props new file mode 100644 index 0000000..18483ff --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,10 @@ + + + AgileWebs + AgileWebs + git + http://192.168.68.156:3000/AgileWebs/operations-domain + http://192.168.68.156:3000/AgileWebs/operations-domain + false + + diff --git a/Operations.Domain.slnx b/Operations.Domain.slnx new file mode 100644 index 0000000..0bcb20e --- /dev/null +++ b/Operations.Domain.slnx @@ -0,0 +1,5 @@ + + + + + diff --git a/src/Operations.Domain/Conventions/OperationsDomainPackageContract.cs b/src/Operations.Domain/Conventions/OperationsDomainPackageContract.cs new file mode 100644 index 0000000..6123800 --- /dev/null +++ b/src/Operations.Domain/Conventions/OperationsDomainPackageContract.cs @@ -0,0 +1,3 @@ +namespace Operations.Domain.Conventions; + +public interface IOperationsDomainPackageContract; diff --git a/src/Operations.Domain/Decisions/IOperationsPolicyResolutionService.cs b/src/Operations.Domain/Decisions/IOperationsPolicyResolutionService.cs new file mode 100644 index 0000000..d973a87 --- /dev/null +++ b/src/Operations.Domain/Decisions/IOperationsPolicyResolutionService.cs @@ -0,0 +1,11 @@ +using Operations.Domain.Models; + +namespace Operations.Domain.Decisions; + +public interface IOperationsPolicyResolutionService +{ + ResolvedPolicyDecision ResolvePolicy( + string policyName, + IReadOnlyDictionary facts, + IReadOnlyDictionary featureFlags); +} diff --git a/src/Operations.Domain/Decisions/OperationsPolicyResolutionService.cs b/src/Operations.Domain/Decisions/OperationsPolicyResolutionService.cs new file mode 100644 index 0000000..b6b1277 --- /dev/null +++ b/src/Operations.Domain/Decisions/OperationsPolicyResolutionService.cs @@ -0,0 +1,19 @@ +using Operations.Domain.Models; + +namespace Operations.Domain.Decisions; + +public sealed class OperationsPolicyResolutionService : IOperationsPolicyResolutionService +{ + public ResolvedPolicyDecision ResolvePolicy( + string policyName, + IReadOnlyDictionary facts, + IReadOnlyDictionary featureFlags) + { + if (featureFlags.TryGetValue($"policy:{policyName}:disabled", out var disabled) && disabled) + { + return new ResolvedPolicyDecision(false, "Policy disabled by feature flag."); + } + + return new ResolvedPolicyDecision(true, "Policy allowed by default resolution."); + } +} diff --git a/src/Operations.Domain/Models/ResolvedPolicyDecision.cs b/src/Operations.Domain/Models/ResolvedPolicyDecision.cs new file mode 100644 index 0000000..8ee111f --- /dev/null +++ b/src/Operations.Domain/Models/ResolvedPolicyDecision.cs @@ -0,0 +1,3 @@ +namespace Operations.Domain.Models; + +public sealed record ResolvedPolicyDecision(bool Allowed, string Explanation); diff --git a/src/Operations.Domain/Operations.Domain.csproj b/src/Operations.Domain/Operations.Domain.csproj new file mode 100644 index 0000000..b760144 --- /dev/null +++ b/src/Operations.Domain/Operations.Domain.csproj @@ -0,0 +1,9 @@ + + + + net10.0 + enable + enable + + +