cod-dicomweb-server
Version:
A wadors server proxy that get data from a Cloud Optimized Dicom format.
48 lines (47 loc) • 1.76 kB
JavaScript
import { CustomError } from './classes/customClasses';
import { createMetadataJsonUrl } from './classes/utils';
class MetadataManager {
metadata = {};
constructor() { }
addDeidMetadata(jsonMetadata) {
const { deid_study_uid, deid_series_uid, cod } = jsonMetadata;
if (!cod || !deid_study_uid || !deid_series_uid) {
console.warn('Missing required metadata properties: cod, deid_study_uid, or deid_series_uid');
return;
}
for (const deid_sop_uid in cod.instances) {
const instance = cod.instances[deid_sop_uid];
instance.metadata.DeidStudyInstanceUID = { Value: [deid_study_uid] };
instance.metadata.DeidSeriesInstanceUID = { Value: [deid_series_uid] };
instance.metadata.DeidSopInstanceUID = { Value: [deid_sop_uid] };
}
}
getMetadataFromCache(url) {
return this.metadata[url];
}
async getMetadata(params, headers) {
const url = createMetadataJsonUrl(params);
if (!url) {
throw new CustomError('Error creating metadata json url');
}
const cachedMetadata = this.getMetadataFromCache(url);
if (cachedMetadata) {
return cachedMetadata;
}
try {
const response = await fetch(url, { headers });
if (!response.ok) {
throw new CustomError(`Failed to fetch metadata: ${response.statusText}`);
}
const data = await response.json();
this.addDeidMetadata(data);
this.metadata[url] = data;
return data;
}
catch (error) {
console.error(error);
throw error;
}
}
}
export default MetadataManager;