Ejemplo n.º 1
0
        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");
            }
        }
Ejemplo n.º 2
0
        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));
                }
            }
        }