/// <summary> /// Adds file via Trex /// </summary> protected override async Task <ContractExecutionResult> ProcessAsyncEx <T>(T item) { var importedFile = CastRequestObjectTo <CreateImportedFile>(item, errorCode: 68); await ImportedFileRequestDatabaseHelper.CheckIfParentSurfaceExistsAsync(importedFile.ImportedFileType, importedFile.ParentUid, serviceExceptionHandler, projectRepo); // need to write to Db prior to // notifying TRex as Trex needs the ImportedFileUid var createImportedFileEvent = await ImportedFileRequestDatabaseHelper.CreateImportedFileinDb( Guid.Parse(customerUid), importedFile.ProjectUid, importedFile.ImportedFileType, importedFile.DxfUnitsType, importedFile.FileName, importedFile.SurveyedUtc, JsonConvert.SerializeObject(importedFile.FileDescriptor), importedFile.FileCreatedUtc, importedFile.FileUpdatedUtc, userEmailAddress, log, serviceExceptionHandler, projectRepo, importedFile.ParentUid, importedFile.Offset, importedFile.ImportedFileUid); if (importedFile.IsTRexDesignFileType) { await ImportedFileRequestHelper.NotifyTRexAddFile(importedFile.ProjectUid, importedFile.ImportedFileType, importedFile.FileName, createImportedFileEvent.ImportedFileUID, importedFile.SurveyedUtc, log, customHeaders, serviceExceptionHandler, tRexImportFileProxy, projectRepo); } if (importedFile.ImportedFileType == ImportedFileType.Linework || importedFile.ImportedFileType == ImportedFileType.GeoTiff) { var project = ProjectRequestHelper.GetProject(importedFile.ProjectUid, new Guid(customerUid), new Guid(userId), log, serviceExceptionHandler, cwsProjectClient, customHeaders); var existing = projectRepo.GetImportedFile(createImportedFileEvent.ImportedFileUID.ToString()); await Task.WhenAll(project, existing); var dcFileName = importedFile.ImportedFileType == ImportedFileType.GeoTiff ? null : DataOceanFileUtil.DataOceanFileName(project.Result.CoordinateSystemFileName, false, importedFile.ProjectUid, null); //Generate raster tiles var jobRequest = TileGenerationRequestHelper.CreateRequest( importedFile.ImportedFileType, customerUid, importedFile.ProjectUid.ToString(), existing.Result.ImportedFileUid, importedFile.DataOceanRootFolder, importedFile.DataOceanFileName, dcFileName, importedFile.DxfUnitsType, importedFile.SurveyedUtc); await schedulerProxy.ScheduleVSSJob(jobRequest, customHeaders); } var fileDescriptor = new ImportedFileDescriptorSingleResult( (await ImportedFileRequestDatabaseHelper .GetImportedFileList(importedFile.ProjectUid.ToString(), log, userId, projectRepo)) .ToImmutableList() .First(f => f.ImportedFileUid == createImportedFileEvent.ImportedFileUID.ToString()) ); log.LogInformation( $"CreateImportedFileV4. completed successfully. Response: {JsonConvert.SerializeObject(fileDescriptor)}"); return(fileDescriptor); }
/// <summary> /// Deletes file via Trex /// </summary> protected override async Task <ContractExecutionResult> ProcessAsyncEx <T>(T item) { var deleteImportedFile = CastRequestObjectTo <DeleteImportedFile>(item, errorCode: 68); await CheckIfUsedInFilter(deleteImportedFile); await CheckIfHasReferenceSurfacesAsync(deleteImportedFile); // DB change must be made before productivity3dV2ProxyNotification.DeleteFile is called as it calls back here to get list of Active files //Don't think the above comment applies any more ! var deleteImportedFileEvent = await ImportedFileRequestDatabaseHelper.DeleteImportedFileInDb (deleteImportedFile.ProjectUid, deleteImportedFile.ImportedFileUid, serviceExceptionHandler, projectRepo); ImportedFileInternalResult importedFileInternalResult = null; if (deleteImportedFile.IsTRexDesignFileType) { //Now delete in TRex await ImportedFileRequestHelper.NotifyTRexDeleteFile(deleteImportedFile.ProjectUid, deleteImportedFile.ImportedFileType, deleteImportedFile.FileDescriptor.FileName, deleteImportedFile.ImportedFileUid, deleteImportedFile.SurveyedUtc, log, customHeaders, serviceExceptionHandler, tRexImportFileProxy); //and from s3 bucket ProjectRequestHelper.DeleteFileFromS3Repository( deleteImportedFile.ProjectUid.ToString(), deleteImportedFile.FileDescriptor.FileName, deleteImportedFile.ImportedFileType == ImportedFileType.SurveyedSurface, deleteImportedFile.SurveyedUtc, log, serviceExceptionHandler, persistantTransferProxyFactory.NewProxy(TransferProxyType.DesignImport)); } if (deleteImportedFile.ImportedFileType == ImportedFileType.Linework || deleteImportedFile.ImportedFileType == ImportedFileType.GeoTiff) { var dataOceanFileName = DataOceanFileUtil.DataOceanFileName(deleteImportedFile.FileDescriptor.FileName, deleteImportedFile.ImportedFileType == ImportedFileType.SurveyedSurface || deleteImportedFile.ImportedFileType == ImportedFileType.GeoTiff, deleteImportedFile.ImportedFileUid, deleteImportedFile.SurveyedUtc); importedFileInternalResult = await DataOceanHelper.DeleteFileFromDataOcean( dataOceanFileName, deleteImportedFile.DataOceanRootFolder, customerUid, deleteImportedFile.ProjectUid, deleteImportedFile.ImportedFileUid, log, dataOceanClient, authn, configStore); var tasks = new List <Task>(); //delete generated DXF tiles var dxfFileName = DataOceanFileUtil.GeneratedFileName(dataOceanFileName, deleteImportedFile.ImportedFileType); var dataOceanPath = DataOceanFileUtil.DataOceanPath(deleteImportedFile.DataOceanRootFolder, customerUid, deleteImportedFile.ProjectUid.ToString()); var fullFileName = $"{dataOceanPath}{Path.DirectorySeparatorChar}{dxfFileName}"; tasks.Add(pegasusClient.DeleteTiles(fullFileName, DataOceanHelper.CustomHeaders(authn))); await Task.WhenAll(tasks); } if (importedFileInternalResult != null) { await ImportedFileRequestDatabaseHelper.UndeleteImportedFile (deleteImportedFile.ProjectUid, deleteImportedFile.ImportedFileUid, serviceExceptionHandler, projectRepo); serviceExceptionHandler.ThrowServiceException(importedFileInternalResult.StatusCode, importedFileInternalResult.ErrorNumber, importedFileInternalResult.ResultCode, importedFileInternalResult.ErrorMessage1); } return(new ContractExecutionResult()); }
/// <summary> /// Processes the Upsert /// </summary> protected override async Task <ContractExecutionResult> ProcessAsyncEx <T>(T item) { var importedFile = CastRequestObjectTo <UpdateImportedFile>(item, errorCode: 68); var existingImportedFile = await projectRepo.GetImportedFile(importedFile.ImportedFileUid.ToString()); if (existingImportedFile == null) { throw new ServiceException(HttpStatusCode.BadRequest, new ContractExecutionResult(ProjectErrorCodesProvider.GetErrorNumberwithOffset(122), ProjectErrorCodesProvider.FirstNameWithOffset(122))); } if (importedFile.IsTRexDesignFileType) { await ImportedFileRequestHelper.NotifyTRexUpdateFile(importedFile.ProjectUid, importedFile.ImportedFileType, importedFile.FileDescriptor.FileName, importedFile.ImportedFileUid, importedFile.SurveyedUtc, log, customHeaders, serviceExceptionHandler, tRexImportFileProxy); } if (importedFile.ImportedFileType == ImportedFileType.Linework || importedFile.ImportedFileType == ImportedFileType.GeoTiff) { string dcFileName = null; if (importedFile.ImportedFileType == ImportedFileType.Linework) { var project = await ProjectRequestHelper.GetProject(importedFile.ProjectUid, new Guid(customerUid), new Guid(userId), log, serviceExceptionHandler, cwsProjectClient, customHeaders); dcFileName = DataOceanFileUtil.DataOceanFileName(project.CoordinateSystemFileName, false, importedFile.ProjectUid, null); } var jobRequest = TileGenerationRequestHelper.CreateRequest( importedFile.ImportedFileType, customerUid, importedFile.ProjectUid.ToString(), existingImportedFile.ImportedFileUid, importedFile.DataOceanRootFolder, importedFile.DataOceanFileName, dcFileName, importedFile.DxfUnitsTypeId, importedFile.SurveyedUtc); await schedulerProxy.ScheduleVSSJob(jobRequest, customHeaders); } // if all succeeds, update Db and put update to kafka que var updateImportedFileEvent = await ImportedFileRequestDatabaseHelper.UpdateImportedFileInDb(existingImportedFile, existingImportedFile.FileDescriptor, importedFile.SurveyedUtc, existingImportedFile.MinZoomLevel, existingImportedFile.MaxZoomLevel, importedFile.FileCreatedUtc, importedFile.FileUpdatedUtc, userEmailAddress, log, serviceExceptionHandler, projectRepo); var fileDescriptor = new ImportedFileDescriptorSingleResult( (await ImportedFileRequestDatabaseHelper.GetImportedFileList(importedFile.ProjectUid.ToString(), log, userId, projectRepo)) .ToImmutableList() .FirstOrDefault(f => f.ImportedFileUid == importedFile.ImportedFileUid.ToString()) ); log.LogInformation( $"UpdateImportedFileExecutor. entry {(fileDescriptor.ImportedFileDescriptor == null ? "not " : "")}retrieved from DB : {JsonConvert.SerializeObject(fileDescriptor)}"); return(fileDescriptor); }