/// <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); } }