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