{"id":5722,"date":"2021-11-23T12:09:40","date_gmt":"2021-11-23T11:09:40","guid":{"rendered":"https:\/\/solidt.eu\/site\/?p=5722"},"modified":"2022-07-25T08:30:36","modified_gmt":"2022-07-25T07:30:36","slug":"c-changebuilder","status":"publish","type":"post","link":"https:\/\/solidt.eu\/site\/c-changebuilder\/","title":{"rendered":"C# ChangeBuilder"},"content":{"rendered":"\n<p>Detect and visualize property value changes<\/p>\n\n\n\n<div style=\"height: 250px; position:relative; margin-bottom: 50px;\" class=\"wp-block-simple-code-block-ace\"><pre class=\"wp-block-simple-code-block-ace\" style=\"position:absolute;top:0;right:0;bottom:0;left:0\" data-mode=\"csharp\" data-theme=\"monokai\" data-fontsize=\"14\" data-lines=\"Infinity\" data-showlines=\"true\" data-copy=\"false\">public class ChangeBuilder\n{\n    public class CompareProp\n    {\n        public CompareProp(string description, string left, string right)\n        {\n            Description = description;\n            Left = left;\n            Right = right;\n        }\n        public string Description { get; set; }\n        public string Left { get; set; }\n        public string Right { get; set; }\n    }\n\n    private readonly List&lt;CompareProp> compareProps = new List&lt;CompareProp>();\n    public ChangeBuilder Add(string description, string left, string right)\n    {\n        compareProps.Add(new CompareProp(description, left, right));\n        return this;\n    }\n    public IEnumerable&lt;CompareProp> GetChanges() => compareProps.Where(x => !StringHelper.StrEquals(x.Left, x.Right)).ToList();\n}\n\n\/\/ Use:\n\nprivate static void LogChanges(string message, IEnumerable&lt;ChangeBuilder.CompareProp> changes)\n{\n    var changesDescription = string.Join(Environment.NewLine, changes.Select(x => $\"{x.Description}: '{x.Left}' => '{x.Right}'\"));\n    _ = DomainPorts.LogMessageStore.Info($\"{message}{Environment.NewLine}{changesDescription}\");\n}\n\nvar registrationChanges = new ChangeBuilder()\n    .Add(\"FreightRegistrationId\", existingOrder.FreightRegistrationId, registration.Id.ToString())\n    .Add(\"DeliveryDate\", existingOrder.DeliveryDate?.ToString(\"yyyy-MM-dd\"), registration.FreightRegistrationTimeSlot.Date.ToString(\"yyyy-MM-dd\"))\n    .Add(\"MiddleOfTimeSlotString\", existingOrder.MiddleOfTimeSlotString, registration.FreightRegistrationTimeSlot?.MiddleOfTimeSlot.ToAs400Time())\n    .Add(\"LicensePlateName\", existingOrder.LicensePlateName, registration.LicensePlate?.Name ?? string.Empty)\n    .Add(\"LicensePlateNumber\", existingOrder.LicensePlateNumber, registration.LicensePlate?.LicensePlateNumber)\n    .Add(\"SaveLicensePlate\", existingOrder.SaveLicensePlate, registration.LicensePlate?.SaveAsNewLicensePlate.ToAs400String())\n    .GetChanges();\n\nif (registrationChanges.Any()) {\n    LogChanges($\"{transportOrder.OrderNumber}: Has registration changes:\", registrationChanges);\n}\n<\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Detect and visualize property value changes<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[6,4,1],"tags":[],"class_list":["post-5722","post","type-post","status-publish","format-standard","hentry","category-dotnet","category-programming","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/5722","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/comments?post=5722"}],"version-history":[{"count":1,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/5722\/revisions"}],"predecessor-version":[{"id":5723,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/posts\/5722\/revisions\/5723"}],"wp:attachment":[{"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/media?parent=5722"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/categories?post=5722"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/solidt.eu\/site\/wp-json\/wp\/v2\/tags?post=5722"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}