예제 #1
0
        public void ProcessCardHistory(Card card, string cardJson, ListLookupFunction getList)
        {
            var jObject = JObject.Parse(cardJson);
            var actions = (JArray)jObject["actions"];

            if (actions == null)
            {
                throw new ApplicationException("No actions found");
            }

            var actionsOrdered = actions.OrderBy(x => x["date"].Value <DateTime>());

            foreach (var action in actionsOrdered)
            {
                var cardId = (string)action["id"];
                var type   = action["type"].Value <string>();
                var time   = action["date"].Value <DateTime>();
                switch (type)
                {
                case Action.CreateCard:
                    var listId = action["data"]["list"]["id"].Value <string>();
                    var list   = getList(listId);
                    card.ListHistory.Add(new ListHistoryItem
                    {
                        List         = list,
                        StartTimeUtc = time
                    });
                    break;

                case Action.UpdateCard:
                    var data       = action["data"];
                    var listBefore = data["listBefore"];
                    var listAfter  = data["listAfter"];
                    if (listBefore != null || listAfter != null)
                    {
                        if (listBefore == null)
                        {
                            throw new ApplicationException("UpdateCard parse error. listAfter specified, but listBefore not specified. Card: " + cardId);
                        }
                        if (listAfter == null)
                        {
                            throw new ApplicationException("UpdateCard parse error. listBefore specified, but listAfter not specified. Card: " + cardId);
                        }
                        var sourceList = getList(listBefore["id"].Value <string>());
                        var destList   = getList(listAfter["id"].Value <string>());
                        if (card.ListHistory.Count == 0)
                        {
                            card.ListHistory.Add(new ListHistoryItem());
                        }
                        var listItem = card.ListHistory.Last();
                        listItem.EndTimeUtc = time;
                        if (listItem.List == null)
                        {
                            listItem.List = sourceList;
                        }
                        else
                        if (listItem.List != sourceList)
                        {
                            throw new ApplicationException("UpdateCard parse error. listBefore does not match previous list.");
                        }
                        card.ListHistory.Add(new ListHistoryItem
                        {
                            List         = destList,
                            StartTimeUtc = time
                        });
                    }
                    break;

                case Action.MoveCardToBoard:
                    card.ListHistory.Last().EndTimeUtc = time;
                    card.ListHistory.Add(new ListHistoryItem
                    {
                        List         = null, // Unknown at present
                        StartTimeUtc = time
                    });
                    break;

                case Action.ConvertToCardFromCheckItem:
                    card.ListHistory.Add(new ListHistoryItem {
                        StartTimeUtc = time
                    });
                    break;
                }
            }
            var lastItem = card.ListHistory.Last();

            lastItem.List = lastItem.List ?? card.List;
        }
예제 #2
0
        public void ProcessCardHistory(Card card, string cardJson, ListLookupFunction getList)
        {
            var jObject = JObject.Parse(cardJson);
            var actions = (JArray)jObject["actions"];
            if (actions == null)
                throw new ApplicationException("No actions found");

            var actionsOrdered = actions.OrderBy(x => x["date"].Value<DateTime>());
            foreach (var action in actionsOrdered)
            {
                var cardId = (string)action["id"];
                var type = action["type"].Value<string>();
                var time = action["date"].Value<DateTime>();
                switch (type)
                {
                    case Action.CreateCard :
                        var listId = action["data"]["list"]["id"].Value<string>();
                        var list = getList(listId);
                        card.ListHistory.Add(new ListHistoryItem
                        {
                            List = list,
                            StartTimeUtc = time
                        });
                        break;
                    case Action.UpdateCard:
                        var data = action["data"];
                        var listBefore = data["listBefore"];
                        var listAfter = data["listAfter"];
                        if (listBefore != null || listAfter != null)
                        {
                            if (listBefore == null) throw new ApplicationException("UpdateCard parse error. listAfter specified, but listBefore not specified. Card: " + cardId);
                            if (listAfter == null) throw new ApplicationException("UpdateCard parse error. listBefore specified, but listAfter not specified. Card: " + cardId);
                            var sourceList = getList(listBefore["id"].Value<string>());
                            var destList = getList(listAfter["id"].Value<string>());
                            if (card.ListHistory.Count == 0)
                                card.ListHistory.Add(new ListHistoryItem());
                            var listItem = card.ListHistory.Last();
                            listItem.EndTimeUtc = time;
                            if (listItem.List == null)
                                listItem.List = sourceList;
                            else
                                if (listItem.List != sourceList) throw new ApplicationException("UpdateCard parse error. listBefore does not match previous list.");
                            card.ListHistory.Add(new ListHistoryItem
                            {
                                List = destList,
                                StartTimeUtc = time
                            });
                        }
                        break;
                    case Action.MoveCardToBoard:
                        card.ListHistory.Last().EndTimeUtc = time;
                        card.ListHistory.Add(new ListHistoryItem
                        {
                            List = null, // Unknown at present
                            StartTimeUtc = time
                        });
                        break;
                    case Action.ConvertToCardFromCheckItem :
                        card.ListHistory.Add(new ListHistoryItem { StartTimeUtc = time });
                        break;
                }
            }
            var lastItem = card.ListHistory.Last();
            lastItem.List = lastItem.List ?? card.List;
        }