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)); } }