public async Task <IActionResult> AssignDatasetSchema([FromBody] AssignDatasetSchemaUpdateViewModel viewModel, [FromRoute] string specificationId) { Guard.ArgumentNotNull(viewModel.Name, nameof(viewModel.Name)); Guard.ArgumentNotNull(viewModel.DatasetDefinitionId, nameof(viewModel.DatasetDefinitionId)); Guard.ArgumentNotNull(viewModel.Description, nameof(viewModel.Description)); ApiResponse <SpecificationSummary> specificationResponse = await _specificationsApiClient.GetSpecificationSummaryById(specificationId); if (specificationResponse == null || specificationResponse.StatusCode == HttpStatusCode.NotFound) { return(new NotFoundObjectResult( $"Unable to get specification response. Specification Id value = {specificationId}")); } if (specificationResponse.StatusCode == HttpStatusCode.OK && specificationResponse.Content == null) { throw new InvalidOperationException( $"Unable to retrieve specification model from the response. Specification Id value = {specificationId}"); } bool isAuthorizedToEdit = await _authorizationHelper.DoesUserHavePermission(User, specificationResponse.Content.GetSpecificationId(), SpecificationActionTypes.CanEditSpecification); if (!isAuthorizedToEdit) { return(new ForbidResult()); } if (!string.IsNullOrWhiteSpace(viewModel.Name)) { ApiResponse <DefinitionSpecificationRelationship> existingRelationshipResponse = await _datasetApiClient.GetRelationshipBySpecificationIdAndName(specificationId, viewModel.Name); if (existingRelationshipResponse.StatusCode != HttpStatusCode.NotFound) { this.ModelState.AddModelError( $"{nameof(AssignDatasetSchemaViewModel)}.{nameof(AssignDatasetSchemaViewModel.Name)}", ValidationMessages.RelationshipNameAlreadyExists); } } if (!ModelState.IsValid) { if (specificationResponse.StatusCode == HttpStatusCode.OK) { SpecificationSummary specContent = specificationResponse.Content; ApiResponse <IEnumerable <DatasetDefinition> > datasetResponse = await _datasetApiClient.GetDatasetDefinitions(); if (datasetResponse == null || datasetResponse.StatusCode == HttpStatusCode.NotFound) { return(new NotFoundObjectResult(ErrorMessages.DatasetDefinitionNotFoundInDatasetService)); } if (datasetResponse.StatusCode == HttpStatusCode.OK) { IEnumerable <DatasetDefinition> datasetDefinitionList = datasetResponse.Content; if (datasetDefinitionList == null) { throw new InvalidOperationException( $"Unable to retrieve Dataset definition from the response. Specification Id value = {specificationId}"); } } else { return(new StatusCodeResult(500)); } } } CreateDefinitionSpecificationRelationshipModel datasetSchema = new CreateDefinitionSpecificationRelationshipModel { Name = viewModel.Name, SpecificationId = specificationId, DatasetDefinitionId = viewModel.DatasetDefinitionId, Description = viewModel.Description, IsSetAsProviderData = viewModel.IsSetAsProviderData, UsedInDataAggregations = false }; ApiResponse <DefinitionSpecificationRelationship> newAssignDatasetResponse = await _datasetApiClient.CreateRelationship(datasetSchema); if (newAssignDatasetResponse?.StatusCode == HttpStatusCode.OK) { return(new OkObjectResult(true)); } return(new StatusCodeResult(500)); }