コード例 #1
0
        private DemoLab.Data.Access.ExerciseManagement.CandidateTask CreateCandidateTask(
            CandidateTaskInfo candidateTaskInfo)
        {
            var result = new DemoLab.Data.Access.ExerciseManagement.CandidateTask
            {
                CodeTemplate  = candidateTaskInfo.CodeTemplate,
                Description   = candidateTaskInfo.Description,
                MaximumScore  = candidateTaskInfo.MaximumScore,
                TimeSeconds   = candidateTaskInfo.TimeSeconds,
                Name          = candidateTaskInfo.Name,
                Subject       = candidateTaskInfo.Subject,
                IsSoftDeleted = false
            };

            if (candidateTaskInfo.Tips != null)
            {
                result.Tips = candidateTaskInfo.Tips.Select(
                    tipText => new CandidateTaskTip {
                    Text = tipText
                }).ToList();
            }

            SetTestClassAndMethod(result, candidateTaskInfo);

            return(result);
        }
コード例 #2
0
        public async Task <IHttpActionResult> UpdateCandidateTask([FromBody] CandidateTaskInfo candidateTaskInfo)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            try
            {
                await _exerciseService.UpdateCandidateTaskAsync(candidateTaskInfo);

                return(StatusCode(HttpStatusCode.NoContent));
            }
            catch (TaskNotFoundException)
            {
                return(BadRequest($"Task with {nameof(CandidateTaskInfo.Id)} = {candidateTaskInfo.Id} not found"));
            }
            catch (TestClassInfoNotFoundException)
            {
                return(BadRequest($"Invalid {nameof(CandidateTaskInfo.TestClassName)}"));
            }
            catch (Exception)
            {
                return(InternalServerError());
            }
        }
コード例 #3
0
        public async Task <int> AddCandidateTaskAsync(CandidateTaskInfo candidateTaskInfo)
        {
            if (candidateTaskInfo == null)
            {
                throw new ArgumentNullException(nameof(candidateTaskInfo));
            }

            var candidateTask = CreateCandidateTask(candidateTaskInfo);

            _exerciseContext.CandidateTasks.Add(candidateTask);
            await _exerciseContext.SaveChangesAsync().ConfigureAwait(false);

            return(candidateTask.Id);
        }
コード例 #4
0
        private void SetTestClassAndMethod(
            DemoLab.Data.Access.ExerciseManagement.CandidateTask candidateTask,
            CandidateTaskInfo candidateTaskInfo)
        {
            var testClass = _assemblyContext.TestClassInfo.FirstOrDefault(classInfo =>
                                                                          classInfo.Name.Equals(candidateTaskInfo.TestClassName, StringComparison.Ordinal));

            candidateTask.TestClassId = testClass?.Id ?? throw new TestClassInfoNotFoundException();

            if (!string.IsNullOrWhiteSpace(candidateTaskInfo.TestMethodName))
            {
                var testMethod = testClass.TestMethods.FirstOrDefault(method =>
                                                                      method.Name.Equals(candidateTaskInfo.TestMethodName, StringComparison.Ordinal));
                candidateTask.TestMethodId = testMethod?.Id;
            }
        }
コード例 #5
0
        public Task UpdateCandidateTaskAsync(CandidateTaskInfo candidateTaskInfo)
        {
            if (candidateTaskInfo == null)
            {
                throw new ArgumentNullException(nameof(candidateTaskInfo));
            }

            var candidateTask = _exerciseContext.CandidateTasks.FirstOrDefault(
                task => task.Id == candidateTaskInfo.Id);

            if (candidateTask == null)
            {
                throw new TaskNotFoundException($"Task with id = {candidateTaskInfo.Id} not found.");
            }

            UpdateCandidateTask(candidateTask, candidateTaskInfo);
            return(_exerciseContext.SaveChangesAsync());
        }
コード例 #6
0
        private void UpdateCandidateTask(
            DemoLab.Data.Access.ExerciseManagement.CandidateTask candidateTask,
            CandidateTaskInfo candidateTaskInfo)
        {
            candidateTask.CodeTemplate = candidateTaskInfo.CodeTemplate;
            candidateTask.Description  = candidateTaskInfo.Description;
            candidateTask.MaximumScore = candidateTaskInfo.MaximumScore;
            candidateTask.TimeSeconds  = candidateTaskInfo.TimeSeconds;
            candidateTask.Name         = candidateTaskInfo.Name;
            candidateTask.Subject      = candidateTaskInfo.Subject;

            if (candidateTaskInfo.Tips != null)
            {
                UpdateTips(candidateTask.Tips, candidateTaskInfo.Tips.ToArray());
            }
            else
            {
                UpdateTips(candidateTask.Tips);
            }

            SetTestClassAndMethod(candidateTask, candidateTaskInfo);
        }
コード例 #7
0
        public async Task <IHttpActionResult> CreateCandidateTask([FromBody] CandidateTaskInfo candidateTaskInfo)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            try
            {
                int createdTaskId = await _exerciseService.AddCandidateTaskAsync(candidateTaskInfo);

                var actionLink = Url.Link(nameof(GetCandidateTaskInfo), new { id = createdTaskId });
                return(Created(actionLink, new { Id = createdTaskId }));
            }
            catch (TestClassInfoNotFoundException)
            {
                return(BadRequest($"Invalid {nameof(CandidateTaskInfo.TestClassName)}"));
            }
            catch (Exception)
            {
                return(InternalServerError());
            }
        }