public async Task <QuizQuestion> NextQuestionInList() { RaiseIfNotLoggedIn(); RaiseIfTimeOut(); var previousQuestionList = sessionUtils.GetString(HttpContext, QuizPreviousQuestionList); var list = previousQuestionList == null ? new List <string>() : JsonConvert.DeserializeObject <List <string> >(previousQuestionList); var question = await quizService.GetRandomQuestionBaseOnPreviousQuestionList(list); list.Add(question.Id); sessionUtils.SetString(HttpContext, QuizPreviousQuestionList, JsonConvert.SerializeObject(list)); sessionUtils.SetString(HttpContext, CurrQuestionId, question.Id); return(question); }
public async Task <OjResult> SubmitCode([FromBody] OjSubmission submission) { async Task <OjResult> execute(UserInfo userInfo) { const string ojStatus = "oj_status"; const string pending = "pending"; const string over = "over"; var status = sessionUtils.GetString(HttpContext, ojStatus); switch (status) { case "pending": return(new OjResult { Pending = true, Pass = false, Failed = false }); case null: case "over": //"over" or null means this submit should be a new request var t = ojService.PendResult(userInfo.Id, submission.OjQuestionId, submission.Code); sessionUtils.SetString(HttpContext, ojStatus, pending); var res = await t; if (res.Pass) { await ojService.SaveSuccess(userInfo.Id, submission.OjQuestionId); } sessionUtils.SetString(HttpContext, ojStatus, over); return(res); default: throw new NonUserException("How could this happen ???"); } } var userInfo = sessionUtils.GetCachedUserInfo(HttpContext); if (userInfo == null) { throw new UserException("用户未登录!"); } var ojResult = await execute(userInfo); if (ojResult.Pending) { return(ojResult); } if (ojResult.Pass) { await ojService.AddSubmitRecord(userInfo.Id, submission.OjQuestionId, submission.Code, "Pass All Test Cases"); } else if (ojResult.Failed) { await ojService.AddSubmitRecord(userInfo.Id, submission.OjQuestionId, submission.Code, "Compilation Failed"); } else if (!ojResult.Failed) { await ojService.AddSubmitRecord(userInfo.Id, submission.OjQuestionId, submission.Code, "Can't Pass All Test Cases"); } return(ojResult); }