Skip to content

Commit 7e8e893

Browse files
authored
Merge pull request #1984 from bcgov/hotfix/ALCS-2384-exclude-results-with-no-tags
ALCS-2384 Prevent results when tags filters are on
2 parents 0aa9c9d + d9d9635 commit 7e8e893

File tree

4 files changed

+118
-189
lines changed

4 files changed

+118
-189
lines changed

services/apps/alcs/src/alcs/search/inquiry/inquiry-advanced-search.service.ts

+46-83
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,7 @@ export class InquiryAdvancedSearchService {
4343
fileNumbers = new Set<string>(cachedNumbers);
4444
} else {
4545
fileNumbers = await this.searchForFileNumbers(searchDto);
46-
await client.setEx(
47-
searchKey,
48-
SEARCH_CACHE_TIME,
49-
JSON.stringify([...fileNumbers.values()]),
50-
);
46+
await client.setEx(searchKey, SEARCH_CACHE_TIME, JSON.stringify([...fileNumbers.values()]));
5147
}
5248

5349
if (fileNumbers.size === 0) {
@@ -59,23 +55,15 @@ export class InquiryAdvancedSearchService {
5955

6056
let query = this.inquirySearchViewRepository
6157
.createQueryBuilder('inquirySearch', queryRunner)
62-
.innerJoinAndMapOne(
63-
'inquirySearch.inquiryType',
64-
'inquirySearch.inquiryType',
65-
'inquiryType',
66-
)
58+
.innerJoinAndMapOne('inquirySearch.inquiryType', 'inquirySearch.inquiryType', 'inquiryType')
6759
.andWhere('inquirySearch.fileNumber IN(:...fileNumbers)', {
6860
fileNumbers: [...fileNumbers.values()],
6961
});
7062

7163
const sortQuery = this.compileSortQuery(searchDto);
7264

7365
query = query
74-
.orderBy(
75-
sortQuery,
76-
searchDto.sortDirection,
77-
searchDto.sortDirection === 'ASC' ? 'NULLS FIRST' : 'NULLS LAST',
78-
)
66+
.orderBy(sortQuery, searchDto.sortDirection, searchDto.sortDirection === 'ASC' ? 'NULLS FIRST' : 'NULLS LAST')
7967
.offset((searchDto.page - 1) * searchDto.pageSize)
8068
.limit(searchDto.pageSize);
8169

@@ -148,19 +136,22 @@ export class InquiryAdvancedSearchService {
148136
this.addLegacyIDResults(searchDto, promises);
149137
}
150138

139+
if (searchDto.tagIds && searchDto.tagIds.length > 0) {
140+
this.addTagsResults(promises);
141+
}
142+
143+
if (searchDto.tagCategoryId) {
144+
this.addTagCategoryResults(promises);
145+
}
146+
151147
const t0 = performance.now();
152148
const finalResult = await processSearchPromises(promises);
153149
const t1 = performance.now();
154-
this.logger.debug(
155-
`ALCS Inquiry pre-search search took ${t1 - t0} milliseconds.`,
156-
);
150+
this.logger.debug(`ALCS Inquiry pre-search search took ${t1 - t0} milliseconds.`);
157151
return finalResult;
158152
}
159153

160-
private addFileNumberResults(
161-
searchDto: SearchRequestDto,
162-
promises: Promise<{ fileNumber: string }[]>[],
163-
) {
154+
private addFileNumberResults(searchDto: SearchRequestDto, promises: Promise<{ fileNumber: string }[]>[]) {
164155
const promise = this.inquiryRepository.find({
165156
where: {
166157
fileNumber: searchDto.fileNumber,
@@ -172,10 +163,7 @@ export class InquiryAdvancedSearchService {
172163
promises.push(promise);
173164
}
174165

175-
private async addGovernmentResults(
176-
searchDto: SearchRequestDto,
177-
promises: Promise<{ fileNumber: string }[]>[],
178-
) {
166+
private async addGovernmentResults(searchDto: SearchRequestDto, promises: Promise<{ fileNumber: string }[]>[]) {
179167
const government = await this.governmentRepository.findOneByOrFail({
180168
name: searchDto.governmentName,
181169
});
@@ -191,10 +179,7 @@ export class InquiryAdvancedSearchService {
191179
promises.push(promise);
192180
}
193181

194-
private addRegionResults(
195-
searchDto: SearchRequestDto,
196-
promises: Promise<{ fileNumber: string }[]>[],
197-
) {
182+
private addRegionResults(searchDto: SearchRequestDto, promises: Promise<{ fileNumber: string }[]>[]) {
198183
const promise = this.inquiryRepository.find({
199184
where: {
200185
regionCode: searchDto.regionCode,
@@ -206,21 +191,14 @@ export class InquiryAdvancedSearchService {
206191
promises.push(promise);
207192
}
208193

209-
private addNameResults(
210-
searchDto: SearchRequestDto,
211-
promises: Promise<{ fileNumber: string }[]>[],
212-
) {
213-
const formattedSearchString =
214-
formatStringToPostgresSearchStringArrayWithWildCard(searchDto.name!);
194+
private addNameResults(searchDto: SearchRequestDto, promises: Promise<{ fileNumber: string }[]>[]) {
195+
const formattedSearchString = formatStringToPostgresSearchStringArrayWithWildCard(searchDto.name!);
215196
const promise = this.inquiryRepository
216197
.createQueryBuilder('inquiry')
217198
.select('inquiry.fileNumber')
218-
.where(
219-
"LOWER(inquiry.inquirer_first_name || ' ' || inquiry.inquirer_last_name) LIKE ANY (:names)",
220-
{
221-
names: formattedSearchString,
222-
},
223-
)
199+
.where("LOWER(inquiry.inquirer_first_name || ' ' || inquiry.inquirer_last_name) LIKE ANY (:names)", {
200+
names: formattedSearchString,
201+
})
224202
.orWhere('LOWER(inquiry.inquirer_first_name) LIKE ANY (:names)', {
225203
names: formattedSearchString,
226204
})
@@ -234,10 +212,7 @@ export class InquiryAdvancedSearchService {
234212
promises.push(promise);
235213
}
236214

237-
private addParcelResults(
238-
searchDto: SearchRequestDto,
239-
promises: Promise<{ fileNumber: string }[]>[],
240-
) {
215+
private addParcelResults(searchDto: SearchRequestDto, promises: Promise<{ fileNumber: string }[]>[]) {
241216
let query = this.inquiryRepository
242217
.createQueryBuilder('inquiry')
243218
.select('inquiry.fileNumber')
@@ -248,21 +223,15 @@ export class InquiryAdvancedSearchService {
248223
}
249224

250225
if (searchDto.civicAddress) {
251-
query = query.andWhere(
252-
'LOWER(parcel.civic_address) like LOWER(:civic_address)',
253-
{
254-
civic_address: `%${searchDto.civicAddress}%`.toLowerCase(),
255-
},
256-
);
226+
query = query.andWhere('LOWER(parcel.civic_address) like LOWER(:civic_address)', {
227+
civic_address: `%${searchDto.civicAddress}%`.toLowerCase(),
228+
});
257229
}
258230

259231
promises.push(query.getMany());
260232
}
261233

262-
private addFileTypeResults(
263-
searchDto: SearchRequestDto,
264-
promises: Promise<{ fileNumber: string }[]>[],
265-
) {
234+
private addFileTypeResults(searchDto: SearchRequestDto, promises: Promise<{ fileNumber: string }[]>[]) {
266235
const query = this.inquiryRepository
267236
.createQueryBuilder('inquiry')
268237
.select('inquiry.fileNumber')
@@ -273,42 +242,24 @@ export class InquiryAdvancedSearchService {
273242
promises.push(query.getMany());
274243
}
275244

276-
private addSubmittedDateResults(
277-
searchDto: SearchRequestDto,
278-
promises: Promise<{ fileNumber: string }[]>[],
279-
) {
280-
let query = this.inquiryRepository
281-
.createQueryBuilder('inquiry')
282-
.select('inquiry.fileNumber');
245+
private addSubmittedDateResults(searchDto: SearchRequestDto, promises: Promise<{ fileNumber: string }[]>[]) {
246+
let query = this.inquiryRepository.createQueryBuilder('inquiry').select('inquiry.fileNumber');
283247

284248
if (searchDto.dateSubmittedFrom !== undefined) {
285-
query = query.andWhere(
286-
'inquiry.date_submitted_to_alc >= :date_submitted_from',
287-
{
288-
date_submitted_from: getStartOfDayToPacific(
289-
searchDto.dateSubmittedFrom
290-
).toISOString(),
291-
},
292-
);
249+
query = query.andWhere('inquiry.date_submitted_to_alc >= :date_submitted_from', {
250+
date_submitted_from: getStartOfDayToPacific(searchDto.dateSubmittedFrom).toISOString(),
251+
});
293252
}
294253

295254
if (searchDto.dateSubmittedTo !== undefined) {
296-
query = query.andWhere(
297-
'inquiry.date_submitted_to_alc < :date_submitted_to',
298-
{
299-
date_submitted_to: getNextDayToPacific(
300-
searchDto.dateSubmittedTo
301-
).toISOString(),
302-
},
303-
);
255+
query = query.andWhere('inquiry.date_submitted_to_alc < :date_submitted_to', {
256+
date_submitted_to: getNextDayToPacific(searchDto.dateSubmittedTo).toISOString(),
257+
});
304258
}
305259
promises.push(query.getMany());
306260
}
307261

308-
private addLegacyIDResults(
309-
searchDto: SearchRequestDto,
310-
promises: Promise<{ fileNumber: string }[]>[],
311-
) {
262+
private addLegacyIDResults(searchDto: SearchRequestDto, promises: Promise<{ fileNumber: string }[]>[]) {
312263
const promise = this.inquiryRepository.find({
313264
where: {
314265
legacyId: searchDto.legacyId,
@@ -319,4 +270,16 @@ export class InquiryAdvancedSearchService {
319270
});
320271
promises.push(promise);
321272
}
273+
274+
private addTagsResults(promises: Promise<{ fileNumber: string }[]>[]) {
275+
// add tags filter when it's implemented
276+
const emptyPromise = Promise.all([]);
277+
promises.push(emptyPromise);
278+
}
279+
280+
private addTagCategoryResults(promises: Promise<{ fileNumber: string }[]>[]) {
281+
// add tag category filter when it's implemented
282+
const emptyPromise = Promise.all([]);
283+
promises.push(emptyPromise);
284+
}
322285
}

services/apps/alcs/src/alcs/search/notification/notification-advanced-search.service.ts

+10
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,16 @@ export class NotificationAdvancedSearchService {
160160
this.addSubmittedDateResults(searchDto, promises);
161161
}
162162

163+
if (searchDto.tagIds && searchDto.tagIds.length > 0) {
164+
const promise = NOTIFICATION_SEARCH_FILTERS.addTagsResults();
165+
promises.push(promise);
166+
}
167+
168+
if (searchDto.tagCategoryId) {
169+
const promise = NOTIFICATION_SEARCH_FILTERS.addTagCategoryResults();
170+
promises.push(promise);
171+
}
172+
163173
const t0 = performance.now();
164174
const finalResult = await processSearchPromises(promises);
165175
const t1 = performance.now();

0 commit comments

Comments
 (0)