From 73004a710e06ea17e6b1753700eaee35d1dd9a1e Mon Sep 17 00:00:00 2001 From: chinlinlee Date: Sat, 13 Jan 2024 14:12:32 +0800 Subject: [PATCH] refactor: centralize retrieve metadata controller - Using inherit class may be redundant - Set `imagePathFactory`, `logger` in request object and use them in after process --- .../metadata/retrieveInstanceMetadata.js | 23 ------------ ...ller.js => retrieveMetadata.controller.js} | 12 +----- .../metadata/retrieveSeriesMetadata.js | 23 ------------ .../WADO-RS/metadata/retrieveStudyMetadata.js | 24 ------------ api/dicom-web/wado-rs-metadata.route.js | 37 +++++++++++++++++-- 5 files changed, 36 insertions(+), 83 deletions(-) delete mode 100644 api/dicom-web/controller/WADO-RS/metadata/retrieveInstanceMetadata.js rename api/dicom-web/controller/WADO-RS/metadata/{base.controller.js => retrieveMetadata.controller.js} (79%) delete mode 100644 api/dicom-web/controller/WADO-RS/metadata/retrieveSeriesMetadata.js delete mode 100644 api/dicom-web/controller/WADO-RS/metadata/retrieveStudyMetadata.js diff --git a/api/dicom-web/controller/WADO-RS/metadata/retrieveInstanceMetadata.js b/api/dicom-web/controller/WADO-RS/metadata/retrieveInstanceMetadata.js deleted file mode 100644 index 23c94544..00000000 --- a/api/dicom-web/controller/WADO-RS/metadata/retrieveInstanceMetadata.js +++ /dev/null @@ -1,23 +0,0 @@ -const { BaseRetrieveMetadataController } = require("./base.controller"); -const { InstanceImagePathFactory } = require("@api/dicom-web/controller/WADO-RS/service/WADO-RS.service"); - -class RetrieveInstanceMetadataController extends BaseRetrieveMetadataController { - constructor(req, res) { - super(req, res); - this.imagePathFactory = InstanceImagePathFactory; - } - - logAction() { - this.apiLogger.logger.info(`[WADO-RS] [Get Study's Series' Instance Metadata] [instance UID: ${this.request.params.instanceUID}, series UID: ${this.request.params.seriesUID}, study UID: ${this.request.params.studyUID}]`); - } -} -/** - * - * @param {import("http").IncomingMessage} req - * @param {import("http").ServerResponse} res - */ -module.exports = async function(req, res) { - let controller = new RetrieveInstanceMetadataController(req, res); - - await controller.doPipeline(); -}; \ No newline at end of file diff --git a/api/dicom-web/controller/WADO-RS/metadata/base.controller.js b/api/dicom-web/controller/WADO-RS/metadata/retrieveMetadata.controller.js similarity index 79% rename from api/dicom-web/controller/WADO-RS/metadata/base.controller.js rename to api/dicom-web/controller/WADO-RS/metadata/retrieveMetadata.controller.js index 5a53c00e..e0de42f2 100644 --- a/api/dicom-web/controller/WADO-RS/metadata/base.controller.js +++ b/api/dicom-web/controller/WADO-RS/metadata/retrieveMetadata.controller.js @@ -7,18 +7,10 @@ const { ApiErrorArrayHandler } = require("@error/api-errors.handler"); class BaseRetrieveMetadataController extends Controller { constructor(req, res) { super(req, res); - this.apiLogger = new ApiLogger(this.request, "WADO-RS"); - this.apiLogger.addTokenValue(); - this.imagePathFactory = StudyImagePathFactory; - } - - logAction() { - throw new Error("Abstract method, not implement"); } async mainProcess() { - this.logAction(); - let metadataService = new MetadataService(this.request, this.imagePathFactory); + let metadataService = new MetadataService(this.request, this.request.imagePathFactory); try { let responseMetadata = await metadataService.getMetadata(this.request.params); @@ -33,7 +25,7 @@ class BaseRetrieveMetadataController extends Controller { return this.response.end(); } catch (e) { - let apiErrorArrayHandler = new ApiErrorArrayHandler(this.response, this.apiLogger, e); + let apiErrorArrayHandler = new ApiErrorArrayHandler(this.response, this.request.logger, e); return apiErrorArrayHandler.doErrorResponse(); } } diff --git a/api/dicom-web/controller/WADO-RS/metadata/retrieveSeriesMetadata.js b/api/dicom-web/controller/WADO-RS/metadata/retrieveSeriesMetadata.js deleted file mode 100644 index d04393ad..00000000 --- a/api/dicom-web/controller/WADO-RS/metadata/retrieveSeriesMetadata.js +++ /dev/null @@ -1,23 +0,0 @@ -const { BaseRetrieveMetadataController } = require("./base.controller"); -const { SeriesImagePathFactory } = require("@api/dicom-web/controller/WADO-RS/service/WADO-RS.service"); - -class RetrieveSeriesMetadataController extends BaseRetrieveMetadataController { - constructor(req, res) { - super(req, res); - this.imagePathFactory = SeriesImagePathFactory; - } - - logAction() { - this.apiLogger.logger.info(`[WADO-RS] [Get Study's Series' Instances Metadata] [series UID: ${this.request.params.seriesUID}, study UID: ${this.request.params.studyUID}]`); - } -} -/** - * - * @param {import("http").IncomingMessage} req - * @param {import("http").ServerResponse} res - */ -module.exports = async function(req, res) { - let controller = new RetrieveSeriesMetadataController(req, res); - - await controller.doPipeline(); -}; \ No newline at end of file diff --git a/api/dicom-web/controller/WADO-RS/metadata/retrieveStudyMetadata.js b/api/dicom-web/controller/WADO-RS/metadata/retrieveStudyMetadata.js deleted file mode 100644 index 416f5c91..00000000 --- a/api/dicom-web/controller/WADO-RS/metadata/retrieveStudyMetadata.js +++ /dev/null @@ -1,24 +0,0 @@ -const { StudyImagePathFactory } = require("@api/dicom-web/controller/WADO-RS/service/WADO-RS.service"); -const { BaseRetrieveMetadataController } = require("./base.controller"); - -class RetrieveStudyMetadataController extends BaseRetrieveMetadataController { - constructor(req, res) { - super(req, res); - this.imagePathFactory = StudyImagePathFactory; - } - - logAction() { - this.apiLogger.logger.info(`Get Study's Instances Metadata [study UID: ${this.request.params.studyUID}]`); - } -} - -/** - * - * @param {import("http").IncomingMessage} req - * @param {import("http").ServerResponse} res - */ -module.exports = async function(req, res) { - let controller = new RetrieveStudyMetadataController(req, res); - - await controller.doPipeline(); -}; \ No newline at end of file diff --git a/api/dicom-web/wado-rs-metadata.route.js b/api/dicom-web/wado-rs-metadata.route.js index 59f15e51..acff3ecb 100644 --- a/api/dicom-web/wado-rs-metadata.route.js +++ b/api/dicom-web/wado-rs-metadata.route.js @@ -3,6 +3,13 @@ const Joi = require("joi"); const { validateParams, intArrayJoi } = require("../validator"); const router = express(); +const { BaseRetrieveMetadataController } = require("./controller/WADO-RS/metadata/retrieveMetadata.controller"); +const { ApiLogger } = require("@root/utils/logs/api-logger"); +const { StudyImagePathFactory, SeriesImagePathFactory, InstanceImagePathFactory } = require("./controller/WADO-RS/service/WADO-RS.service"); +const RetrieveMetadataController = async (req, res) => { + let controller = new BaseRetrieveMetadataController(req, res); + await controller.doPipeline(); +}; //#region WADO-RS Retrieve Transaction Metadata Resources @@ -22,7 +29,15 @@ const router = express(); */ router.get( "/studies/:studyUID/metadata", - require("./controller/WADO-RS/metadata/retrieveStudyMetadata") + (req, res, next) => { + req.logger = new ApiLogger(req, "WADO-RS"); + req.logger.addTokenValue(); + req.logger.logger.info(); + req.logger.logger.info(`Get study's metadata, study UID: ${req.params.studyUID}`); + req.imagePathFactory = StudyImagePathFactory; + next(); + }, + RetrieveMetadataController ); /** @@ -42,7 +57,15 @@ router.get( */ router.get( "/studies/:studyUID/series/:seriesUID/metadata", - require("./controller/WADO-RS/metadata/retrieveSeriesMetadata") + (req, res, next) => { + req.logger = new ApiLogger(req, "WADO-RS"); + req.logger.addTokenValue(); + req.logger.logger.info(); + req.logger.logger.info(`Get study's series's metadata, study UID: ${req.params.studyUID}, series UID: ${req.params.seriesUID}`); + req.imagePathFactory = SeriesImagePathFactory; + next(); + }, + RetrieveMetadataController ); /** @@ -63,7 +86,15 @@ router.get( */ router.get( "/studies/:studyUID/series/:seriesUID/instances/:instanceUID/metadata", - require("./controller/WADO-RS/metadata/retrieveInstanceMetadata") + (req, res, next) => { + req.logger = new ApiLogger(req, "WADO-RS"); + req.logger.addTokenValue(); + req.logger.logger.info(`Get instance's metadata, study UID: ${req.params.studyUID}, series UID: ${req.params.seriesUID},`+ + ` instance UID: ${req.params.instanceUID}`); + req.imagePathFactory = InstanceImagePathFactory; + next(); + }, + RetrieveMetadataController ); //#endregion