Skip to content

RulesEngineService.

License

Notifications You must be signed in to change notification settings

rafaelfgx/RulesEngineService

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RulesEngineService

https://microsoft.github.io/RulesEngine

Run

Command Line

Prerequisites

Steps

  1. Open directory source\RulesEngineService in command line and execute dotnet run.
  2. Open https://localhost:5000.
Visual Studio Code

Prerequisites

Steps

  1. Open source directory in Visual Studio Code.
  2. Press F5.
Visual Studio

Prerequisites

Steps

  1. Open source\RulesEngineService.sln in Visual Studio.
  2. Set RulesEngineService as startup project.
  3. Press F5.

Example

Rules

[
    {
        "WorkflowName": "DiscountPercentage",
        "GlobalParams": [
            {
                "Name": "CompareValue",
                "Expression": "1000"
            }
        ],
        "Rules": [
            {
                "RuleName": "CreditCard",
                "Expression": "PaymentType == \"CreditCard\"",
                "SuccessEvent": "5"
            },
            {
                "RuleName": "DebitCard",
                "Expression": "PaymentType == \"DebitCard\"",
                "SuccessEvent": "10"
            },
            {
                "RuleName": "CashLessThan",
                "Expression": "PaymentType == \"Cash\" && Value < CompareValue",
                "SuccessEvent": "15"
            },
            {
                "RuleName": "CashGreaterThanOrEqual",
                "Expression": "PaymentType == \"Cash\" && Value >= CompareValue",
                "SuccessEvent": "20"
            }
        ]
    }
]

Execute

var json = System.IO.File.ReadAllText("Rules.json");

var workflows = JsonSerializer.Deserialize<Workflow[]>(json);

var rulesEngine = new RulesEngine.RulesEngine(workflows);

var parameters = new RuleParameter[]
{
    new RuleParameter("PaymentType", "Cash"),
    new RuleParameter("Value", 1000)
};

var result = await rulesEngine.ExecuteAllRulesAsync(workflows.First().WorkflowName, parameters);

Result

[
    {
        "rule": {
            "ruleName": "CreditCard",
            "expression": "PaymentType == \"CreditCard\"",
            "successEvent": "5"
        },
        "isSuccess": false,
        "inputs": {
            "PaymentType": "Cash",
            "Value": 1000,
            "CompareValue": 1000
        }
    },
    {
        "rule": {
            "ruleName": "DebitCard",
            "expression": "PaymentType == \"DebitCard\"",
            "successEvent": "10"
        },
        "isSuccess": false,
        "inputs": {
            "PaymentType": "Cash",
            "Value": 1000,
            "CompareValue": 1000
        }
    },
    {
        "rule": {
            "ruleName": "CashLessThan",
            "expression": "PaymentType == \"Cash\" && Value < CompareValue",
            "successEvent": "15"
        },
        "isSuccess": false,
        "inputs": {
            "PaymentType": "Cash",
            "Value": 1000,
            "CompareValue": 1000
        }
    },
    {
        "rule": {
            "ruleName": "CashGreaterThanOrEqual",
            "expression": "PaymentType == \"Cash\" && Value >= CompareValue",
            "successEvent": "20"
        },
        "isSuccess": true,
        "inputs": {
            "PaymentType": "Cash",
            "Value": 1000,
            "CompareValue": 1000
        }
    }
]

Value

var value = result.SingleOrDefault(rule => rule.IsSuccess)?.Rule.SuccessEvent; // 20