diff --git a/app/routes/report/kbMatches.js b/app/routes/report/kbMatches.js index ee420eb9e..1edabd652 100644 --- a/app/routes/report/kbMatches.js +++ b/app/routes/report/kbMatches.js @@ -59,7 +59,7 @@ router.route('/:kbMatch([A-z0-9-]{36})') router.route('/') .get(async (req, res) => { - const {query: {matchedCancer, approvedTherapy, category}} = req; + const {query: {matchedCancer, approvedTherapy, category, iprEvidenceLevel}} = req; // Check cache const key = generateKey(`/reports/${req.report.ident}/kb-matches`, req.query); @@ -79,6 +79,7 @@ router.route('/') const results = await db.models.kbMatches.scope('public').findAll({ where: { reportId: req.report.id, + ...((iprEvidenceLevel) ? {iprEvidenceLevel: {[Op.in]: iprEvidenceLevel.split(',')}} : {}), ...((category) ? {category: {[Op.in]: category.split(',')}} : {}), ...((typeof matchedCancer === 'boolean') ? {matchedCancer} : {}), ...((typeof approvedTherapy === 'boolean') ? {approvedTherapy} : {}), diff --git a/app/routes/report/report.js b/app/routes/report/report.js index 552024177..6f3e88d36 100644 --- a/app/routes/report/report.js +++ b/app/routes/report/report.js @@ -6,10 +6,8 @@ const createReport = require('../../libs/createReport'); const {parseReportSortQuery} = require('../../libs/queryOperations'); const db = require('../../models'); const logger = require('../../log'); -const cache = require('../../cache'); const {getUserProjects} = require('../../libs/helperFunctions'); -const {generateKey} = require('../../libs/cacheFunctions'); const {hasAccessToNonProdReports} = require('../../libs/helperFunctions'); const reportMiddleware = require('../../middleware/report'); @@ -158,19 +156,6 @@ router.route('/') } } - // Generate cache key - const key = (req.query.role) ? null : generateKey('/reports', req.query, {projectAccess: projects}); - - try { - const cacheResults = await cache.get(key); - if (cacheResults) { - res.type('json'); - return res.send(cacheResults); - } - } catch (error) { - logger.error(`Error while checking cache for reports ${error}`); - } - // Generate options for report query const opts = { where: { @@ -252,10 +237,6 @@ router.route('/') const reports = await db.models.report.scope('public').findAndCountAll(opts); const results = {total: reports.count, reports: reports.rows}; - if (key) { - cache.set(key, JSON.stringify(results), 'EX', 14400); - } - return res.json(results); } catch (error) { logger.error(`Unable to lookup reports ${error}`); diff --git a/app/routes/report/variants.js b/app/routes/report/variants.js index cb604d40c..46b6b73a1 100644 --- a/app/routes/report/variants.js +++ b/app/routes/report/variants.js @@ -10,7 +10,7 @@ const logger = require('../../log'); const {KB_PIVOT_MAPPING} = require('../../constants'); const KBMATCHEXCLUDE = ['id', 'reportId', 'variantId', 'deletedAt', 'updatedBy']; -const MUTATION_REGEX = '^([^\\s]+)(\\s)mutation[s]?$'; +const MUTATION_REGEX = '^([^\\s]+)(\\s)(mutation[s]?)?(missense)?$'; const getVariants = async (tableName, variantType, reportId) => { return db.models[tableName].scope('extended').findAll({ diff --git a/app/routes/swagger/swagger.json b/app/routes/swagger/swagger.json index de192cee7..e504b53c8 100644 --- a/app/routes/swagger/swagger.json +++ b/app/routes/swagger/swagger.json @@ -4421,16 +4421,21 @@ } }, { - "name": "rapidTable", + "name": "category", "in": "query", "required": false, - "description": "Filter according to chosen rapidTable", + "description": "Filter by category field. Comma separated field", "schema": { - "type": "string", - "enum": [ - "therapeuticAssociation", - "cancerRelevance" - ] + "type": "string" + } + }, + { + "name": "iprEvidenceLevel", + "in": "query", + "required": false, + "description": "Filter by iprEvidenceLevel field. Comma separated field", + "schema": { + "type": "string" } } ], diff --git a/package-lock.json b/package-lock.json index 981dcd02d..311a529fa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ipr-api", - "version": "7.16.1", + "version": "7.16.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "ipr-api", - "version": "7.16.1", + "version": "7.16.2", "license": "GPL-3.0", "dependencies": { "@alt3/sequelize-to-json-schemas": "^0.3.56", diff --git a/package.json b/package.json index 145c2bf30..f86b98351 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "private": true, "name": "ipr-api", - "version": "7.16.1", + "version": "7.16.2", "description": "Integrated Pipeline Reports API", "main": "bin/server.js", "scripts": { diff --git a/test/routes/report/kbMatches.test.js b/test/routes/report/kbMatches.test.js index d56ab0ecd..adb4c0285 100644 --- a/test/routes/report/kbMatches.test.js +++ b/test/routes/report/kbMatches.test.js @@ -46,6 +46,7 @@ describe('/reports/{REPORTID}/kb-matches', () => { let variant; let kbMatch; let createData; + let createDataFilteringTest; beforeAll(async () => { // Get genomic template @@ -69,9 +70,19 @@ describe('/reports/{REPORTID}/kb-matches', () => { variantId: variant.id, category: 'unknown', variantType: 'cnv', + iprEvidenceLevel: 'IPR-A', + }; + + createDataFilteringTest = { + reportId: report.id, + variantId: variant.id, + category: 'unknown', + variantType: 'cnv', + iprEvidenceLevel: 'IPR-B', }; kbMatch = await db.models.kbMatches.create(createData); + await db.models.kbMatches.create(createDataFilteringTest); }, LONGER_TIMEOUT); describe('GET', () => { @@ -86,6 +97,19 @@ describe('/reports/{REPORTID}/kb-matches', () => { checkKbMatch(res.body[0]); }); + test('Filtering kb-matches is ok', async () => { + const res = await request + .get(`/api/reports/${report.ident}/kb-matches`) + .query({iprEvidenceLevel: 'IPR-A,IPR-C'}) + .auth(username, password) + .type('json') + .expect(HTTP_STATUS.OK); + + expect(Array.isArray(res.body)).toBe(true); + checkKbMatch(res.body[0]); + res.body.every((match) => {return expect(match.iprEvidenceLevel).toEqual('IPR-A');}); + }); + test('Getting a specific kb-match is ok', async () => { const res = await request .get(`/api/reports/${report.ident}/kb-matches/${kbMatch.ident}`) diff --git a/test/routes/report/variants.test.js b/test/routes/report/variants.test.js index 3d4d069da..07e110d28 100644 --- a/test/routes/report/variants.test.js +++ b/test/routes/report/variants.test.js @@ -367,7 +367,7 @@ describe('/reports/{REPORTID}/kb-matches', () => { category: 'therapeutic', variantType: 'mut', iprEvidenceLevel: 'IPR-A', - kbVariant: 'geneX mutation', + kbVariant: 'geneX missense', matchedCancer: true, };