public Question PostQuestionFromDraft(QuestionCreateFromDraftRequestDTO q, int accountId) { DraftQuestion question = _questionServices.GetDraftQuestion(q.QuestionDraftId); //Validations if (accountId != question.AccountId) { throw new InvalidAccountException("User cannot edit another user's question"); } if (q.Text == null || q.Text.Length < _questionCharMin || q.Text.Length > _questionCharMax) { throw new InvalidQuestionLengthException("Question must be between " + _questionCharMin + " and " + _questionCharMax + " characters."); } //Create question after validations based on type //Then post question and return posted question Question questionToPost = question; switch (q.QuestionType) { case _schoolQuestion: //Validate Ids? questionToPost = new SchoolQuestion() { AccountId = accountId, SchoolId = q.SchoolId, Text = q.Text, ExpNeededToAnswer = q.ExpNeededToAnswer }; _questionServices.DeleteQuestion(q.QuestionDraftId); return(_questionServices.UpdateQuestion(questionToPost)); case _departmentQuestion: //Validate Ids? questionToPost = new DepartmentQuestion() { AccountId = accountId, SchoolDepartmentId = q.DepartmentId, Text = q.Text, ExpNeededToAnswer = q.ExpNeededToAnswer }; // Delete question then return posted question _questionServices.DeleteQuestion(q.QuestionDraftId); return(_questionServices.PostQuestion(questionToPost)); case _courseQuestion: questionToPost = new CourseQuestion() { AccountId = accountId, CourseId = q.CourseId, Text = q.Text, ExpNeededToAnswer = q.ExpNeededToAnswer }; _questionServices.DeleteQuestion(q.QuestionDraftId); return(_questionServices.PostQuestion(questionToPost)); default: throw new ArgumentException("Invalid Question type"); } }
public IHttpActionResult PostQuestionFromDraft([FromBody] QuestionCreateFromDraftRequestDTO questionDTO) { List <string> requiredClaims = new List <string>() { }; authUserId = AuthorizeUser(requiredClaims); if (authUserId == 0) { return(Unauthorized()); } using (var _db = new DatabaseContext()) { Question question; try { DiscussionForumManager discussionManager = new DiscussionForumManager(_db); question = discussionManager.PostQuestionFromDraft(questionDTO, authUserId); _db.SaveChanges(); return(Content(HttpStatusCode.OK, "Draft was posted successfully from draft.")); } catch (InvalidAccountException ex) { return(Content(HttpStatusCode.Unauthorized, ex.Message)); } catch (InvalidQuestionLengthException ex) { return(Content(HttpStatusCode.BadRequest, ex.Message)); } catch (Exception ex) { return(Content(HttpStatusCode.InternalServerError, ex.Message)); } } }