Skip to content

Commit

Permalink
feat(mongodb): implement change filtered mwl items' status
Browse files Browse the repository at this point in the history
  • Loading branch information
Chinlinlee committed Dec 16, 2023
1 parent 302b2bd commit 2e9a48d
Show file tree
Hide file tree
Showing 4 changed files with 103 additions and 4 deletions.
40 changes: 40 additions & 0 deletions api/dicom-web/controller/MWL-RS/change-filtered-mwlItem-status.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
const { ApiErrorArrayHandler } = require("@error/api-errors.handler");
const { Controller } = require("@root/api/controller.class");
const { ApiLogger } = require("@root/utils/logs/api-logger");
const { ChangeFilteredMwlItemStatusService } = require("./service/change-filtered-mwlItem-status");

class ChangeFilteredMwlItemStatusController extends Controller {
constructor(req, res) {
super(req, res);
this.apiLogger = new ApiLogger(this.request, "MWL-RS");
}

async mainProcess() {
try {
let changeFilteredMwlItemService = new ChangeFilteredMwlItemStatusService(this.request, this.response);
let changedMwlItemsCount = await changeFilteredMwlItemService.changeMwlItemsStatus();

return this.response
.set("Content-Type", "application/dicom+json")
.status(200)
.json({
updatedCount: changedMwlItemsCount
});

} catch (e) {
let apiErrorArrayHandler = new ApiErrorArrayHandler(this.response, this.apiLogger, e);
return apiErrorArrayHandler.doErrorResponse();
}
}
}

/**
*
* @param {import('express').Request} req
* @param {import('express').Response} res
*/
module.exports = async function (req, res) {
let controller = new ChangeFilteredMwlItemStatusController(req, res);

await controller.doPipeline();
};
7 changes: 3 additions & 4 deletions api/dicom-web/controller/MWL-RS/change-mwlItem-status.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
const { ApiErrorArrayHandler } = require("@error/api-errors.handler");
const { Controller } = require("@root/api/controller.class");
const { ApiLogger } = require("@root/utils/logs/api-logger");
const { GetMwlItemCountService } = require("./service/count-mwlItem.service");
const { ChangeMwlItemStatusService } = require("./service/change-mwlItem-status");

class ChangeMwlItemStatusCountController extends Controller {
class ChangeMwlItemStatusController extends Controller {
constructor(req, res) {
super(req, res);
this.apiLogger = new ApiLogger(this.request, "MWL-RS");
Expand All @@ -14,7 +13,7 @@ class ChangeMwlItemStatusCountController extends Controller {
try {
let changeMwlItemService = new ChangeMwlItemStatusService(this.request, this.response);
let changedMwlItems = await changeMwlItemService.changeMwlItemsStatus();

return this.response
.set("Content-Type", "application/dicom+json")
.status(200)
Expand All @@ -33,7 +32,7 @@ class ChangeMwlItemStatusCountController extends Controller {
* @param {import('express').Response} res
*/
module.exports = async function (req, res) {
let controller = new ChangeMwlItemStatusCountController(req, res);
let controller = new ChangeMwlItemStatusController(req, res);

await controller.doPipeline();
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
const _ = require("lodash");
const { MwlItemModel } = require("@models/mongodb/models/mwlitems.model");
const { DicomWebServiceError, DicomWebStatusCodes } = require("@error/dicom-web-service");
const { dictionary } = require("@models/DICOM/dicom-tags-dic");
const { convertRequestQueryToMongoQuery } = require("../../QIDO-RS/service/query-dicom-json-factory");
const { BaseQueryService } = require("@root/api/dicom-web/service/base-query.service");

class ChangeFilteredMwlItemStatusService extends BaseQueryService {
constructor(req, res) {
super(req, res);
}

async changeMwlItemsStatus() {
let { status } = this.request.params;
let mwlItems = await this.getMwlItems();
if (mwlItems.length === 0) {
throw new DicomWebServiceError(DicomWebStatusCodes.NoSuchObjectInstance, "Can not found any MWL item from query", 404);
}

for (let mwlItem of mwlItems) {
_.set(mwlItem, `${dictionary.keyword.ScheduledProcedureStepSequence}.Value.0.${dictionary.keyword.ScheduledProcedureStepStatus}.Value.0`, status);
await mwlItem.save();
}

return mwlItems.length;
}

async getMwlItems() {
let query = (await convertRequestQueryToMongoQuery(this.query)).$match;
return await MwlItemModel.find(query);
}
}

module.exports.ChangeFilteredMwlItemStatusService = ChangeFilteredMwlItemStatusService;
26 changes: 26 additions & 0 deletions api/dicom-web/mwl-rs.route.js
Original file line number Diff line number Diff line change
Expand Up @@ -131,4 +131,30 @@ router.post("/mwlitems/:studyUID/:spsID/status/:status",
require("./controller/MWL-RS/change-mwlItem-status")
);

/**
* @openapi
* /dicom-web/mwlitems/status/{spsStatus}:
* post:
* tags:
* - MWL-RS
* description: >
* This transaction create or update a Modality WorkList item.
* requestBody:
* content:
* application/dicom+json:
* parameters:
* - $ref: "#/components/parameters/spsStatus"
* - $ref: "#/components/parameters/filter"
* responses:
* "200":
* description: change status of mwl items successfully
*/
router.post("/mwlitems/status/:status",
validateByJoi(
Joi.object({
status: Joi.string().valid("SCHEDULED", "ARRIVED", "READY", "STARTED", "DEPARTED", "CANCELED", "DISCONTINUED", "COMPLETED").required()
}), "params", {allowUnknown: false}),
require("./controller/MWL-RS/change-filtered-mwlItem-status")
);

module.exports = router;

0 comments on commit 2e9a48d

Please sign in to comment.