Skip to content

Commit

Permalink
refactor(sql): Add base DICOM model hierarchy to use duplicate functions
Browse files Browse the repository at this point in the history
  • Loading branch information
Chinlinlee committed Dec 24, 2023
1 parent 274eb20 commit 17545b2
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 83 deletions.
27 changes: 27 additions & 0 deletions models/sql/models/baseDicom.model.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
const { raccoonConfig } = require("@root/config-class");
const { Model } = require("sequelize");

let Common;
if (raccoonConfig.dicomDimseConfig.enableDimse) {
require("@models/DICOM/dcm4che/java-instance");
Common = require("@java-wrapper/org/github/chinlinlee/dcm777/net/common/Common").Common;
}
class BaseDicomModel extends Model {
async getAttributes() {
let obj = this.toJSON();
let jsonStr = JSON.stringify(obj.json);
return await Common.getAttributesFromJsonString(jsonStr);
}

async incrementDeleteStatus() {
let deleteStatus = this.getDataValue("deleteStatus");
this.setDataValue("deleteStatus", deleteStatus + 1);
await this.save();
}

toDicomJson() {
return this.json;
}
};

module.exports.BaseDicomModel = BaseDicomModel;
21 changes: 2 additions & 19 deletions models/sql/models/instance.model.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,9 @@ const { dictionary } = require("@models/DICOM/dicom-tags-dic");
const { getStoreDicomFullPath } = require("@models/mongodb/service");
const { logger } = require("@root/utils/logs/log");
const { raccoonConfig } = require("@root/config-class");
const { BaseDicomModel } = require("./baseDicom.model");

let Common;
if (raccoonConfig.dicomDimseConfig.enableDimse) {
require("@models/DICOM/dcm4che/java-instance");
Common = require("@java-wrapper/org/github/chinlinlee/dcm777/net/common/Common").Common;
}

class InstanceModel extends Model {
async incrementDeleteStatus() {
let deleteStatus = this.getDataValue("deleteStatus");
this.setDataValue("deleteStatus", deleteStatus + 1);
await this.save();
}
class InstanceModel extends BaseDicomModel {

async deleteInstance() {
let instancePath = this.getDataValue("instancePath");
Expand Down Expand Up @@ -247,11 +237,4 @@ InstanceModel.getInstanceOfMedianIndex = async function (query) {
return instance;
};

InstanceModel.prototype.getAttributes = async function () {
let seriesObj = this.toJSON();

let jsonStr = JSON.stringify(seriesObj.json);
return await Common.getAttributesFromJsonString(jsonStr);
};

module.exports.InstanceModel = InstanceModel;
26 changes: 2 additions & 24 deletions models/sql/models/patient.model.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,9 @@ const sequelizeInstance = require("@models/sql/instance");
const { vrTypeMapping } = require("../vrTypeMapping");
const { PatientQueryBuilder } = require("@root/api-sql/dicom-web/controller/QIDO-RS/service/patientQueryBuilder");
const { raccoonConfig } = require("@root/config-class");
const { BaseDicomModel } = require("./baseDicom.model");

let Common;
if (raccoonConfig.dicomDimseConfig.enableDimse) {
require("@models/DICOM/dcm4che/java-instance");
Common = require("@java-wrapper/org/github/chinlinlee/dcm777/net/common/Common").Common;
}

class PatientModel extends Model {
class PatientModel extends BaseDicomModel {
static async updateOrCreatePatient(patient) {
/** @type {PatientModel | null} */
const { PatientPersistentObject } = require("../po/patient.po");
Expand All @@ -19,16 +14,6 @@ class PatientModel extends Model {

return bringPatient;
}

async incrementDeleteStatus() {
let deleteStatus = this.getDataValue("deleteStatus");
this.setDataValue("deleteStatus", deleteStatus + 1);
await this.save();
}

toDicomJson() {
return this.json;
}
};

PatientModel.init({
Expand Down Expand Up @@ -95,11 +80,4 @@ PatientModel.getDicomJson = async function (queryOptions) {
}));
};

PatientModel.prototype.getAttributes = async function () {
let patientObj = this.toJSON();

let jsonStr = JSON.stringify(patientObj.json);
return await Common.getAttributesFromJsonString(jsonStr);
};

module.exports.PatientModel = PatientModel;
22 changes: 2 additions & 20 deletions models/sql/models/series.model.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,13 @@ const { dictionary } = require("@models/DICOM/dicom-tags-dic");
const { getStoreDicomFullPathGroup } = require("@models/mongodb/service");
const { logger } = require("@root/utils/logs/log");
const { raccoonConfig } = require("@root/config-class");
const { BaseDicomModel } = require("./baseDicom.model");

let Common;
if (raccoonConfig.dicomDimseConfig.enableDimse) {
require("@models/DICOM/dcm4che/java-instance");
Common = require("@java-wrapper/org/github/chinlinlee/dcm777/net/common/Common").Common;
}

class SeriesModel extends Model {
class SeriesModel extends BaseDicomModel {
getSeriesPath() {
return this.getDataValue("seriesPath");
}

async incrementDeleteStatus() {
let deleteStatus = this.getDataValue("deleteStatus");
this.setDataValue("deleteStatus", deleteStatus + 1);
await this.save();
}

async deleteSeriesFolder() {
let seriesPath = this.getDataValue("seriesPath");
logger.warn("Permanently delete series folder: " + seriesPath);
Expand Down Expand Up @@ -175,11 +164,4 @@ SeriesModel.getPathGroupOfInstances = async function(iParam) {
}
};

SeriesModel.prototype.getAttributes = async function () {
let seriesObj = this.toJSON();

let jsonStr = JSON.stringify(seriesObj.json);
return await Common.getAttributesFromJsonString(jsonStr);
};

module.exports.SeriesModel = SeriesModel;
22 changes: 2 additions & 20 deletions models/sql/models/study.model.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,9 @@ const { dictionary } = require("@models/DICOM/dicom-tags-dic");
const { getStoreDicomFullPathGroup } = require("@models/mongodb/service");
const { logger } = require("@root/utils/logs/log");
const { raccoonConfig } = require("@root/config-class");
const { BaseDicomModel } = require("./baseDicom.model");

let Common;
if (raccoonConfig.dicomDimseConfig.enableDimse) {
require("@models/DICOM/dcm4che/java-instance");
Common = require("@java-wrapper/org/github/chinlinlee/dcm777/net/common/Common").Common;
}

class StudyModel extends Model {
class StudyModel extends BaseDicomModel {
async getNumberOfStudyRelatedSeries() {
let count = await SeriesModel.count({
where: {
Expand All @@ -37,12 +32,6 @@ class StudyModel extends Model {
return count;
}

async incrementDeleteStatus() {
let deleteStatus = this.getDataValue("deleteStatus");
this.setDataValue("deleteStatus", deleteStatus + 1);
await this.save();
}

async deleteStudyFolder() {
let studyPath = this.getDataValue("studyPath");
logger.warn("Permanently delete study folder: " + studyPath);
Expand Down Expand Up @@ -218,11 +207,4 @@ StudyModel.getPathGroupOfInstances = async function (iParam) {
}
};

StudyModel.prototype.getAttributes = async function () {
let studyObj = this.toJSON();

let jsonStr = JSON.stringify(studyObj.json);
return await Common.getAttributesFromJsonString(jsonStr);
};

module.exports.StudyModel = StudyModel;

0 comments on commit 17545b2

Please sign in to comment.