protected override async Task <ContractExecutionResult> ProcessAsyncEx <T>(T item) { try { var request = CastRequestObjectTo <PatchRequest>(item); var filter1 = request.Filter1; var filter2 = request.Filter2; if (request.ComputeVolType == VolumesType.Between2Filters) { (filter1, filter2) = FilterUtilities.AdjustFilterToFilter(request.Filter1, request.Filter2); } else { (filter1, filter2) = FilterUtilities.ReconcileTopFilterAndVolumeComputationMode(filter1, filter2, request.Mode, request.ComputeVolType); } await PairUpAssetIdentifiers(request.ProjectUid.Value, filter1, filter2); await PairUpImportedFileIdentifiers(request.ProjectUid.Value, request.DesignDescriptor, filter1, filter2); var patchDataRequest = new PatchDataRequest( request.ProjectUid.Value, filter1, filter2, request.Mode, request.PatchNumber, request.PatchSize, AutoMapperUtility.Automapper.Map <OverridingTargets>(request.LiftBuildSettings), AutoMapperUtility.Automapper.Map <LiftSettings>(request.LiftBuildSettings)); log.LogDebug($"{nameof(PatchExecutor)} patchDataRequest {JsonConvert.SerializeObject(patchDataRequest)}"); var fileResult = await trexCompactionDataProxy.SendDataPostRequestWithStreamResponse(patchDataRequest, "/patches", customHeaders); return(fileResult.Length > 0 ? ConvertPatchResult(fileResult, request) : new ContractExecutionResult(ContractExecutionStatesEnum.InternalProcessingError, "Null patch returned")); } finally { ContractExecutionStates.ClearDynamic(); } }
protected override async Task <ContractExecutionResult> ProcessAsyncEx <T>(T item) { // Note: The numPatches out parameter is ignored in favor of the same value returned in the PatchResult proper. This will be removed // in due course once the breaking modifications process is agreed with BC. try { var request = CastRequestObjectTo <PatchRequest>(item); var filter1 = request.Filter1; var filter2 = request.Filter2; if (request.ComputeVolType == VolumesType.Between2Filters) { (filter1, filter2) = FilterUtilities.AdjustFilterToFilter(request.Filter1, request.Filter2); } else { (filter1, filter2) = FilterUtilities.ReconcileTopFilterAndVolumeComputationMode(filter1, filter2, request.Mode, request.ComputeVolType); } var patchDataRequest = new PatchDataRequest( request.ProjectUid.Value, filter1, filter2, request.Mode, request.PatchNumber, request.PatchSize, AutoMapperUtility.Automapper.Map <OverridingTargets>(request.LiftBuildSettings), AutoMapperUtility.Automapper.Map <LiftSettings>(request.LiftBuildSettings)); var fileResult = await trexCompactionDataProxy.SendDataPostRequestWithStreamResponse(patchDataRequest, "/patches", customHeaders); return(fileResult.Length > 0 ? ConvertPatchResult(fileResult, true) : CreateNullPatchReturnedResult()); } finally { ContractExecutionStates.ClearDynamic(); } }
public async Task <FileResult> PostSubGridPatches([FromBody] PatchDataRequest patchRequest) { Log.LogInformation($"{nameof(PostSubGridPatches)}: {JsonConvert.SerializeObject(patchRequest)}"); patchRequest.Validate(); ValidateFilterMachines(nameof(PostSubGridPatches), patchRequest.ProjectUid, patchRequest.Filter); ValidateFilterMachines(nameof(PostSubGridPatches), patchRequest.ProjectUid, patchRequest.Filter2); var patchResult = await WithServiceExceptionTryExecuteAsync(() => RequestExecutorContainer .Build <PatchRequestExecutor>(ConfigStore, LoggerFactory, ServiceExceptionHandler) .ProcessAsync(patchRequest)) as PatchDataResult; if (patchResult?.PatchData == null) { var code = patchResult == null ? HttpStatusCode.BadRequest : HttpStatusCode.NoContent; var exCode = patchResult == null ? ContractExecutionStatesEnum.FailedToGetResults : ContractExecutionStatesEnum.ValidationError; throw new ServiceException(code, new ContractExecutionResult(exCode, $"Failed to get subgrid patches for project ID: {patchRequest.ProjectUid}")); } return(new FileStreamResult(new MemoryStream(patchResult?.PatchData), ContentTypeConstants.ApplicationOctetStream)); }