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))); }
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))); }
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)))); }
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())); }
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)))); }