public ActionResult Save(Quiz quiz, QuizBlock block, QuizEditHistory latestChange) { var errorMessages = ValidateQuiz(quiz, block); if (errorMessages != null) { var errorMessage = string.Format("Invalid data: {0}", string.Concat(errorMessages)); return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, errorMessage)); } var now = DateTime.UtcNow; if (quiz.Id != 0) { quiz.QuizStateId = quiz.QuizState.Id; quiz.QuizState = null; block.Quiz = null; if (quiz.UserGroup != null) { quiz.GroupId = quiz.UserGroup.Id; quiz.UserGroup = null; } latestChange.LastChangeDate = now; latestChange.User = null; _repository.Update <QuizEditHistory>(latestChange); _repository.Update <Quiz>(quiz); _repository.Update <QuizBlock>(block); } else { quiz.QuizStateId = quiz.QuizState.Id; quiz.QuizState = null; _repository.Insert <Quiz>(quiz); block.TopicId = 1; block.QuizId = quiz.Id; _repository.Insert <QuizBlock>(block); _repository.Insert <QuizVariant>(new QuizVariant() { QuizId = quiz.Id }); latestChange = LockQuiz(quiz.Id, User.Identity.GetUserId(), now); } quiz.QuizState = _repository.GetSingle <QuizState>(q => q.Id == quiz.QuizStateId); quiz.UserGroup = _repository.GetSingle <UserGroup>(g => g.Id == quiz.GroupId); var minQuiz = GetQuizForSerialization(quiz); var minQuizBlock = GetQuizBlockForSerialization(block); var minLatestChange = GetQuizEditHistoryForSerialization(latestChange); var result = new { quiz = minQuiz, block = minQuizBlock, latestChange = minLatestChange }; return(Json(result)); }
private QuizEditHistory LockQuiz(int quizId, string userId, DateTime date) { var latestEdit = new QuizEditHistory() { QuizId = quizId, UserId = userId, StartDate = date, LastChangeDate = date }; _repository.Insert <QuizEditHistory>(latestEdit); return(latestEdit); }
private object GetQuizEditHistoryForSerialization(QuizEditHistory history) { object user = null; if (history.User != null) { user = new { UserName = history.User.UserName, }; } var minQuizEditHistory = new { Id = history.Id, UserId = history.UserId, QuizId = history.QuizId, StartDate = history.StartDate.ToString("yyyy-MM-ddTHH:mm:ss"), LastChangeDate = history.LastChangeDate.ToString("yyyy-MM-ddTHH:mm:ss"), EndLockDate = history.LastChangeDate.AddMinutes(QuizLockDuration).ToString("dd.MM.yyyy HH:mm:ss"), User = user }; return(minQuizEditHistory); }