{"id":20035926,"url":"https://github.com/rafaelfgx/rulesengineservice","last_synced_at":"2025-05-05T05:31:40.544Z","repository":{"id":175018926,"uuid":"610250581","full_name":"rafaelfgx/RulesEngineService","owner":"rafaelfgx","description":"RulesEngineService.","archived":false,"fork":false,"pushed_at":"2024-11-12T21:12:42.000Z","size":5,"stargazers_count":7,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-11-12T22:21:34.420Z","etag":null,"topics":["rule-engine","ruleengine","rules-engine","rulesengine"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rafaelfgx.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"license.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-03-06T11:57:55.000Z","updated_at":"2024-11-12T21:12:45.000Z","dependencies_parsed_at":"2024-03-30T22:26:49.646Z","dependency_job_id":"1ea7c90b-f07a-424d-b85d-6d3993b3846f","html_url":"https://github.com/rafaelfgx/RulesEngineService","commit_stats":null,"previous_names":["rafaelfgx/rulesengineservice"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rafaelfgx%2FRulesEngineService","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rafaelfgx%2FRulesEngineService/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rafaelfgx%2FRulesEngineService/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rafaelfgx%2FRulesEngineService/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rafaelfgx","download_url":"https://codeload.github.com/rafaelfgx/RulesEngineService/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224427847,"owners_count":17309373,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["rule-engine","ruleengine","rules-engine","rulesengine"],"created_at":"2024-11-13T10:09:58.763Z","updated_at":"2024-11-13T10:09:59.196Z","avatar_url":"https://github.com/rafaelfgx.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RulesEngineService\n\nhttps://microsoft.github.io/RulesEngine\n\n## Run\n\n\u003cdetails\u003e\n\u003csummary\u003eCommand Line\u003c/summary\u003e\n\n#### Prerequisites\n\n* [.NET SDK](https://dotnet.microsoft.com/download)\n\n#### Steps\n\n1. Open directory **source\\RulesEngineService** in command line and execute **dotnet run**.\n3. Open \u003chttps://localhost:5000\u003e.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eVisual Studio Code\u003c/summary\u003e\n\n#### Prerequisites\n\n* [.NET SDK](https://dotnet.microsoft.com/download)\n* [Visual Studio Code](https://code.visualstudio.com)\n* [C# Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.csharp)\n\n#### Steps\n\n1. Open **source** directory in Visual Studio Code.\n2. Press **F5**.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eVisual Studio\u003c/summary\u003e\n\n#### Prerequisites\n\n* [Visual Studio](https://visualstudio.microsoft.com)\n\n#### Steps\n\n1. Open **source\\RulesEngineService.sln** in Visual Studio.\n2. Set **RulesEngineService** as startup project.\n3. Press **F5**.\n\n\u003c/details\u003e\n\n## Example\n\n### Rules\n\n```json\n[\n    {\n        \"WorkflowName\": \"DiscountPercentage\",\n        \"GlobalParams\": [\n            {\n                \"Name\": \"CompareValue\",\n                \"Expression\": \"1000\"\n            }\n        ],\n        \"Rules\": [\n            {\n                \"RuleName\": \"CreditCard\",\n                \"Expression\": \"PaymentType == \\\"CreditCard\\\"\",\n                \"SuccessEvent\": \"5\"\n            },\n            {\n                \"RuleName\": \"DebitCard\",\n                \"Expression\": \"PaymentType == \\\"DebitCard\\\"\",\n                \"SuccessEvent\": \"10\"\n            },\n            {\n                \"RuleName\": \"CashLessThan\",\n                \"Expression\": \"PaymentType == \\\"Cash\\\" \u0026\u0026 Value \u003c CompareValue\",\n                \"SuccessEvent\": \"15\"\n            },\n            {\n                \"RuleName\": \"CashGreaterThanOrEqual\",\n                \"Expression\": \"PaymentType == \\\"Cash\\\" \u0026\u0026 Value \u003e= CompareValue\",\n                \"SuccessEvent\": \"20\"\n            }\n        ]\n    }\n]\n```\n\n### Execute\n\n```cs\nvar json = System.IO.File.ReadAllText(\"Rules.json\");\n\nvar workflows = JsonSerializer.Deserialize\u003cWorkflow[]\u003e(json);\n\nvar rulesEngine = new RulesEngine.RulesEngine(workflows);\n\nvar parameters = new RuleParameter[]\n{\n    new RuleParameter(\"PaymentType\", \"Cash\"),\n    new RuleParameter(\"Value\", 1000)\n};\n\nvar result = await rulesEngine.ExecuteAllRulesAsync(workflows.First().WorkflowName, parameters);\n```\n\n### Result\n\n```json\n[\n    {\n        \"rule\": {\n            \"ruleName\": \"CreditCard\",\n            \"expression\": \"PaymentType == \\\"CreditCard\\\"\",\n            \"successEvent\": \"5\"\n        },\n        \"isSuccess\": false,\n        \"inputs\": {\n            \"PaymentType\": \"Cash\",\n            \"Value\": 1000,\n            \"CompareValue\": 1000\n        }\n    },\n    {\n        \"rule\": {\n            \"ruleName\": \"DebitCard\",\n            \"expression\": \"PaymentType == \\\"DebitCard\\\"\",\n            \"successEvent\": \"10\"\n        },\n        \"isSuccess\": false,\n        \"inputs\": {\n            \"PaymentType\": \"Cash\",\n            \"Value\": 1000,\n            \"CompareValue\": 1000\n        }\n    },\n    {\n        \"rule\": {\n            \"ruleName\": \"CashLessThan\",\n            \"expression\": \"PaymentType == \\\"Cash\\\" \u0026\u0026 Value \u003c CompareValue\",\n            \"successEvent\": \"15\"\n        },\n        \"isSuccess\": false,\n        \"inputs\": {\n            \"PaymentType\": \"Cash\",\n            \"Value\": 1000,\n            \"CompareValue\": 1000\n        }\n    },\n    {\n        \"rule\": {\n            \"ruleName\": \"CashGreaterThanOrEqual\",\n            \"expression\": \"PaymentType == \\\"Cash\\\" \u0026\u0026 Value \u003e= CompareValue\",\n            \"successEvent\": \"20\"\n        },\n        \"isSuccess\": true,\n        \"inputs\": {\n            \"PaymentType\": \"Cash\",\n            \"Value\": 1000,\n            \"CompareValue\": 1000\n        }\n    }\n]\n```\n\n### Value\n\n```cs\nvar value = result.SingleOrDefault(rule =\u003e rule.IsSuccess)?.Rule.SuccessEvent; // 20\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frafaelfgx%2Frulesengineservice","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frafaelfgx%2Frulesengineservice","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frafaelfgx%2Frulesengineservice/lists"}