Skip to content

Commit 4e4cbae

Browse files
Merge pull request #476 from bcgsc/feature/DEVSU-2824-add-mutation-signature-search
DEVSU-2824 Add Mutation Signatures and MSI Status Search Categories
2 parents d0203c4 + 54d7c9a commit 4e4cbae

2 files changed

Lines changed: 50 additions & 6 deletions

File tree

app/libs/fuzzySearch.js

Lines changed: 48 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ const PARAM_TABLE_MAP = {
1010
structuralVariant: 'reports_structural_variants',
1111
smallMutation: 'reports_small_mutations',
1212
therapeuticTarget: 'reports_therapeutic_targets',
13+
mutationSignature: 'reports_mutation_signature',
14+
msiStatus: 'reports_msi',
1315
};
1416

1517
const PARAM_COLUMN_MAP = {
@@ -21,6 +23,8 @@ const PARAM_COLUMN_MAP = {
2123
structuralVariant: 'display_name',
2224
smallMutation: 'display_name',
2325
therapeuticTarget: 'therapy',
26+
mutationSignature: 'signature',
27+
msiStatus: 'score',
2428
};
2529

2630
const PARAM_MODEL_MAP = {
@@ -32,6 +36,8 @@ const PARAM_MODEL_MAP = {
3236
structuralVariant: 'structuralVariants',
3337
smallMutation: 'smallMutations',
3438
therapeuticTarget: 'therapeuticTarget',
39+
mutationSignature: 'mutationSignature',
40+
msiStatus: 'msi',
3541
};
3642

3743
const PARAM_ATTRIBUTE_MAP = {
@@ -43,6 +49,8 @@ const PARAM_ATTRIBUTE_MAP = {
4349
structuralVariant: ['displayName'],
4450
smallMutation: ['displayName'],
4551
therapeuticTarget: ['therapy', 'context'],
52+
mutationSignature: ['signature', 'selected'],
53+
msiStatus: ['score'],
4654
};
4755

4856
const fuzzySearchQuery = (searchParams) => {
@@ -79,6 +87,31 @@ const fuzzySearchQuery = (searchParams) => {
7987
${fuzzyQuery ? 'INTERSECT' : ''}
8088
${fuzzyQuery ?? ''}`;
8189
fuzzyQuery = newFuzzyQuery;
90+
} else if (tableName === 'reports_mutation_signature') {
91+
const newFuzzyQuery = `SELECT "report_id"
92+
FROM (SELECT report_id, word_similarity('${paramKeyword}', "${columnName}"), ${tableName}.deleted_at AS dlt
93+
FROM ${tableName}
94+
WHERE selected=true) AS subquery
95+
WHERE word_similarity >= ${matchingThreshold} AND dlt IS NULL
96+
${fuzzyQuery ? 'INTERSECT' : ''}
97+
${fuzzyQuery ?? ''}`;
98+
fuzzyQuery = newFuzzyQuery;
99+
} else if (tableName === 'reports_msi') {
100+
let newFuzzyQuery;
101+
if (paramKeyword.toLowerCase() === 'msi') {
102+
newFuzzyQuery = `SELECT "report_id"
103+
FROM ${tableName}
104+
WHERE ${columnName} >= 20 AND deleted_at IS NULL
105+
${fuzzyQuery ? 'INTERSECT' : ''}
106+
${fuzzyQuery ?? ''}`;
107+
} else if (paramKeyword.toLowerCase() === 'mss') {
108+
newFuzzyQuery = `SELECT "report_id"
109+
FROM ${tableName}
110+
WHERE ${columnName} < 20 AND deleted_at IS NULL
111+
${fuzzyQuery ? 'INTERSECT' : ''}
112+
${fuzzyQuery ?? ''}`;
113+
}
114+
fuzzyQuery = newFuzzyQuery;
82115
} else {
83116
const newFuzzyQuery = `SELECT "report_id"
84117
FROM (SELECT report_id, word_similarity('${paramKeyword}', "${columnName}"), ${tableName}.deleted_at AS dlt
@@ -121,12 +154,21 @@ const fuzzySearchInclude = (searchParams, db, searchCategory) => {
121154
const tableName = PARAM_TABLE_MAP[paramCategory];
122155
const columnName = PARAM_COLUMN_MAP[paramCategory];
123156
// Construct fuzzy search query
124-
const newFuzzyQuery = `SELECT "${columnName}"
125-
FROM (SELECT "${columnName}", word_similarity('${paramKeyword}', "${columnName}")
126-
FROM ${tableName}) AS subquery
127-
WHERE word_similarity >= ${matchingThreshold}
128-
${fuzzyQuery ? 'UNION' : ''}
129-
${fuzzyQuery ?? ''}`;
157+
let newFuzzyQuery;
158+
if (tableName === 'reports_msi') {
159+
newFuzzyQuery = `SELECT "${columnName}"
160+
FROM ${tableName}
161+
${fuzzyQuery ? 'UNION' : ''}
162+
${fuzzyQuery ?? ''}`;
163+
} else {
164+
newFuzzyQuery = `SELECT "${columnName}"
165+
FROM (SELECT "${columnName}", word_similarity('${paramKeyword}', "${columnName}")
166+
FROM ${tableName}) AS subquery
167+
WHERE word_similarity >= ${matchingThreshold}
168+
${fuzzyQuery ? 'UNION' : ''}
169+
${fuzzyQuery ?? ''}`;
170+
}
171+
130172
fuzzyQuery = newFuzzyQuery;
131173
}
132174
});

app/routes/report/report.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,8 @@ router.route('/')
330330
...((searchParams) ? fuzzySearchInclude(searchParams, db, 'structuralVariant') : []),
331331
...((searchParams) ? fuzzySearchInclude(searchParams, db, 'smallMutation') : []),
332332
...((searchParams) ? fuzzySearchInclude(searchParams, db, 'therapeuticTarget') : []),
333+
...((searchParams) ? fuzzySearchInclude(searchParams, db, 'mutationSignature') : []),
334+
...((searchParams) ? fuzzySearchInclude(searchParams, db, 'msiStatus') : []),
333335
],
334336
};
335337

0 commit comments

Comments
 (0)