Beispiel #1
0
        /// <summary>
        /// Check the local knowledgebase to the published knowledgebase and
        /// add the missing QnAPairs to the local db, if any are missing.
        /// This function is added since you can add QnA pairs on QnAMaker.ai. With this function you
        /// can get them and add them to the local db so you can manage them (delete, view)
        /// </summary>
        /// <param name="id">KnowledgeBase id in database</param>
        /// <returns>number of pairs added</returns>
        public async Task <int> VerifyLocalDbToPublishedDb(int id)
        {
            // Fetch all QnAPairs active in the knowledgbase
            var onlineQnA = await qnaRepository.DownloadKnowledgeBase(id);

            // If no where found, return -1. Something is wrong
            if (onlineQnA == null)
            {
                return(-1);
            }
            // Fetch local QnA
            var localQnA = await GetAllQnAPairsAsync(id);

            int  number  = 0;
            bool present = false;

            // If we already have some QnAPairs in local db
            if (localQnA.Count > 0)
            {
                foreach (QnAPairs external_qna in onlineQnA)
                {
                    for (int i = 0; i < onlineQnA.Count(); i++)
                    {
                        if (external_qna.Answer.ToLower().Equals(onlineQnA[i].Answer.ToLower()) &&
                            external_qna.Query.ToLower().Equals(onlineQnA[i].Query.ToLower()))
                        {
                            present = true;
                            break;
                        }
                    }
                    if (!present)
                    {
                        var newQnA = new QnAPairs
                        {
                            Query           = external_qna.Query,
                            Answer          = external_qna.Answer,
                            KnowledgeBaseId = id,
                            Trained         = true,
                            Published       = true,
                            PublishedDate   = DateTime.Now,
                            TrainedDate     = DateTime.Now,
                            Dep             = "Web-sync - Må oppdateres"
                        };
                        await db.AddAsync(newQnA);

                        await db.SaveChangesAsync();

                        number++;
                    }
                }
            }
            else // Or if we dont have any in the local db, just store them all. No need to check them
            {
                foreach (QnAPairs external_qna in onlineQnA)
                {
                    var newQnA = new QnAPairs
                    {
                        Query           = external_qna.Query,
                        Answer          = external_qna.Answer,
                        KnowledgeBaseId = id,
                        Trained         = true,
                        Published       = true,
                        PublishedDate   = DateTime.Now,
                        TrainedDate     = DateTime.Now,
                        Dep             = "Web-sync - Må oppdateres"
                    };
                    await db.AddAsync(newQnA);

                    await db.SaveChangesAsync();

                    number++;
                }
            }
            //update last edit for knowledgebase
            var b = await GetQnAKnowledgeBaseAsync(id);

            b.LastEdit = DateTime.Now;
            db.Update(b);
            db.SaveChanges();
            // Return result
            if (number > 0)
            {
                return(number);
            }
            else if (number == 0)
            {
                return(0);
            }
            else
            {
                return(-1);
            }
        }