Skip to content

Commit b214112

Browse files
authored
Add GQL queries for LanguageEngagements (#3081)
1 parent 0ead0a3 commit b214112

File tree

2 files changed

+49
-1
lines changed

2 files changed

+49
-1
lines changed

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,14 @@ export class EngagementListOutput extends PaginatedList<
4242
itemsDescription: PaginatedList.itemDescriptionFor('engagements'),
4343
}) {}
4444

45+
@ObjectType()
46+
export class LanguageEngagementListOutput extends PaginatedList(
47+
LanguageEngagement,
48+
{
49+
itemsDescription: PaginatedList.itemDescriptionFor('language engagements'),
50+
},
51+
) {}
52+
4553
@ObjectType({
4654
description: SecuredList.descriptionFor('engagements'),
4755
})

src/components/engagement/engagement.resolver.ts

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
} from '@nestjs/graphql';
99
import {
1010
AnonSession,
11+
InvalidIdForTypeException,
1112
ListArg,
1213
LoggedInSession,
1314
mapSecuredValue,
@@ -17,7 +18,11 @@ import {
1718
import { Loader, LoaderOf } from '../../core';
1819
import { CeremonyLoader, SecuredCeremony } from '../ceremony';
1920
import { ChangesetIds, IdsAndView, IdsAndViewArg } from '../changeset/dto';
20-
import { EngagementLoader, EngagementService } from '../engagement';
21+
import {
22+
EngagementLoader,
23+
EngagementService,
24+
LanguageEngagementListOutput,
25+
} from '../engagement';
2126
import {
2227
CreateInternshipEngagementInput,
2328
CreateInternshipEngagementOutput,
@@ -28,6 +33,7 @@ import {
2833
EngagementListInput,
2934
EngagementListOutput,
3035
IEngagement,
36+
LanguageEngagement,
3137
UpdateInternshipEngagementInput,
3238
UpdateInternshipEngagementOutput,
3339
UpdateLanguageEngagementInput,
@@ -48,6 +54,20 @@ export class EngagementResolver {
4854
return await engagements.load(key);
4955
}
5056

57+
@Query(() => LanguageEngagement, {
58+
description: 'Lookup a LanguageEngagement by ID',
59+
})
60+
async languageEngagement(
61+
@IdsAndViewArg() key: IdsAndView,
62+
@Loader(EngagementLoader) engagements: LoaderOf<EngagementLoader>,
63+
): Promise<Engagement> {
64+
const engagement = await engagements.load(key);
65+
if (engagement.__typename !== 'LanguageEngagement') {
66+
throw new InvalidIdForTypeException();
67+
}
68+
return engagement;
69+
}
70+
5171
@Query(() => EngagementListOutput, {
5272
description: 'Look up engagements',
5373
})
@@ -61,6 +81,26 @@ export class EngagementResolver {
6181
return list;
6282
}
6383

84+
@Query(() => LanguageEngagementListOutput, {
85+
description: 'Look up language engagements',
86+
})
87+
async languageEngagements(
88+
@ListArg(EngagementListInput) input: EngagementListInput,
89+
@AnonSession() session: Session,
90+
@Loader(EngagementLoader) engagements: LoaderOf<EngagementLoader>,
91+
): Promise<EngagementListOutput> {
92+
const list = await this.service.list(
93+
{
94+
...input,
95+
filter: { ...input.filter, type: 'language' },
96+
},
97+
session,
98+
);
99+
engagements.primeAll(list.items);
100+
101+
return list;
102+
}
103+
64104
@ResolveField(() => SecuredCeremony)
65105
async ceremony(
66106
@Parent() engagement: Engagement,

0 commit comments

Comments
 (0)