public async Task <IActionResult> CreateJobDefinition(int projectId, CreateJobDefinitionDto newJobDefinition)
        {
            _logger.LogInformation("Creating job definition in project {projectId}. Request body: {@newJobDefinition}", projectId, newJobDefinition);

            try
            {
                var newJobDefinitionResponse = _mapper.Map <JobDefinitionDto>(newJobDefinition);
                newJobDefinitionResponse.ProjectId = projectId;
                newJobDefinitionResponse.Id        = await _jobDefinitionService.AddJobDefinition(projectId,
                                                                                                  newJobDefinition.Name,
                                                                                                  newJobDefinition.IsDeletion);

                return(CreatedAtRoute("GetJobDefinitionById", new
                {
                    projectId,
                    jobId = newJobDefinitionResponse.Id
                }, newJobDefinitionResponse));
            }
            catch (DuplicateJobDefinitionException dupEx)
            {
                _logger.LogWarning(dupEx, "Duplicate job definition name");
                return(BadRequest(dupEx.Message));
            }
            catch (ProjectNotFoundException projEx)
            {
                _logger.LogWarning(projEx, "Project not found");
                return(BadRequest(projEx.Message));
            }
            catch (MultipleDeletionJobException jobEx)
            {
                _logger.LogWarning(jobEx, "A deletion job definition is already exist. A project should only contain one deletion job definition.");
                return(BadRequest(jobEx.Message));
            }
        }