support MRI custom overlay data for OHIF through fetchMeta because it couldn't retrieved from C-FIND / FINDSCU

This commit is contained in:
AlfandiMario
2025-11-03 16:05:34 +07:00
parent b316c5c7f6
commit ae53d7faa3
2 changed files with 67 additions and 5 deletions

View File

@@ -51,15 +51,16 @@ module.exports = function (server: FastifyInstance, opts: unknown, done: () => v
const hasStudyDate = query.StudyDate !== undefined;
if (!hasMedicalRecord && !hasAccessionNumber && !hasPatientName && !hasStudyInstanceUID && !hasStudyDate) {
// TODO: buat startDate tgl H-1 karena terkadang kena Bug beda timezone +-7 di file DICOM nya
const startDate = moment().format('YYYYMMDD');
const endDate = moment().format('YYYYMMDD');
query.StudyDate = `${startDate}-${endDate}`;
// Add time range filter (entire day)
const startTime = '000000';
const endTime = '235959';
query['00080030'] = `${startTime}-${endTime}`; // StudyTime (0008,0030)
logger.info(`Adding default date range filter: ${query.StudyDate}`);
logger.info(`Adding default time range filter: ${query['00080030']}`);
}
@@ -67,14 +68,14 @@ module.exports = function (server: FastifyInstance, opts: unknown, done: () => v
logger.info(`Querying studies with filters: ${JSON.stringify(query)}`);
const json = deepmerge.all(await doFind(QUERY_LEVEL.STUDY, query), options);
// Karena by default hasilnya urut StudyTime (ascending),
// Maka, jika butuh latest first (descending), maka dibalik urutannya
if (Array.isArray(json) && json.length > 0) {
logger.info(`Reversing order of ${json.length} studies to show latest first`);
json.reverse();
}
return reply.send(json);
} catch (error) {
logger.error(error);
@@ -410,6 +411,25 @@ module.exports = function (server: FastifyInstance, opts: unknown, done: () => v
}
});
server.get<{
Params: IParamsImage;
Querystring: QueryParams;
}>('/rs/studies/:studyInstanceUid/series/:seriesInstanceUid/instances/:sopInstanceUid/metadata', async (req, reply) => {
const { studyInstanceUid, seriesInstanceUid, sopInstanceUid } = req.params;
const { query } = req;
query.StudyInstanceUID = studyInstanceUid;
query.SeriesInstanceUID = seriesInstanceUid;
query.SOPInstanceUID = sopInstanceUid;
try {
const rsp = await fetchMeta(query, studyInstanceUid, seriesInstanceUid);
return reply.send(rsp);
} catch (error) {
logger.error(error);
return reply.send(500);
}
});
done();
};