// GET
        public IActionResult Description(Guid id)
        {
            var problem = _problemService.Get(id);

            Guid.TryParse(User.FindFirstValue(ClaimTypes.NameIdentifier), out var userId);

            switch (problem.Type)
            {
            case ProblemTypes.CodeCorrector:
            {
                var viewModel = BuildDescCodeCorrectorViewModel(id, problem, userId);
                return(View(viewModel));
            }

            case ProblemTypes.RestoreData:
            {
                var viewModel = BuildRestoreDataViewModel(id, problem, userId);
                var descRestoreDataViewModel = new DescRestoreDataViewModel();
                var generator = _generators[viewModel.GeneratorType];

                var generatedData = generator.CreateData();

                if (problem is RestoreData data && viewModel is DescRestoreDataViewModel temp)
                {
                    if (data.AdditionalData.IsInput)
                    {
                        temp.InputData = generatedData;
                    }
                    else
                    {
                        var output = _runner.Run(temp.SourceCode, generatedData).Trim('\n', '\r');
                        temp.OutputData = output;
                    }
                    descRestoreDataViewModel = temp;
                }

                return(View(descRestoreDataViewModel));
            }

            case ProblemTypes.BlackBox:
            {
                var viewModel = BuildBlackBoxViewModel(id, problem, userId);
                return(View(viewModel));
            }

            case ProblemTypes.TraceTable:
            {
                var viewModel = BuildTraceTableViewModel(id, problem, userId);
                return(View(viewModel));
            }
            }

            return(View("Error", new ErrorViewModel {
                RequestId = "Такого типа задания не нашлось. УПССССС"
            }));
        }
Example #2
0
        public IActionResult Check(DescRestoreDataViewModel viewModel)
        {
            try
            {
                var problemId = viewModel.Id;
                Guid.TryParse(User.FindFirstValue(ClaimTypes.NameIdentifier), out var userId);
                var result = TestResults.WA;

                var input       = viewModel.InputData;
                var outPutRight = _runner.Run(viewModel.SourceCode, input).Trim('\n', '\r');

                var outPutUser = viewModel.OutputData;

                if (outPutRight == outPutUser)
                {
                    result = TestResults.Ok;
                }
                var solution = new Solution
                {
                    Result    = result,
                    UserId    = userId,
                    Input     = input,
                    ProblemId = problemId,
                    SendTime  = DateTime.Now
                };
                _solutionsService.Save(solution);

                return(RedirectToAction("Description", "Problems", new { viewModel.Id }));
            }
            catch (Exception e)
            {
                return(View("Error", new ErrorViewModel()
                {
                    RequestId = e.Message
                }));
            }
        }