public void Create(AlternativeManager alternativeManager, SendQuestionManager sendQuestionManager, SubscribeManager subscribeManager, Question question, Course course, List <Alternative> alternatives) { Transaction(() => { if (course == null) { throw new QuestionarException("O curso selecionado é inválido."); } if (string.IsNullOrEmpty(question.Description)) { throw new QuestionarException("Descrição é um campo obrigatório."); } question.Course = course; question.Order = Order(question); Repository.Create(question); alternativeManager.Create(alternatives, question); var isTheFirst = !Repository.Query().Any(c => c.Id != question.Id && c.Course.Id == course.Id); if (isTheFirst) { SendFirstQuestion(subscribeManager, sendQuestionManager, course, question); question.Sent = true; question.SentDate = DateTime.Now; } }); }
public void Subscribe(User user, Course course, SendQuestionManager sendQuestionManager, QuestionManager _questionManager) { if (user.IsTeacher) { throw new QuestionarException("Apenas alunos podem se cadastrar em disciplinas."); } if (!user.Active) { throw new QuestionarException("Usuários inativos não podem se cadastrar."); } if (Repository.Query().Any(c => c.Student.Id == user.Id && c.Course.Id == course.Id)) { throw new QuestionarException("Usuário já inscrito nesta disciplina."); } Transaction(() => { var subscription = new Subscription { Course = course, Entered = DateTime.Now, Student = user }; Repository.Create(subscription); sendQuestionManager.SendQuestion(user, course, _questionManager); }); }
public void SendFirstQuestion(SubscribeManager subscribeManager, SendQuestionManager sendQuestionManager, Course course, Question question) { var users = subscribeManager.UsersByCourse(course); users.ForEach(user => { sendQuestionManager.SendQuestion(user, course, question); }); }
public bool Reply(int idAlternative, User student, AlternativeManager alternativeManager, SendQuestionManager sendQuestionManager) { var alternative = alternativeManager.Repository.GetById(idAlternative); if (alternative == null) { throw new QuestionarException("Alternativa inválida"); } Transaction(() => { var answer = new Answer() { Alternative = alternative, Student = student, Created = DateTime.Now }; Repository.Create(answer); sendQuestionManager.AnswerQuestion(student, alternative.Question); }); return(alternative.IsCorrect); }