protected override async Task <ContractExecutionResult> ProcessAsyncEx <T>(T item) { try { var request = CastRequestObjectTo <SummaryVolumesRequest>(item); var baseFilter = request.BaseFilter; var topFilter = request.TopFilter; await PairUpAssetIdentifiers(request.ProjectUid.Value, baseFilter, topFilter); await PairUpImportedFileIdentifiers(request.ProjectUid.Value, filter1 : baseFilter, filter2 : topFilter); var designDescriptors = new List <DesignDescriptor>(); designDescriptors.Add(request.BaseDesignDescriptor); designDescriptors.Add(request.TopDesignDescriptor); await PairUpImportedFileIdentifiers(request.ProjectUid.Value, designDescriptors); if (request.VolumeCalcType == VolumesType.Between2Filters) { if (!request.ExplicitFilters) { (baseFilter, topFilter) = FilterUtilities.AdjustFilterToFilter(request.BaseFilter, request.TopFilter); } } else { (baseFilter, topFilter) = FilterUtilities.ReconcileTopFilterAndVolumeComputationMode(baseFilter, topFilter, request.VolumeCalcType); } var summaryVolumesRequest = new SummaryVolumesDataRequest( request.ProjectUid, baseFilter, topFilter, request.BaseDesignDescriptor.FileUid, request.BaseDesignDescriptor.Offset, request.TopDesignDescriptor.FileUid, request.TopDesignDescriptor.Offset, request.VolumeCalcType); log.LogDebug($"{nameof(SummaryVolumesExecutor)} trexRequest {JsonConvert.SerializeObject(summaryVolumesRequest)}"); return(await trexCompactionDataProxy.SendDataPostRequest <SummaryVolumesResult, SummaryVolumesDataRequest>(summaryVolumesRequest, "/volumes/summary", customHeaders)); } finally { ContractExecutionStates.ClearDynamic(); } }
public Task <ContractExecutionResult> PostSummaryVolumes([FromBody] SummaryVolumesDataRequest summaryVolumesRequest) { Log.LogInformation($"{nameof(PostSummaryVolumes)}: {JsonConvert.SerializeObject(summaryVolumesRequest)}"); summaryVolumesRequest.Validate(); if (summaryVolumesRequest.ProjectUid == null || summaryVolumesRequest.ProjectUid == Guid.Empty) { throw new ServiceException(HttpStatusCode.BadRequest, new ContractExecutionResult(ContractExecutionStatesEnum.ValidationError, "Invalid project UID.")); } ValidateFilterMachines(nameof(PostSummaryVolumes), summaryVolumesRequest.ProjectUid, summaryVolumesRequest.BaseFilter); ValidateFilterMachines(nameof(PostSummaryVolumes), summaryVolumesRequest.ProjectUid, summaryVolumesRequest.TopFilter); ValidateFilterMachines(nameof(PostSummaryVolumes), summaryVolumesRequest.ProjectUid, summaryVolumesRequest.AdditionalSpatialFilter); return(WithServiceExceptionTryExecuteAsync(() => RequestExecutorContainer .Build <SummaryVolumesExecutor>(ConfigStore, LoggerFactory, ServiceExceptionHandler) .ProcessAsync(summaryVolumesRequest))); }
protected override async Task <ContractExecutionResult> ProcessAsyncEx <T>(T item) { try { var request = CastRequestObjectTo <SummaryVolumesRequest>(item); var baseFilter = request.BaseFilter; var topFilter = request.TopFilter; if (request.VolumeCalcType == VolumesType.Between2Filters) { if (!request.ExplicitFilters) { (baseFilter, topFilter) = FilterUtilities.AdjustFilterToFilter(request.BaseFilter, request.TopFilter); } } else { // Note: The use of the ReconcileTopFilterAndVolumeComputationMode() here breaks with the pattern of all the other V2 // end points which explicitly do not perform this step. It has been copied from the Raptor implementation of this end point (baseFilter, topFilter) = FilterUtilities.ReconcileTopFilterAndVolumeComputationMode(baseFilter, topFilter, request.VolumeCalcType); } var summaryVolumesRequest = new SummaryVolumesDataRequest( request.ProjectUid, baseFilter, topFilter, request.BaseDesignDescriptor?.FileUid, request.BaseDesignDescriptor?.Offset, request.TopDesignDescriptor?.FileUid, request.TopDesignDescriptor?.Offset, request.VolumeCalcType); return(await trexCompactionDataProxy.SendDataPostRequest <SummaryVolumesResult, SummaryVolumesDataRequest>(summaryVolumesRequest, "/volumes/summary", customHeaders)); } finally { ContractExecutionStates.ClearDynamic(); } }