public static ShowProblemViewModel GetShowProblemViewModel(Problem problem) { var spvm = new ShowProblemViewModel(); spvm.Author = problem.Author.UserName; spvm.Name = problem.Name; spvm.Text = problem.Text; spvm.Id = problem.Id; spvm.Category = problem.Category.Name; spvm.IsBlocked = problem.IsBlocked; var sb = new StringBuilder(); foreach (var tag in problem.Tags) { sb.Append(tag.Name); sb.Append(','); } spvm.TagsString = sb.ToString(); sb.Clear(); foreach (var ans in problem.CorrectAnswers) { sb.Append(ans.Text); sb.Append(';'); } sb.Remove(sb.Length - 1, 1); spvm.Answers = sb.ToString(); spvm.Comments = new List<CommentViewModel>(); foreach (var comment in problem.Comments) { CommentViewModel com = new CommentViewModel() { AddingTime = comment.dateTime, AuthorName = comment.User.UserName, ProblemId = problem.Id, Text = comment.Text }; spvm.Comments.Add(com); } spvm.Likes = problem.Likes.Count; spvm.Dislikes = problem.Dislikes.Count; return spvm; }
public ActionResult Show(ShowProblemViewModel problemView) { if (problemView.Author == User.Identity.Name) { problemView.Answers = ""; return View(problemView); } Problem problem = problemRepository.GetByID(problemView.Id); var pvm = GlobalHelper.GetShowProblemViewModel(problem); pvm.IsSolved = false; if (ModelState.IsValidField("Answers")) if (GlobalHelper.AreEqual(GetAnswersFromString(problemView.Answers, problem), problem.CorrectAnswers)) { userSolvedRepository.Insert(new UserSolvedProblem { UserId = UserManager.FindByName(User.Identity.Name).Id, ProblemId = problem.Id }); var user = UserManager.FindByName(User.Identity.Name); int attempts= (from attempt in user.AttemptedProblems where attempt.User==user select attempt).Count(); double rating = 100; for (int i = 0; i < attempts; i++) rating *= 0.95; user.Rating += (int)rating; UserManager.Update(user); pvm.IsSolved = true; } else { userAttemptedRepository.Insert(new UserAttemptedProblem { UserId = UserManager.FindByName(User.Identity.Name).Id, ProblemId = problem.Id }); } var md = new Markdown(); problem.Text = md.Transform(problem.Text); return View(pvm); }