public async Task <IActionResult> SubmitTaskSolution([FromBody] TaskSolutionModel model) { var userId = User.FindFirstValue(ClaimTypes.NameIdentifier); var result = await _taskService.SubmitTaskSolution(model, userId); return(Ok(result)); }
public async Task <TaskSolutionResult> SubmitTaskSolution(TaskSolutionModel model, string currentUserId) { var taskSolutionResult = await ValidateTaskSolution(model); if (taskSolutionResult.IsSuccess) { await SaveTaskSolution(model, currentUserId); } return(taskSolutionResult); }
private async System.Threading.Tasks.Task SaveTaskSolution(TaskSolutionModel model, string currentUserId) { if (_context.UserTaskSolutions.Any(x => x.TaskId == model.TaskId && x.UserId == currentUserId)) { return; } var userTaskSolution = new UserTaskSolution { TaskId = model.TaskId, Solution = model.Solution, UserId = currentUserId }; _context.UserTaskSolutions.Add(userTaskSolution); await _context.SaveChangesAsync(); }
private async Task <TaskSolutionResult> ValidateTaskSolution(TaskSolutionModel taskSolution) { var task = _context.Tasks.First(x => x.Id == taskSolution.TaskId); var request = new ExecuteCodeRequest { Program = taskSolution.Solution, Input = task.Input }; var response = await _rextesterApiClient.ExecuteCode(request); return(new TaskSolutionResult { IsSuccess = response.IsSuccess && task.Output == response.Result.Trim(), Error = response.Errors }); }