Skip to content

Commit

Permalink
feat: query all series API
Browse files Browse the repository at this point in the history
  • Loading branch information
Chinlinlee committed Aug 3, 2023
1 parent 343e945 commit 4da907d
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 7 deletions.
47 changes: 47 additions & 0 deletions api-sql/dicom-web/controller/QIDO-RS/queryAllSeries.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
const {
SqlQidoRsService: QidoRsService
} = require("./service/QIDO-RS.service");
const { ApiLogger } = require("@root/utils/logs/api-logger");
const { Controller } = require("@root/api/controller.class");

class QueryAllSeriesController extends Controller {
constructor(req, res) {
super(req, res);
}

async mainProcess() {
let apiLogger = new ApiLogger(this.request, "QIDO-RS");

apiLogger.addTokenValue();
apiLogger.logger.info("Query all series");

try {

let qidoRsService = new QidoRsService(this.request, this.response, "series");

await qidoRsService.getAndResponseDicomJson();

} catch (e) {
let errorStr = JSON.stringify(e, Object.getOwnPropertyNames(e));
apiLogger.logger.error(errorStr);

this.response.writeHead(500, {
"Content-Type": "application/dicom+json"
});
this.response.end(JSON.stringify({
code: 500,
message: errorStr
}));
}
}
}
/**
*
* @param {import('express').Request} req
* @param {import('express').Response} res
*/
module.exports = async function (req, res) {
let controller = new QueryAllSeriesController(req, res);

await controller.doPipeline();
};
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ const {
DicomWebStatusCodes
} = require("@error/dicom-web-service");
const { StudyModel } = require("@models/sql/models/study.model");
const { SeriesModel } = require("@models/sql/models/series.model");


class SqlQidoRsService extends QidoRsService {
Expand Down Expand Up @@ -89,7 +90,7 @@ class QidoDicomJsonFactory {
return await StudyModel.getDicomJson(queryOptions);
},
"series": async () => {
// return await getSeriesDicomJson(queryOptions);
return await SeriesModel.getDicomJson(queryOptions);
},
"instance": async () => {
// return await getInstanceDicomJson(queryOptions);
Expand Down
12 changes: 6 additions & 6 deletions api-sql/dicom-web/qido-rs.route.js
Original file line number Diff line number Diff line change
Expand Up @@ -231,12 +231,12 @@ router.get("/studies", validateParams(queryValidation, "query", {
* - $ref: "#/components/schemas/SeriesRequiredMatchingAttributes"
*
*/
// router.get(
// "/series", validateParams(queryValidation, "query", {
// allowUnknown: true
// }),
// require("./controller/QIDO-RS/queryAllSeries")
// );
router.get(
"/series", validateParams(queryValidation, "query", {
allowUnknown: true
}),
require("./controller/QIDO-RS/queryAllSeries")
);

/**
* @openapi
Expand Down
28 changes: 28 additions & 0 deletions models/sql/models/series.model.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
const { Sequelize, DataTypes, Model } = require("sequelize");
const sequelizeInstance = require("@models/sql/instance");
const { vrTypeMapping } = require("../vrTypeMapping");
const { SeriesQueryBuilder } = require("@root/api-sql/dicom-web/controller/QIDO-RS/seriesQueryBuilder");
const _ = require("lodash");
const { dictionary } = require("@models/DICOM/dicom-tags-dic");

class SeriesModel extends Model { };

Expand Down Expand Up @@ -69,4 +72,29 @@ SeriesModel.init({
freezeTableName: true
});

SeriesModel.getDicomJson = async function(queryOptions) {
let queryBuilder = new SeriesQueryBuilder(queryOptions);
let q = queryBuilder.build();
let seriesArray = await SeriesModel.findAll({
...q,
attributes: ["json"],
limit: queryOptions.limit,
offset: queryOptions.skip
});

return await Promise.all(seriesArray.map(async series => {
let { json } = series.toJSON();
// Set Retrieve URL
let studyInstanceUID = _.get(json, "0020000D.Value.0");
let seriesInstanceUID = _.get(json, "0020000E.Value.0");
_.set(json, dictionary.keyword.RetrieveURL, {
vr: dictionary.tagVR[dictionary.keyword.RetrieveURL].vr,
Value: [
`${queryOptions.retrieveBaseUrl}/${studyInstanceUID}/series/${seriesInstanceUID}`
]
});
return json;
}));
};

module.exports.SeriesModel = SeriesModel;

0 comments on commit 4da907d

Please sign in to comment.