Пример #1
0
        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));
        }
Пример #2
0
        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));
        }