public async Task <IActionResult> CreateProjectDataModelProperty(int projectId, int modelId, CreateProjectDataModelPropertyDto newProperty) { _logger.LogRequest("Creating property for data model {modelId} in project {projectId}. Request body: {@newProperty}", modelId, projectId, newProperty); try { var propertyId = await _projectDataModelService.AddDataModelProperty(modelId, newProperty.Name, newProperty.Label, newProperty.DataType, newProperty.ControlType, newProperty.IsRequired, newProperty.RelatedProjectDataModelId, newProperty.RelationalType, newProperty.IsManaged, newProperty.Sequence); var property = await _projectDataModelService.GetProjectDataModelPropertyByName(modelId, newProperty.Name); var result = _mapper.Map <ProjectDataModelPropertyDto>(property); _logger.LogResponse("Property in data model {modelId} in project {projectId} created. Response body: {@result}", modelId, projectId, result); return(CreatedAtRoute("GetProjectDataModelPropertyById", new { projectId, modelId, propertyId }, result)); } catch (DuplicateProjectDataModelPropertyException dupEx) { _logger.LogWarning(dupEx, "Duplicate property name"); return(BadRequest(dupEx.Message)); } catch (ProjectDataModelNotFoundException modEx) { _logger.LogWarning(modEx, "Project data model not found"); return(BadRequest(modEx.Message)); } }