//updaUserState: // private void UpdateUserState(HomeworkState state) { RemoveUserState(state.UserId, state.HomeworkId); //add new state _homeworkStateDb.DbSet.Add(state); _homeworkStateDb.SaveChanges(); }
public void UpdateMark(ref HomeworkState state, int questionId, string userAnswer) { Question question = _questionDb.GetQuestionById(questionId); int questionSign = (question.correctAnswerNum == userAnswer)? 1 : -1; // if the answer right add the level number to mark other sub level number from mark state.Mark += questionSign * question.level; }
public ActionResult HomeWorkMaterial(int homeworkId, string a) { ViewBag.homeworkId = homeworkId; int userId = _userDb.GetUserIdByUsername(User.Identity.Name); HomeworkState state = GetUserState(userId, homeworkId); state.QuestionNumber = 0; UpdateUserState(state); return(RedirectToAction("HomeWorkLastStage", new{ state.HomeworkId })); }
//GET: /HomeWorks/HomeWorkMaterial // public ActionResult HomeWorkMaterial(int homeworkId) { ViewBag.homeworkId = homeworkId; int userId = _userDb.GetUserIdByUsername(User.Identity.Name); HomeworkState state = GetUserState(userId, homeworkId); Material material = _algorithm.GetMatrial(state.SubjectId); ViewBag.material = material; return(View()); }
public ActionResult HomeworkFirstStage(int homeworkId, int questionId, string userAnswer) { ViewBag.homeworkId = homeworkId; int userId = _userDb.GetUserIdByUsername(User.Identity.Name); HomeworkState state = GetUserState(userId, homeworkId); _algorithm.UpdateMark(ref state, questionId, userAnswer); UpdateUserState(state); return(RedirectToAction("HomeworkFirstStage", new{ homeworkId })); }
public Question GetNextQuestion(HomeworkState state, int userId) { List <int> solvedQuestionIdList = GetSolvedQuestionIdList(state.SubjectId, userId); List <Question> questionList = _questionDb.GetQuestionListBySubjectId(state.SubjectId); List <Question> unSolvedQuestionList = questionList.Where(question => !solvedQuestionIdList.Contains(question.id)).ToList(); if (!unSolvedQuestionList.Any()) { throw new UnSolvedQuestionNotFoundException(); } return(unSolvedQuestionList.First()); }
//GET: HomeworkFirstStage: //when we go down in tree subject we will be in FirstStage //otherWise we are in LastStage public ActionResult HomeworkFirstStage(int homeworkId) { ViewBag.homeworkId = homeworkId; int userId = _userDb.GetUserIdByUsername(User.Identity.Name); HomeworkState state = GetUserState(userId, homeworkId); HomeworkState nextState = new HomeworkState(GetUserState(userId, homeworkId)); //update mark,and check if we need to go to children subject if (_algorithm.IsGoDown(ref nextState)) { List <int> subjectChildrenIds = _subjectDb.GetChildren(state.SubjectId); try { nextState.SubjectId = GetAvailableSubject(subjectChildrenIds); nextState.Mark = 0; nextState.QuestionNumber = 0; } catch (SubjectNotFoundException) { return(RedirectToAction("HomeworkMaterial", new { state.HomeworkId })); } } else { //check if we Finish the current Level, and go Up. if (state.QuestionNumber >= _algorithm.MaxNumberOfStageQuestion) { //if we get to the base subject mean we finish Exam if (state.SubjectId == state.BaseSubjectId) { return(RedirectToAction("PreSolveHomeWork", new{ baseSubjectIndex = state.IndexOfBaseSubject + 1, homeWorkId = state.HomeworkId })); } else { nextState.SubjectId = _subjectDb.GetSubjectParentId(state.SubjectId); nextState.Mark = -100; //TODO: need to change that we fail UpdateUserState(nextState); return(RedirectToAction("HomeworkFirstStage", new { state.HomeworkId })); } } } //continue with the next state. ViewBag.question = _algorithm.GetNextQuestion(nextState, userId); nextState.QuestionNumber++; UpdateUserState(nextState); return(View()); }
//HomeWorkLastStage //in LastStage: we give questions with solution public ActionResult HomeWorkLastStage(int homeworkId) { ViewBag.homeworkId = homeworkId; int userId = _userDb.GetUserIdByUsername(User.Identity.Name); HomeworkState state = GetUserState(userId, homeworkId); HomeworkState nextState = new HomeworkState(GetUserState(userId, homeworkId)); if (_algorithm.MaxNumberOfStageQuestion <= state.QuestionNumber) { state.Mark = 0; UpdateUserState(state); return(RedirectToAction("HomeWorkFirstStage", new{ homeworkId })); } ViewBag.question = _algorithm.GetNextQuestion(state, userId); nextState.QuestionNumber++; UpdateUserState(nextState); return(View()); }
public ActionResult SolveHomework(int baseSubjectIndex, int subjectId, int homeworkId) { int userId = _userDb.GetUserIdByUsername(User.Identity.Name); if (IsHomeworkSolved(homeworkId, userId)) { return(RedirectToAction("HomeworkSolved", new { homeworkId })); } //send First parameters to start homeWork HomeworkState newState = new HomeworkState(userId, baseSubjectIndex, subjectId, subjectId, 0, 0, homeworkId, 0); //if state exist ,update else create if (IsUserStateExist(newState.UserId, newState.HomeworkId)) { UpdateUserState(newState); } else { CreateUserState(newState); } return(RedirectToAction("HomeworkFirstStage", new { homeworkId })); }
//CreateUserState // private void CreateUserState(HomeworkState state) { _homeworkStateDb.DbSet.Add(state); _homeworkStateDb.SaveChanges(); }
public bool IsGoDown(ref HomeworkState state) // TODO: why ref? you're not changing the variable state. { return(state.Mark < -3); }