public async Task <IActionResult> Run([FromBody] ScriptRunVm model) { GameData.Assignment assignment = _gameData.Threads.SingleOrDefault(t => t.AssignmentId == model.Script.AssignmentId)?.Assignment; if (model.Script.AssignmentId == 0) { assignment = new GameData.Assignment { Solution = null }; } else if (assignment == null) { return(NotFound()); } string[] args = model.Arguments.ToArray(); for (int i = 0; i < args.Length; i++) { if (assignment.Arguments.ElementAt(i).Type == "string") { args[i] = $"\"{args[i]}\""; } } ScriptRunResultVm results = await _nodeServices.InvokeAsync <ScriptRunResultVm>( "Scripts/Run.js", model.Script.Text, assignment.Solution, args ); return(Json(results)); }
public IActionResult Assignment(int id) { GameData.Assignment assignment = _gameData.Threads.SingleOrDefault(t => t.AssignmentId == id)?.Assignment; if (assignment == null) { return(NotFound()); } IEnumerable <Script> scripts = _db.Scripts.Where( s => s.UserId == _userManager.GetUserId(User) && s.AssignmentId == id ); return(Json(_mapper.Map <IEnumerable <Script>, IEnumerable <ScriptVm> >(scripts))); }
public async Task <IActionResult> Verify([FromBody] ScriptRunVm model) { GameData.Assignment assignment = _gameData.Threads.SingleOrDefault(t => t.AssignmentId == model.Script.AssignmentId)?.Assignment; Script script = await _db.Scripts.SingleOrDefaultAsync(s => s.Id == model.Script.Id); string userId = _userManager.GetUserId(User); if (assignment == null || script == null) { return(NotFound()); } if (script.UserId != userId) { return(Forbid()); } // TODO: Add check for precursors ScriptVerificationResultVm results = await _nodeServices.InvokeAsync <ScriptVerificationResultVm>( "Scripts/Verify.js", model.Script.Text, assignment.Solution, assignment.Tests ); if (results.Completed == results.Tests) { AssignmentCompletion completion = _db.AssignmentCompletions.SingleOrDefault( ac => ac.UserId == userId && ac.AssignmentId == assignment.Id ); if (completion == null) { _db.AssignmentCompletions.Add(new AssignmentCompletion { UserId = userId, AssignmentId = assignment.Id }); } script.Text = model.Script.Text; script.VerifiedOn = DateTime.Now; script.ModifiedOn = DateTime.Now; script.Score = results.Score; _db.Scripts.Update(script); await _db.SaveChangesAsync(); results.Script = _mapper.Map <Script, ScriptVm>(script); } return(Json(results)); }
public async Task <IActionResult> Create([FromBody] ScriptVm scriptVm) { GameData.Assignment assignment = _gameData.Threads.SingleOrDefault(t => t.AssignmentId == scriptVm.AssignmentId)?.Assignment; if (assignment == null) { return(NotFound()); } Script script = new Script { UserId = _userManager.GetUserId(User), AssignmentId = assignment.Id, ModifiedOn = DateTime.Now, Name = scriptVm.Name, Text = assignment.Template }; await _db.Scripts.AddAsync(script); await _db.SaveChangesAsync(); return(Json(_mapper.Map <Script, ScriptVm>(script))); }