/// <summary> /// Цель: отправить ОТВЕТ на статусУрл /// /// Варианты, когда вызывается этот метод: /// 1. Мы получили ответ в КОНТРОЛ_ПАНЕЛ (от модератора) /// 2. Ответ на вопрос с этим идом из АПИ /// 3. Система сама нашла подходящий ответ на вопрос и попыталась отправить ответ, если проект это допускает /// </summary> /// <param name="questionId"></param> /// <returns></returns> internal async Task <bool> TrySendQuestionAnswerAsync(int questionId) { var question = _applicationContext.Questions .Include(q => q.Answer) .Include(q => q.Project) .FirstOrDefault(q => q.Id == questionId); if (question.Answer == null) { return(false); } // Если проект запрещает отправлять ответ без подтверждения модератора И ответ дан не модератором if (!question.Project.AnswerWithoutApprove && !question.HasApprovedAnswer) { return(false); } if (question.AnswerToEmail) { var emailClient = new EmailService(); await emailClient.SendEmailAsync( question.StatusUrl, $"Ответ на вопрос. Проект {question.Project.Name}", question.Answer.Text, question.Project.Name); return(true); } var answerOnStatus = new AnswerOnStatusUrl { QuestionId = question.Id, AnswerText = question.Answer.Text, QuestionText = question.Text, StatusCode = question.HasApprovedAnswer ? StatusCode.AnswerByHuman : StatusCode.AnswerBySystem }; var answerOnStatusJson = JsonConvert.SerializeObject(answerOnStatus); var signature = CreateSignature(answerOnStatusJson, question.Project.PrivateKey); var data = CryptoUtils.Base64Encode(answerOnStatusJson); var request = new RestRequest(Method.POST); request.AddParameter("data", data); request.AddParameter("signature", signature); var restClient = new RestClient(question.StatusUrl); var response = await Task.Run(() => restClient.Execute(request)); //var result = response.Content; return(response.IsSuccessful); }
internal async Task UpdateStatusForQuestion(int questionId) { // значит мы получили ответ в КОНТРОЛ_ПАНЕЛ на вопрос с этим идом, и можем отправить ОТВЕТ на статусУрл var question = _applicationContext.Questions .Include(q => q.Answer) .Include(q => q.Project) .FirstOrDefault(q => q.Id == questionId); if (question.AnswerToEmail) { var emailClient = new EmailService(); emailClient.SendEmailAsync( question.StatusUrl, $"Ответ на Ваш вопрос на {question.Project.Name}", question.Answer.Text, question.Project.Name); return; } var answerOnStatus = new AnswerOnStatusUrl { QuestionId = question.Id, AnswerText = question.Answer.Text, QuestionText = question.Text, StatusCode = question.AnsweredByHuman ? StatusCode.AnswerByHuman : StatusCode.AnswerBySystem }; var answerOnStatusJson = JsonConvert.SerializeObject(answerOnStatus); var signature = CreateSignature(answerOnStatusJson, question.Project.PrivateKey); var data = CryptoUtils.Base64Encode(answerOnStatusJson); var request = new RestRequest(Method.POST); request.AddParameter("data", data); request.AddParameter("signature", signature); var response = new RestClient(question.StatusUrl).Execute(request); var result = response.Content; }