Skip to content

Commit 320603e

Browse files
committed
Add fulltext index & filter for engagement name (project + language/intern)
1 parent 6bb1a8c commit 320603e

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

src/components/engagement/dto/list-engagements.dto.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ export abstract class EngagementFilters {
2424
})
2525
readonly type?: 'language' | 'internship';
2626

27+
@Field({
28+
nullable: true,
29+
})
30+
readonly name?: string;
31+
2732
@Field(() => [EngagementStatus], {
2833
nullable: true,
2934
})

src/components/engagement/engagement.repository.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import {
3232
createRelationships,
3333
defineSorters,
3434
filter,
35+
FullTextIndex,
3536
INACTIVE,
3637
matchChangesetAndChangedProps,
3738
matchProjectSens,
@@ -514,6 +515,12 @@ export class EngagementRepository extends CommonRepository {
514515
private createIndexes() {
515516
return this.getConstraintsFor(IEngagement);
516517
}
518+
@OnIndex('schema')
519+
private async createSchemaIndexes() {
520+
await this.db.query().apply(NameIndex.create()).run();
521+
await this.db.query().apply(LanguageNameIndex.create()).run();
522+
await this.db.query().apply(InternshipNameIndex.create()).run();
523+
}
517524
}
518525

519526
export const engagementFilters = filter.define(() => EngagementFilters, {
@@ -526,6 +533,17 @@ export const engagementFilters = filter.define(() => EngagementFilters, {
526533
),
527534
}),
528535
status: filter.stringListProp(),
536+
name: filter.fullText({
537+
index: () => NameIndex,
538+
matchToNode: (q) =>
539+
q.match([
540+
node('node', 'Engagement'),
541+
relation('either', '', undefined, ACTIVE),
542+
node('', 'BaseNode'),
543+
relation('out', '', undefined, ACTIVE),
544+
node('match'),
545+
]),
546+
}),
529547
projectId: filter.pathExists((id) => [
530548
node('node'),
531549
relation('in', '', 'engagement'),
@@ -658,3 +676,22 @@ const multiPropsAsSortString = (props: string[]) =>
658676
' + ',
659677
props.map((prop) => `coalesce(${prop}.value, "")`),
660678
) + ' as sortValue';
679+
680+
const NameIndex = FullTextIndex({
681+
indexName: 'EngagementName',
682+
labels: ['ProjectName', 'LanguageName', 'LanguageDisplayName', 'UserName'],
683+
properties: 'value',
684+
analyzer: 'standard-folding',
685+
});
686+
const LanguageNameIndex = FullTextIndex({
687+
indexName: 'LanguageEngagementName',
688+
labels: ['ProjectName', 'LanguageName', 'LanguageDisplayName'],
689+
properties: 'value',
690+
analyzer: 'standard-folding',
691+
});
692+
const InternshipNameIndex = FullTextIndex({
693+
indexName: 'InternshipEngagementName',
694+
labels: ['ProjectName', 'UserName'],
695+
properties: 'value',
696+
analyzer: 'standard-folding',
697+
});

0 commit comments

Comments
 (0)