public static IList <CategoryHistoryData> ToJavaScriptCategoryHistory(IList <StoredEvent> storedEvents)
        {
            HistoryData = new List <CategoryHistoryData>();
            CategoryHistoryDeserializer(storedEvents);

            var sorted = HistoryData.OrderBy(c => c.When);
            var list   = new List <CategoryHistoryData>();
            var last   = new CategoryHistoryData();

            foreach (var change in sorted)
            {
                var jsSlot = new CategoryHistoryData
                {
                    CategoryId = change.CategoryId == 0 || change.CategoryId == last.CategoryId
                        ? 0 : change.CategoryId,
                    CategoryName = string.IsNullOrWhiteSpace(change.CategoryName) || change.CategoryName == last.CategoryName
                        ? "" : change.CategoryName,
                    SubCategory = change.SubCategory == 0 || change.SubCategory == last.SubCategory
                        ? 0 : change.SubCategory,
                    Action = string.IsNullOrWhiteSpace(change.Action) ? "" : change.Action,
                    When   = change.When,
                    Who    = change.Who
                };

                list.Add(jsSlot);
                last = change;
            }
            return(list);
        }
        private static void CategoryHistoryDeserializer(IList <StoredEvent> storedEvents)
        {
            foreach (var e in storedEvents)
            {
                var     slot = new CategoryHistoryData();
                dynamic values;

                switch (e.MessageType)
                {
                case "CategoryCreatedEvent":
                    values            = JsonConvert.DeserializeObject <dynamic>(e.Data);
                    slot.CategoryId   = values["CategoryId"];
                    slot.CategoryName = values["CategoryName"];
                    slot.SubCategory  = values["SubCategory"];
                    slot.Action       = "Registered";
                    slot.When         = values["Timestamp"];
                    slot.Who          = e.User;
                    break;

                case "CategoryUpdatedEvent":
                    values            = JsonConvert.DeserializeObject <dynamic>(e.Data);
                    slot.CategoryId   = values["CategoryId"];
                    slot.CategoryName = values["CategoryName"];
                    slot.SubCategory  = values["SubCategory"];
                    slot.Action       = "Registered";
                    slot.When         = values["Timestamp"];
                    slot.Who          = e.User;
                    break;

                case "CategoryRemovedEvent":
                    values          = JsonConvert.DeserializeObject <dynamic>(e.Data);
                    slot.Action     = "Removed";
                    slot.When       = values["Timestamp"];
                    slot.CategoryId = values["CategoryId"];
                    slot.Who        = e.User;
                    break;
                }
                HistoryData.Add(slot);
            }
        }