Exemple #1
0
        private static void LoadUpdateQnADTOs(
            IEnumerable <PortalDbRecordDTO> portalDbRecords,
            QnADocumentsDTO qnaDocumentsDTO,
            List <UpdateQnaDTO> updateQnADTOs)
        {
            foreach (PortalDbRecordDTO portalDbRecord in portalDbRecords)
            {
                Questions questions = new Questions();
                questions.Add = new List <string>();
                Metadata metadata = new Metadata();
                metadata.Add    = new List <MetadataDTO>();
                metadata.Delete = new List <MetadataDTO>();

                foreach (QnADTO qnAdto in qnaDocumentsDTO.QnaDTO)
                {
                    IEnumerable <string> source = qnAdto.Metadata.Where <MetadataDTO>((Func <MetadataDTO, bool>)(m => m.Name.ToLower() == "faqid")).Select <MetadataDTO, string>((Func <MetadataDTO, string>)(m => m.Value));

                    if (source.FirstOrDefault <string>() != null)
                    {
                        string str = source.FirstOrDefault <string>().ToString();

                        if (portalDbRecord.FaqId.ToString() == str)
                        {
                            questions.Add.Add(portalDbRecord.FaqQuestion);

                            foreach (MetadataDTO metadataDto1 in qnAdto.Metadata)
                            {
                                MetadataDTO metadataDto2 = new MetadataDTO()
                                {
                                    Name  = metadataDto1.Name,
                                    Value = metadataDto1.Value
                                };
                                metadata.Delete.Add(metadataDto2);
                            }

                            List <MetadataDTO> metadataDtoList = LoadMetadata(portalDbRecord);

                            foreach (var metadataDto in metadataDtoList)
                            {
                                metadata.Add.Add(metadataDto);
                            }

                            UpdateQnaDTO updateQnaDto = new UpdateQnaDTO()
                            {
                                Answer    = portalDbRecord.FaqAnswer,
                                Context   = qnAdto.Context,
                                Id        = qnAdto.Id,
                                Metadata  = metadata,
                                Questions = questions,
                                Source    = qnAdto.Source
                            };

                            updateQnADTOs.Add(updateQnaDto);
                        }
                    }
                }
            }
        }
        /// <inheritdoc/>
        public async Task UpdateQnAPairAsync(Question question, SuggestedAnswer suggestedAnswer)
        {
            if (question is null)
            {
                throw new ArgumentNullException(nameof(question));
            }

            if (suggestedAnswer is null)
            {
                throw new ArgumentNullException(nameof(suggestedAnswer));
            }

            var dto = new UpdateQnaDTO()
            {
                Id        = suggestedAnswer.Id,
                Questions = new UpdateQnaDTOQuestions()
                {
                    Add = new List <string>()
                    {
                        question.GetSanitizedMessage()
                    },
                },
            };

            var operation = new UpdateKbOperationDTO()
            {
                Update = new UpdateKbOperationDTOUpdate()
                {
                    QnaList = new List <UpdateQnaDTO>()
                    {
                        dto
                    },
                },
            };

            try
            {
                var response = await this.qnAClient.Knowledgebase.UpdateAsync(this.settings.KnowledgeBaseId, operation);
            }
            catch (ErrorResponseException exception)
            {
                var message = $"Failed to update QnA Pair to QnA Service. Question Id: {question.Id}, QnAPair Id : {suggestedAnswer.Id}.";
                this.logger.LogWarning(exception, message);
                throw new QBotException(HttpStatusCode.InternalServerError, ErrorCode.Unknown, message, exception);
            }
        }