Beispiel #1
0
        public HttpResponseMessage GetRevisionDifferences(string db, [FromBody] object msg)
        {
            // Parse Post Message in correct format (dict of ids with rev arrays)
            JObject parameters = JObject.Parse(msg.ToString());
            Dictionary <string, object> parametersDict = parameters.ToObject <Dictionary <string, object> >();

            // Get used Ids
            List <string> Ids = new List <string>();

            foreach (string cId in parametersDict.Keys)
            {
                Ids.Add(cId);
            }

            // Find revs for every id
            List <List <string> > Revisions = new List <List <string> >();

            foreach (string cId in Ids)
            {
                Revisions.Add(JsonConvert.DeserializeObject <List <string> >(parametersDict[cId].ToString()));
            }

            // Find missing revisions and Ids
            List <Tuple <string, List <string> > > Missing = new List <Tuple <string, List <string> > >();

            using (DatabaseContext _db = new DatabaseContext())
            {
                List <string> cMissingRevs = new List <string>();

                // Check each id if it exists
                for (int i = 0; i < Ids.Count; i++)
                {
                    List <Ticket> ctempData = _db.Tickets.ToList();

                    // Find missing ids in general
                    List <string> allIds = new List <string>();
                    foreach (Ticket cTicket in ctempData)
                    {
                        allIds.Add(cTicket._id);
                    }

                    // Is completely missing add all and break
                    bool foundId = false;
                    foreach (string id in Ids)
                    {
                        if (id.Equals(Ids[i]))
                        {
                            if (!allIds.Contains(id))
                            {
                                Missing.Add(new Tuple <string, List <string> >(id, Revisions[i]));
                                foundId = true;
                                continue;
                            }
                        }
                    }
                    if (foundId)
                    {
                        continue;
                    }


                    // bool missingFound = false;

                    // Get revision List
                    List <string> allRevisions = new List <string>();
                    foreach (Ticket cData in ctempData)
                    {
                        allRevisions.Add(cData._rev);
                    }

                    // Check all for missing ones
                    cMissingRevs = new List <string>();
                    foreach (string cRevision in Revisions[i])
                    {
                        if (!allRevisions.Contains(cRevision))
                        {
                            cMissingRevs.Add(cRevision);
                        }
                    }

                    Missing.Add(new Tuple <string, List <string> >(Ids[i], cMissingRevs));

                    /*
                     * foreach (Ticket cData in ctempData)
                     *      if (cData._id.Equals(Ids[i]))
                     *      {
                     *              foreach (string cRevision in Revisions[i])
                     *              {
                     *                      if (!cRevision.Equals(cData._rev))
                     *                      {
                     *                              Console.WriteLine("Found Missing Rev: " + cRevision);
                     *
                     *                              cMissingRevs.Add(cRevision);
                     *                              missingFound = true;
                     *                      }
                     *              }
                     *      }
                     *
                     * if (missingFound)
                     *      Missing.Add(new Tuple<string, List<string>>(Ids[i], cMissingRevs));
                     */
                }
            }

            using (MessageControllerHelper helper = new MessageControllerHelper())
            {
                string temp;
                using (ReturnParser parser = new ReturnParser())
                {
                    temp = parser.GetRevisionDifferenceReturns(Missing);
                }
                return(helper.GetJsonResponse(HttpStatusCode.OK, new StringContent(temp)));
            }
        }