Skip to content

Commit

Permalink
refactor: centralize query controller
Browse files Browse the repository at this point in the history
- We already using level to determine how to search data in base query controller
- Using inherit class may be redundant
- Set dicomLevel, logger in request object and use them in after process
  • Loading branch information
Chinlinlee committed Jan 12, 2024
1 parent e2a15ea commit afe65d4
Show file tree
Hide file tree
Showing 9 changed files with 66 additions and 199 deletions.
23 changes: 0 additions & 23 deletions api/dicom-web/controller/QIDO-RS/allPatient.js

This file was deleted.

9 changes: 2 additions & 7 deletions api/dicom-web/controller/QIDO-RS/base.controller.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,22 @@ const { ApiErrorArrayHandler } = require("@error/api-errors.handler");
class BaseQueryController extends Controller {
constructor(req, res) {
super(req, res);
this.apiLogger = new ApiLogger(this.request, "QIDO-RS");
this.apiLogger.addTokenValue();
this.level = "patient";
}

logAction() {
throw new Error("Not Implemented");
}

async mainProcess() {
this.logAction();

try {
let qidoRsService = new QidoRsService(this.request, this.response, this.level);
let qidoRsService = new QidoRsService(this.request, this.response, this.request.dicomLevel);
let foundDicomJson = await qidoRsService.getDicomJson();
if (foundDicomJson.length === 0 ) {
return this.response.status(204).send();
}
return this.response.status(200).set("Content-Type", "application/dicom+json").json(foundDicomJson);
} catch (e) {
let apiErrorArrayHandler = new ApiErrorArrayHandler(this.response, this.apiLogger, e);
let apiErrorArrayHandler = new ApiErrorArrayHandler(this.response, this.request.logger, e);
return apiErrorArrayHandler.doErrorResponse();
}
}
Expand Down
28 changes: 0 additions & 28 deletions api/dicom-web/controller/QIDO-RS/queryAllInstances.js

This file was deleted.

22 changes: 0 additions & 22 deletions api/dicom-web/controller/QIDO-RS/queryAllSeries.js

This file was deleted.

28 changes: 0 additions & 28 deletions api/dicom-web/controller/QIDO-RS/queryAllStudies.js

This file was deleted.

28 changes: 0 additions & 28 deletions api/dicom-web/controller/QIDO-RS/queryStudies-Instances.js

This file was deleted.

29 changes: 0 additions & 29 deletions api/dicom-web/controller/QIDO-RS/queryStudies-Series-Instance.js

This file was deleted.

27 changes: 0 additions & 27 deletions api/dicom-web/controller/QIDO-RS/queryStudies-Series.js

This file was deleted.

71 changes: 64 additions & 7 deletions api/dicom-web/qido-rs.route.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ const router = express();
const {
dictionary
} = require("../../models/DICOM/dicom-tags-dic");
const { ApiLogger } = require("@root/utils/logs/api-logger");
const { BaseQueryController } = require("./controller/QIDO-RS/base.controller");

const KEYWORD_KEYS = Object.keys(dictionary.keyword);
const HEX_KEYS = Object.keys(dictionary.tag);
Expand Down Expand Up @@ -48,6 +50,10 @@ function convertKeywordToHex(attribute) {
return attribute;
}

const queryController = async (req, res) => {
let controller = new BaseQueryController(req, res);
await controller.doPipeline();
};

/**
* @openapi
Expand Down Expand Up @@ -79,7 +85,13 @@ function convertKeywordToHex(attribute) {
*/
router.get("/studies", validateParams(queryValidation, "query", {
allowUnknown: true
}), require("./controller/QIDO-RS/queryAllStudies"));
}), (req, res, next) => {
req.dicomLevel = "study";
req.logger = new ApiLogger(req, "QIDO-RS");
req.logger.addTokenValue();
req.logger.logger.info(`Query Studies, Incoming Parameters: ${JSON.stringify(req.query)}`);
next();
}, queryController);

/**
* @openapi
Expand Down Expand Up @@ -117,7 +129,14 @@ router.get(
"/studies/:studyUID/series", validateParams(queryValidation, "query", {
allowUnknown: true
}),
require("./controller/QIDO-RS/queryStudies-Series")
(req, res, next) => {
req.dicomLevel = "series";
req.logger = new ApiLogger(req, "QIDO-RS");
req.logger.addTokenValue();
req.logger.logger.info("Query Study's Series, Incoming Parameters: " + JSON.stringify(req.query));
next();
},
queryController
);

/**
Expand Down Expand Up @@ -159,7 +178,14 @@ router.get(
"/studies/:studyUID/instances", validateParams(queryValidation, "query", {
allowUnknown: true
}),
require("./controller/QIDO-RS/queryStudies-Instances")
(req, res, next) => {
req.dicomLevel = "instance";
req.logger = new ApiLogger(req, "QIDO-RS");
req.logger.addTokenValue();
req.logger.logger.info("Query Study's Instances, Incoming Parameters: " + JSON.stringify(req.query));
next();
},
queryController
);

/**
Expand Down Expand Up @@ -202,7 +228,14 @@ router.get(
"/studies/:studyUID/series/:seriesUID/instances", validateParams(queryValidation, "query", {
allowUnknown: true
}),
require("./controller/QIDO-RS/queryStudies-Series-Instance")
(req, res, next) => {
req.dicomLevel = "instance";
req.logger = new ApiLogger(req, "QIDO-RS");
req.logger.addTokenValue();
req.logger.logger.info("Query Study's Series' Instances, Incoming Parameters: " + JSON.stringify(req.query));
next();
},
queryController
);

/**
Expand Down Expand Up @@ -241,7 +274,14 @@ router.get(
"/series", validateParams(queryValidation, "query", {
allowUnknown: true
}),
require("./controller/QIDO-RS/queryAllSeries")
(req, res, next) => {
req.dicomLevel = "series";
req.logger = new ApiLogger(req, "QIDO-RS");
req.logger.addTokenValue();
req.logger.logger.info("Query All Series, Incoming Parameters: " + JSON.stringify(req.query));
next();
},
queryController
);

/**
Expand Down Expand Up @@ -282,7 +322,14 @@ router.get(
"/instances", validateParams(queryValidation, "query", {
allowUnknown: true
}),
require("./controller/QIDO-RS/queryAllInstances")
(req, res, next) => {
req.dicomLevel = "instance";
req.logger = new ApiLogger(req, "QIDO-RS");
req.logger.addTokenValue();
req.logger.logger.info("Query All Instances, Incoming Parameters: " + JSON.stringify(req.query));
next();
},
queryController
);

/**
Expand Down Expand Up @@ -310,7 +357,17 @@ router.get(
*/
router.get(
"/patients",
require("./controller/QIDO-RS/allPatient")
validateParams({limit: queryValidation.limit, offset: queryValidation.offset}, "query", {
allowUnknown: true
}),
(req, res, next) => {
req.dicomLevel = "patient";
req.logger = new ApiLogger(req, "QIDO-RS");
req.logger.addTokenValue();
req.logger.logger.info("Query All Patients, Incoming Parameters: " + JSON.stringify(req.query));
next();
},
queryController
);

//#endregion
Expand Down

0 comments on commit afe65d4

Please sign in to comment.