diff --git a/healthcare/dicom/README.md b/healthcare/dicom/README.md index 6ea155f08f..b7c5ce5974 100644 --- a/healthcare/dicom/README.md +++ b/healthcare/dicom/README.md @@ -61,7 +61,10 @@ Run the following command to install the library dependencies for Node.js: node dicomWebRetrieveRendered.js Handles the GET requests specified in the DICOMweb standard. - + + node dicomWebSearchStudies.js Searches studies using DICOM tags. + + node dicomWebDeleteStudy.js Handles DELETE requests. diff --git a/healthcare/dicom/dicomWebSearchStudies.js b/healthcare/dicom/dicomWebSearchStudies.js new file mode 100644 index 0000000000..65b6cc4299 --- /dev/null +++ b/healthcare/dicom/dicomWebSearchStudies.js @@ -0,0 +1,67 @@ +/** + * Copyright 2019, Google, LLC + * Licensed under the Apache License, Version 2.0 (the `License`); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an `AS IS` BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* eslint-disable no-warning-comments */ + +'use strict'; + +const main = ( + projectId = process.env.GCLOUD_PROJECT, + cloudRegion = 'us-central1', + datasetId, + dicomStoreId +) => { + // [START healthcare_dicomweb_search_studies] + const {google} = require('googleapis'); + const healthcare = google.healthcare('v1beta1'); + + const dicomWebSearchStudies = async () => { + const auth = await google.auth.getClient({ + scopes: ['https://www.googleapis.com/auth/cloud-platform'], + }); + + google.options({ + auth, + // Refine your search by appending DICOM tags to the + // request in the form of query parameters. This sample + // searches for studies containing a patient's name. + params: {PatientName: 'Sally Zhang'}, + headers: {Accept: 'application/dicom+json'}, + }); + + // TODO(developer): uncomment these lines before running the sample + // const cloudRegion = 'us-central1'; + // const projectId = 'adjective-noun-123'; + // const datasetId = 'my-dataset'; + // const dicomStoreId = 'my-dicom-store'; + const parent = `projects/${projectId}/locations/${cloudRegion}/datasets/${datasetId}/dicomStores/${dicomStoreId}`; + const dicomWebPath = `studies`; + const request = {parent, dicomWebPath}; + + const studies = await healthcare.projects.locations.datasets.dicomStores.searchForStudies( + request + ); + console.log(studies); + + console.log(`Found ${studies.data.length} studies:`); + console.log(JSON.stringify(studies.data)); + }; + + dicomWebSearchStudies(); + // [END healthcare_dicomweb_search_studies] +}; + +// node dicomWebSearchStudies.js +main(...process.argv.slice(2)); diff --git a/healthcare/dicom/system-test/dicomweb.test.js b/healthcare/dicom/system-test/dicomweb.test.js index 20e537ddf8..4bfa86a550 100644 --- a/healthcare/dicom/system-test/dicomweb.test.js +++ b/healthcare/dicom/system-test/dicomweb.test.js @@ -103,6 +103,14 @@ it('should retrieve a DICOM rendered PNG image', async () => { assert.ok(output.includes('Retrieved rendered image')); }); +it('should search for DICOM studies', async () => { + const output = await tools.runAsync( + `node dicomWebSearchStudies.js ${projectId} ${cloudRegion} ${datasetId} ${dicomStoreId}`, + cwd + ); + assert.ok(output.includes('Found')); +}); + it('should delete a DICOM study', async () => { const output = await tools.runAsync( `node dicomWebDeleteStudy.js ${projectId} ${cloudRegion} ${datasetId} ${dicomStoreId} ${studyUid}`,