ohif-viewer/Packages/ohif-lesiontracker/server/methods.js
2017-02-14 01:25:50 -02:00

149 lines
4.6 KiB
JavaScript

import { Meteor } from 'meteor/meteor';
import { Mongo } from 'meteor/mongo';
import { OHIF } from 'meteor/ohif:core';
import { measurementTools } from 'meteor/ohif:lesiontracker/both/configuration/measurementTools';
let MeasurementCollections = {};
measurementTools.forEach(tool => {
MeasurementCollections[tool.id] = new Mongo.Collection(tool.id);
MeasurementCollections[tool.id]._debugName = tool.id;
});
const Timepoints = new Mongo.Collection('timepoints');
Timepoints._debugName = 'Timepoints';
Timepoints.find().observe({
remove() {
console.warn('REMOVED');
}
});
// Drop our collections for testing purposes
Meteor.startup(() => {
if (Meteor.settings.dropCollections) {
Timepoints.remove({});
measurementTools.forEach(tool => {
MeasurementCollections[tool.id].remove({});
});
}
});
// TODO: Make storage use update instead of clearing the entire collection and
// re-inserting everything.
Meteor.methods({
storeTimepoints(timepoints) {
OHIF.log.info('Storing Timepoints on the Server');
OHIF.log.info(JSON.stringify(timepoints, null, 2));
Timepoints.remove({});
timepoints.forEach(timepoint => {
delete timepoint._id;
Timepoints.insert(timepoint);
});
},
disassociateStudy(timepointIds, studyInstanceUid) {
OHIF.log.info('Disassociating Study from Timepoints');
timepointIds.forEach(timepointId => {
const timepoint = Timepoints.findOne({timepointId});
if (!timepoint) {
return;
}
// Find the index of the current studyInstanceUid in the array
// of reference studyInstanceUids
const index = timepoint.studyInstanceUids.indexOf(studyInstanceUid);
if (index < 0) {
return;
}
// Remove the specified studyInstanceUid from the array of associated studyInstanceUids
timepoint.studyInstanceUids.splice(index, 1);
let updated = [];
let removed = [];
if (timepoint.studyInstanceUids.length) {
Timepoints.update(timepoint._id, {
$set: {
studyInstanceUids: timepoint.studyInstanceUids
}
});
} else {
Timepoints.remove(timepoint._id);
}
// Remove all Measurement Data for this timepoint and study
measurementTools.forEach(tool => {
const filter = {
studyInstanceUid: studyInstanceUid,
timepointId: timepointId
};
MeasurementCollections[tool.id].remove(filter)
});
});
},
removeTimepoint(timepointId) {
OHIF.log.info('Removing Timepoint from the Server');
Timepoints.remove({timepointId});
},
updateTimepoint(timepointData, query) {
OHIF.log.info('Updating Timepoint on the Server');
OHIF.log.info(JSON.stringify(timepointData, null, 2));
OHIF.log.info(JSON.stringify(query, null, 2));
Timepoints.update(timepointData, query);
},
retrieveTimepoints(patientId) {
OHIF.log.info('Retrieving Timepoints from the Server');
const filter = {}
if (patientId) {
filter.patientId = patientId;
};
return Timepoints.find(filter).fetch();
},
storeMeasurements(measurementData, filter = {}) {
OHIF.log.info('Storing Measurements on the Server');
OHIF.log.info(JSON.stringify(measurementData, null, 2));
Object.keys(measurementData).forEach(toolId => {
if (!MeasurementCollections[toolId]) {
return;
}
MeasurementCollections[toolId].remove(filter);
const measurements = measurementData[toolId];
measurements.forEach(measurement => {
MeasurementCollections[toolId].insert(measurement);
});
});
},
retrieveMeasurements(patientId, timepointIds) {
OHIF.log.info('Retrieving Measurements from the Server');
let measurementData = {};
const filter = {}
if (patientId) {
filter.patientId = patientId;
}
if (timepointIds) {
filter.timepointId = {
$in: timepointIds
};
}
measurementTools.forEach(tool => {
measurementData[tool.id] = MeasurementCollections[tool.id].find(filter).fetch();
});
return measurementData;
}
});