Skip to content

Commit 5f01913

Browse files
rdonigianCarsonF
authored andcommitted
Allow searching for Languages by Ethnologue values
1 parent 7a0c5c2 commit 5f01913

File tree

3 files changed

+17
-1
lines changed

3 files changed

+17
-1
lines changed

src/components/search/dto/search-results.dto.ts

+1
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ const publicSearchable = {
6464
// since they are expected to be used only for internal use.
6565
const privateSearchable = {
6666
PartnerByOrg: Partner,
67+
LanguageByEth: Language,
6768
} as const;
6869

6970
// Expand this to add more search types, but not result types.

src/components/search/search.module.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
import { Module } from '@nestjs/common';
22
import { AuthorizationModule } from '../authorization/authorization.module';
3+
import { LanguageModule } from '../language/language.module';
34
import { PartnerModule } from '../partner/partner.module';
45
import { SearchRepository } from './search.repository';
56
import { SearchResolver } from './search.resolver';
67
import { SearchService } from './search.service';
78

89
@Module({
9-
imports: [PartnerModule, AuthorizationModule],
10+
imports: [PartnerModule, AuthorizationModule, LanguageModule],
1011
providers: [SearchResolver, SearchService, SearchRepository],
1112
exports: [SearchService],
1213
})

src/components/search/search.service.ts

+14
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { ValueOf } from 'type-fest';
44
import { ID, NotFoundException, ServerException, Session } from '~/common';
55
import { ResourceMap, ResourceResolver, ResourcesHost } from '~/core';
66
import { Privileges } from '../authorization';
7+
import { LanguageService } from '../language';
78
import { PartnerService } from '../partner';
89
import {
910
SearchableMap,
@@ -37,6 +38,10 @@ export class SearchService {
3738
...(await this.partners.readOnePartnerByOrgId(...args)),
3839
__typename: 'Partner',
3940
}),
41+
LanguageByEth: async (...args) => ({
42+
...(await this.languages.readOneByEthId(...args)),
43+
__typename: 'Language',
44+
}),
4045
};
4146
/* eslint-enable @typescript-eslint/naming-convention */
4247

@@ -45,6 +50,7 @@ export class SearchService {
4550
private readonly resources: ResourceResolver,
4651
private readonly privileges: Privileges,
4752
private readonly partners: PartnerService,
53+
private readonly languages: LanguageService,
4854
private readonly repo: SearchRepository,
4955
) {}
5056

@@ -55,6 +61,7 @@ export class SearchService {
5561
const types = new Set<keyof ResourceMap>(inputTypes);
5662
// Include dependency types for types that have identifiers in sub-resources.
5763
inputTypes.has('Partner') && types.add('Organization');
64+
inputTypes.has('Language') && types.add('EthnologueLanguage');
5865

5966
// Search for nodes based on input, only returning their id and "type"
6067
// which is based on their first valid search label.
@@ -89,6 +96,13 @@ export class SearchService {
8996
: []),
9097
];
9198
}
99+
if (result.type === 'EthnologueLanguage') {
100+
return {
101+
type: 'LanguageByEth',
102+
id: result.id,
103+
matchedProps: ['ethnologue'],
104+
} as const;
105+
}
92106

93107
return setHas(inputTypes, result.type)
94108
? (result as Extract<typeof result, { type: keyof SearchableMap }>)

0 commit comments

Comments
 (0)