public async Task <ActionResult> ReJudge(int id) { using (var tran = TransactionInRequest.BeginTransaction()) { var creator = await _db.Questions .Where(x => x.Id == id) .Select(x => x.CreateUserId) .FirstAsync(); if (!User.IsUserOrRole(creator, SystemRoles.QuestionAdmin)) { return(RedirectToAction("Details", new { id = id }) .WithError("只有创建者才能重新评测该题目。")); } await _db.Solutions .Where(x => x.QuestionId == id) .Select(x => x.Id) .ForEachAsync(x => SolutionHub.PushChange(x, SolutionState.Queuing, 0, 0.0f)); await _db.Solutions .Where(x => x.QuestionId == id) .UpdateAsync(x => new Solution { State = SolutionState.Queuing }); await _db.SolutionLocks .Where(x => x.Solution.QuestionId == id) .DeleteAsync(); var solutions = _db.Solutions .Where(x => x.QuestionId == id) .ProjectTo <SolutionPushModel>(); await solutions.ForEachAsync(JudgeHub.Judge); tran.Complete(); } return(RedirectToAction("Details", new { id = id }) .WithSuccess("该题目重新评测已经开始。")); }
public async Task <ActionResult> ReJudge(int id) { // check access. var acl = await _db.Solutions .Where(x => x.Id == id) .Select(x => new { AuthorId = x.CreateUserId, QuestionCreatorId = x.Question.CreateUserId }) .FirstAsync(); if (!User.IsUserOrRole(acl.QuestionCreatorId, SystemRoles.QuestionAdmin)) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } // act. await _db.Solutions .Where(x => x.Id == id) .UpdateAsync(s => new Solution { State = SolutionState.Queuing }); await _db.SolutionLocks .Where(x => x.SolutionId == id) .DeleteAsync(); var judgeModel = await _db.Solutions .ProjectTo <SolutionPushModel>() .FirstOrDefaultAsync(x => x.Id == id); SolutionHub.PushChange(judgeModel.Id, SolutionState.Queuing, 0, 0.0f); JudgeHub.Judge(judgeModel); return(new EmptyResult()); }