-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: Retrieve Transaction Rendered Resources APIs
- Loading branch information
1 parent
f201219
commit c21c55e
Showing
11 changed files
with
649 additions
and
5 deletions.
There are no files selected for viewing
74 changes: 74 additions & 0 deletions
74
api-sql/dicom-web/controller/WADO-RS/rendered/instanceFrames.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
const _ = require("lodash"); | ||
const renderedService = require("../service/rendered.service"); | ||
const { | ||
RenderedImageMultipartWriter | ||
} = require("@root/api/dicom-web/controller/WADO-RS/service/rendered.service"); | ||
const { InstanceImagePathFactory } = require("../service/WADO-RS.service"); | ||
const errorResponse = require("@root/utils/errorResponse/errorResponseMessage"); | ||
const { ApiLogger } = require("@root/utils/logs/api-logger"); | ||
const { Controller } = require("@root/api/controller.class"); | ||
|
||
class RetrieveRenderedInstanceFramesController extends Controller { | ||
constructor(req, res) { | ||
super(req, res); | ||
} | ||
|
||
async mainProcess() { | ||
this.apiLogger = new ApiLogger(this.request, "WADO-RS"); | ||
this.apiLogger.addTokenValue(); | ||
|
||
let { | ||
studyUID, | ||
seriesUID, | ||
instanceUID, | ||
frameNumber | ||
} = this.request.params; | ||
|
||
this.apiLogger.logger.info(`Get study's series' rendered instances' frames, study UID: ${studyUID}, series UID: ${seriesUID}, instance UID: ${instanceUID}, frame: ${frameNumber}`); | ||
|
||
let headerAccept = _.get(this.request.headers, "accept", ""); | ||
if (!headerAccept.includes("*/*") && !headerAccept.includes("image/jpeg")) { | ||
let badRequestMessage = errorResponse.getBadRequestErrorMessage(`header accept only allow */* or image/jpeg , exception : ${headerAccept}`); | ||
this.response.writeHead(badRequestMessage.HttpStatus, { | ||
"Content-Type": "application/dicom+json" | ||
}); | ||
return this.response.end(JSON.stringify(badRequestMessage)); | ||
} | ||
|
||
try { | ||
let renderedImageMultipartWriter = new RenderedImageMultipartWriter( | ||
this.request, | ||
this.response, | ||
InstanceImagePathFactory, | ||
renderedService.InstanceFramesListWriter | ||
); | ||
|
||
let buffer = await renderedImageMultipartWriter.write(); | ||
|
||
this.apiLogger.logger.info(`Get instance's frame successfully, instance UID: ${instanceUID}, frame number: ${JSON.stringify(frameNumber)}`); | ||
|
||
if (buffer instanceof Buffer) { | ||
return this.response.end(buffer, "binary"); | ||
} | ||
|
||
return this.response.end(); | ||
} catch(e) { | ||
console.error(e); | ||
this.response.writeHead(500, { | ||
"Content-Type": "application/dicom+json" | ||
}); | ||
this.response.end(JSON.stringify(e, Object.getOwnPropertyNames(e), 4), "utf8"); | ||
} | ||
} | ||
} | ||
/** | ||
* | ||
* @param {import("http").incomingMessage} req | ||
* @param {import("http").ServerResponse} res | ||
* @returns | ||
*/ | ||
module.exports = async function(req, res) { | ||
let controller = new RetrieveRenderedInstanceFramesController(req, res); | ||
|
||
await controller.doPipeline(); | ||
}; |
61 changes: 61 additions & 0 deletions
61
api-sql/dicom-web/controller/WADO-RS/rendered/instances.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
const _ = require("lodash"); | ||
const { RenderedImageMultipartWriter } = require("@root/api/dicom-web/controller/WADO-RS/service/rendered.service"); | ||
const renderedService = require("../service/rendered.service"); | ||
const { InstanceImagePathFactory } = require("../service/WADO-RS.service"); | ||
const errorResponse = require("@root/utils/errorResponse/errorResponseMessage"); | ||
const { ApiLogger } = require("@root/utils/logs/api-logger"); | ||
const { Controller } = require("@root/api/controller.class"); | ||
|
||
class RetrieveRenderedInstancesController extends Controller { | ||
constructor(req, res) { | ||
super(req, res); | ||
} | ||
|
||
async mainProcess() { | ||
let apiLogger = new ApiLogger(this.request, "WADO-RS"); | ||
apiLogger.addTokenValue(); | ||
|
||
let headerAccept = _.get(this.request.headers, "accept", ""); | ||
|
||
apiLogger.logger.info(`Get study's series' rendered instances, study UID: ${this.request.params.studyUID}, series UID: ${this.request.params.seriesUID}`); | ||
|
||
if (!headerAccept == `multipart/related; type="image/jpeg"`) { | ||
let badRequestMessage = errorResponse.getBadRequestErrorMessage(`header accept only allow \`multipart/related; type="image/jpeg"\`, exception : ${headerAccept}`); | ||
this.response.writeHead(badRequestMessage.HttpStatus, { | ||
"Content-Type": "application/dicom+json" | ||
}); | ||
return this.response.end(JSON.stringify(badRequestMessage)); | ||
} | ||
|
||
try { | ||
let renderedImageMultipartWriter = new RenderedImageMultipartWriter( | ||
this.request, | ||
this.response, | ||
InstanceImagePathFactory, | ||
renderedService.InstanceFramesWriter | ||
); | ||
|
||
await renderedImageMultipartWriter.write(); | ||
|
||
apiLogger.logger.info(`Write Multipart Successfully, study's series' instances' rendered images, study UID: ${this.request.params.studyUID}, series UID: ${this.request.params.seriesUID}, instance UID: ${this.request.params.instanceUID}`); | ||
return this.response.end(); | ||
} catch(e) { | ||
this.response.writeHead(500, { | ||
"Content-Type": "application/dicom+json" | ||
}); | ||
this.response.end(JSON.stringify(e)); | ||
} | ||
} | ||
} | ||
|
||
/** | ||
* | ||
* @param {import("http").IncomingMessage} req | ||
* @param {import("http").ServerResponse} res | ||
* @returns | ||
*/ | ||
module.exports = async function(req, res) { | ||
let controller = new RetrieveRenderedInstancesController(req, res); | ||
|
||
await controller.doPipeline(); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
const _ = require("lodash"); | ||
const { RenderedImageMultipartWriter } = require("@root/api/dicom-web/controller/WADO-RS/service/rendered.service"); | ||
const renderedService = require("../service/rendered.service"); | ||
const { SeriesImagePathFactory } = require("../service/WADO-RS.service"); | ||
const errorResponse = require("@root/utils/errorResponse/errorResponseMessage"); | ||
const { logger } = require("@root/utils/logs/log"); | ||
const { Controller } = require("@root/api/controller.class"); | ||
|
||
class RetrieveRenderedSeriesController extends Controller { | ||
constructor(req, res) { | ||
super(req, res); | ||
} | ||
|
||
async mainProcess() { | ||
let headerAccept = _.get(this.request.headers, "accept", ""); | ||
logger.info(`[WADO-RS] [Get study's series' rendered instances, study UID: ${this.request.params.studyUID}, series UID: ${this.request.params.seriesUID}]`); | ||
if (!headerAccept == `multipart/related; type="image/jpeg"`) { | ||
let badRequestMessage = errorResponse.getBadRequestErrorMessage(`header accept only allow \`multipart/related; type="image/jpeg"\`, exception : ${headerAccept}`); | ||
this.response.writeHead(badRequestMessage.HttpStatus, { | ||
"Content-Type": "application/dicom+json" | ||
}); | ||
return this.response.end(JSON.stringify(badRequestMessage)); | ||
} | ||
|
||
try { | ||
let renderedImageMultipartWriter = new RenderedImageMultipartWriter( | ||
this.request, | ||
this.response, | ||
SeriesImagePathFactory, | ||
renderedService.SeriesFramesWriter | ||
); | ||
|
||
await renderedImageMultipartWriter.write(); | ||
|
||
logger.info(`[WADO-RS] [path: ${this.request.originalUrl}] [Write Multipart Successfully, study's series' rendered instances, study UID: ${this.request.params.studyUID}, series UID: ${this.request.params.seriesUID}]`); | ||
|
||
return this.response.end(); | ||
} catch(e) { | ||
this.response.writeHead(500, { | ||
"Content-Type": "application/dicom+json" | ||
}); | ||
this.response.end(JSON.stringify(e)); | ||
} | ||
} | ||
} | ||
/** | ||
* | ||
* @param {import("http").IncomingMessage} req | ||
* @param {import("http").ServerResponse} res | ||
* @returns | ||
*/ | ||
module.exports = async function(req, res) { | ||
let controller = new RetrieveRenderedSeriesController(req, res); | ||
|
||
await controller.doPipeline(); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
const _ = require("lodash"); | ||
const { RenderedImageMultipartWriter } = require("@root/api/dicom-web/controller/WADO-RS/service/rendered.service"); | ||
const renderedService = require("../service/rendered.service"); | ||
const { | ||
StudyImagePathFactory | ||
} = require("../service/WADO-RS.service"); | ||
const errorResponse = require("@root/utils/errorResponse/errorResponseMessage"); | ||
const { ApiLogger } = require("@root/utils/logs/api-logger"); | ||
const { Controller } = require("@root/api/controller.class"); | ||
|
||
class RetrieveRenderedStudyController extends Controller { | ||
constructor(req, res) { | ||
super(req, res); | ||
} | ||
|
||
async mainProcess() { | ||
let headerAccept = _.get(this.request.headers, "accept", ""); | ||
let apiLogger = new ApiLogger(this.request, "WADO-RS"); | ||
apiLogger.addTokenValue(); | ||
|
||
apiLogger.logger.info(`Get study's rendered instances, study UID: ${this.request.params.studyUID}`); | ||
|
||
if (!headerAccept == `multipart/related; type="image/jpeg"`) { | ||
let badRequestMessage = errorResponse.getBadRequestErrorMessage(`header accept only allow \`multipart/related; type="image/jpeg"\`, exception : ${headerAccept}`); | ||
this.response.writeHead(badRequestMessage.HttpStatus, { | ||
"Content-Type": "application/dicom+json" | ||
}); | ||
return this.response.end(JSON.stringify(badRequestMessage)); | ||
} | ||
|
||
try { | ||
|
||
let renderedImageMultipartWriter = new RenderedImageMultipartWriter( | ||
this.request, | ||
this.response, | ||
StudyImagePathFactory, | ||
renderedService.StudyFramesWriter | ||
); | ||
|
||
await renderedImageMultipartWriter.write(); | ||
|
||
apiLogger.logger.info(`Write Multipart Successfully, study's rendered instances, study UID: ${this.request.params.studyUID}`); | ||
|
||
return this.response.end(); | ||
} catch(e) { | ||
apiLogger.logger.error(e); | ||
|
||
this.response.writeHead(500, { | ||
"Content-Type": "application/dicom+json" | ||
}); | ||
this.response.end(JSON.stringify(e)); | ||
} | ||
} | ||
} | ||
/** | ||
* | ||
* @param {import("http").IncomingMessage} req | ||
* @param {import("http").ServerResponse} res | ||
* @returns | ||
*/ | ||
module.exports = async function(req, res) { | ||
let controller = new RetrieveRenderedStudyController(req, res); | ||
|
||
await controller.doPipeline(); | ||
}; |
Oops, something went wrong.