Exemple #1
0
        public async Task <ActionResult <ComplexQuestionDto> > GetQuestion(int id)
        {
            ComplexQuestion question = await unitOfWork.ComplexQuestions.GetComplexWithSubById(id);

            if (question == null)
            {
                return(NotFound());
            }
            AppUser user = await userManager.GetUserAsync(User);

            user = unitOfWork.AppUsers.GetUserWithOrgs(user.Id);
            if (!question.IsPublic && !(user.IsOwnerOfOrg(question.OrganizationId) || user.IsExaminerOfOrg(question.OrganizationId) || user.IsExamineeOfOrg(question.OrganizationId)))
            {
                return(Forbid());
            }
            //return Ok(question);
            return(Ok(Mapper.Map <ComplexQuestionDto>(question)));
        }
Exemple #2
0
        public async Task <ActionResult <ComplexQuestionDto> > PostComplexQuestion([FromBody] ComplexQuestionDto complexQuestionDto)
        {
            int     orgId = complexQuestionDto.OrganizationId;
            AppUser user  = await userManager.GetUserAsync(User);

            user = unitOfWork.AppUsers.GetUserWithOrgs(user.Id);
            if (!(user.IsOwnerOfOrg(orgId) || user.IsExaminerOfOrg(orgId) || user.IsAdminOfOrg(orgId)))
            {
                return(Forbid());
            }
            complexQuestionDto.Id = 0;
            ComplexQuestion comp = Mapper.Map <ComplexQuestion>(complexQuestionDto);
            await unitOfWork.ComplexQuestions.Add(comp);

            await unitOfWork.SaveAsync();

            return(Ok(Mapper.Map <ComplexQuestionDto>(comp)));
        }
Exemple #3
0
        public async Task <IActionResult> PutExamQuestions(ComplexQuestionsQuestionsDto dto)
        {
            ComplexQuestion comp = await unitOfWork.ComplexQuestions.GetById(dto.ComplexQuestionId);

            if (comp == null)
            {
                return(BadRequest());
            }
            var     orgId = comp.OrganizationId;
            AppUser user  = await userManager.GetUserAsync(User);

            user = unitOfWork.AppUsers.GetUserWithOrgs(user.Id);
            if (!(user.IsOwnerOfOrg(orgId) || user.IsExaminerOfOrg(orgId) || user.IsAdminOfOrg(orgId)))
            {
                return(Forbid());
            }
            unitOfWork.QuestionComplexQuestions.RemoveRange(await unitOfWork.QuestionComplexQuestions.Find(qcq => qcq.ComplexQuestionId == comp.Id));
            await unitOfWork.SaveAsync();

            List <QuestionComplexQuestion> questions = new List <QuestionComplexQuestion>();

            foreach (int quesId in dto.QuestionsIds)
            {
                Question q = await unitOfWork.Questions.GetById(quesId);

                if (q == null)
                {
                    return(BadRequest());
                }
                if (q.IsPublic || q.OrganizationId == comp.OrganizationId)
                {
                    questions.Add(new QuestionComplexQuestion {
                        ComplexQuestionId = comp.Id, QuestionId = quesId
                    });
                }
            }
            ;
            await unitOfWork.QuestionComplexQuestions.AddRange(questions);

            await unitOfWork.SaveAsync();

            return(Ok(Mapper.Map <ComplexQuestionDto>(await unitOfWork.ComplexQuestions.GetComplexWithSubById(dto.ComplexQuestionId))));
        }
Exemple #4
0
        public async Task <ActionResult <ComplexQuestionDto> > DeleteComplexQuestion(int id)
        {
            ComplexQuestion complexQuestion = await unitOfWork.ComplexQuestions.SingleOrDefault(cq => cq.Id == id);

            if (complexQuestion == null)
            {
                return(BadRequest());
            }
            var     orgId = complexQuestion.OrganizationId;
            AppUser user  = await userManager.GetUserAsync(User);

            user = unitOfWork.AppUsers.GetUserWithOrgs(user.Id);
            if (user == null)
            {
                return(Unauthorized());
            }
            if (!(user.IsObserverOfOrg(orgId) || user.IsExaminerOfOrg(orgId) || user.IsAdminOfOrg(orgId)))
            {
                return(Forbid());
            }
            unitOfWork.ComplexQuestions.Remove(complexQuestion);
            return(Ok(await unitOfWork.SaveAsync()));
        }
Exemple #5
0
        public async Task <IActionResult> PutExamQuestions(ExamQuestionsDto examQuestionsDto)
        {
            Exam exam = await unitOfWork.Exams.GetById(examQuestionsDto.ExamId);

            if (exam == null)
            {
                return(BadRequest());
            }
            var     orgId = exam.OrganizationId;
            AppUser user  = await userManager.GetUserAsync(User);

            user = unitOfWork.AppUsers.GetUserWithOrgs(user.Id);
            if (!(user.IsOwnerOfOrg(orgId) || user.IsExaminerOfOrg(orgId) || user.IsAdminOfOrg(orgId)))
            {
                return(Forbid());
            }
            unitOfWork.ExamQuestions.RemoveRange(await unitOfWork.ExamQuestions.Find(eq => eq.ExamId == exam.Id));
            unitOfWork.ExamComplexQuestions.RemoveRange(await unitOfWork.ExamComplexQuestions.Find(ecq => ecq.ExamId == exam.Id));
            await unitOfWork.SaveAsync();

            List <ExamQuestion>        questions        = new List <ExamQuestion>();
            List <ExamComplexQuestion> complexQuestions = new List <ExamComplexQuestion>();

            foreach (int quesId in examQuestionsDto.QuestionsIds)
            {
                Question q = await unitOfWork.Questions.GetById(quesId);

                if (q == null)
                {
                    return(BadRequest());
                }
                if (q.IsPublic || q.OrganizationId == exam.OrganizationId)
                {
                    questions.Add(new ExamQuestion {
                        ExamId = exam.Id, QuestionId = quesId
                    });
                }
            }
            ;
            foreach (int comQuesId in examQuestionsDto.ComplexQuestionsIds)
            {
                ComplexQuestion cq = await unitOfWork.ComplexQuestions.GetById(comQuesId);

                if (cq == null)
                {
                    return(BadRequest());
                }
                if (cq.IsPublic || cq.OrganizationId == exam.OrganizationId)
                {
                    complexQuestions.Add(new ExamComplexQuestion {
                        ExamId = exam.Id, ComplexQuestionId = comQuesId
                    });
                }
            }
            ;
            await unitOfWork.ExamQuestions.AddRange(questions);

            await unitOfWork.ExamComplexQuestions.AddRange(complexQuestions);

            await unitOfWork.SaveAsync();

            return(Ok(Mapper.Map <ExamDto>(await unitOfWork.Exams.GetExamWithQuestions(examQuestionsDto.ExamId))));
        }