Skip to content

Commit

Permalink
Expose Partner.engagements (#3209)
Browse files Browse the repository at this point in the history
Co-authored-by: Carson Full <carson_full@tsco.org>
  • Loading branch information
rdonigian and CarsonF committed May 10, 2024
1 parent 12ccab3 commit 5528228
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 1 deletion.
2 changes: 2 additions & 0 deletions src/components/engagement/dto/list-engagements.dto.ts
Expand Up @@ -22,6 +22,8 @@ export abstract class EngagementFilters {
readonly type?: 'language' | 'internship';

readonly projectId?: ID;

readonly partnerId?: ID<'Partner'>;
}

@InputType()
Expand Down
18 changes: 17 additions & 1 deletion src/components/engagement/engagement.repository.ts
Expand Up @@ -23,6 +23,7 @@ import {
coalesce,
createNode,
createRelationships,
filter,
INACTIVE,
matchChangesetAndChangedProps,
matchPropsAndProjectSensAndScopedRoles,
Expand Down Expand Up @@ -338,7 +339,7 @@ export class EngagementRepository extends CommonRepository {
.match([
node('project', 'Project', pickBy({ id: input.filter.projectId })),
relation('out', '', 'engagement', ACTIVE),
node('node', 'Engagement'),
node('node', label),
])
.apply(whereNotDeletedInChangeset(changeset))
.return(['node', 'project'])
Expand All @@ -358,6 +359,21 @@ export class EngagementRepository extends CommonRepository {
),
)
.match(requestingUser(session))
.apply(
filter.builder(input.filter, {
type: filter.skip,
projectId: filter.skip,
partnerId: filter.pathExists((id) => [
node('node'),
relation('in', '', 'engagement'),
node('', 'Project'),
relation('out', '', 'partnership', ACTIVE),
node('', 'Partnership'),
relation('out', '', 'partner'),
node('', 'Partner', { id }),
]),
}),
)
.apply(
this.privileges.for(session, IEngagement).filterToReadable({
wrapContext: oncePerProject,
Expand Down
2 changes: 2 additions & 0 deletions src/components/partner/partner.module.ts
@@ -1,6 +1,7 @@
import { forwardRef, Module } from '@nestjs/common';
import { splitDb } from '~/core';
import { AuthorizationModule } from '../authorization/authorization.module';
import { EngagementModule } from '../engagement/engagement.module';
import { LanguageModule } from '../language/language.module';
import { OrganizationModule } from '../organization/organization.module';
import { ProjectModule } from '../project/project.module';
Expand All @@ -14,6 +15,7 @@ import { PartnerService } from './partner.service';
@Module({
imports: [
forwardRef(() => AuthorizationModule),
forwardRef(() => EngagementModule),
forwardRef(() => LanguageModule),
forwardRef(() => ProjectModule),
forwardRef(() => OrganizationModule),
Expand Down
23 changes: 23 additions & 0 deletions src/components/partner/partner.resolver.ts
Expand Up @@ -18,6 +18,11 @@ import {
Session,
} from '../../common';
import { Loader, LoaderOf } from '../../core';
import {
EngagementListInput,
EngagementListOutput,
EngagementLoader,
} from '../engagement';
import { FieldRegionLoader, SecuredFieldRegions } from '../field-region';
import {
LanguageListInput,
Expand Down Expand Up @@ -175,6 +180,24 @@ export class PartnerResolver {
return list;
}

@ResolveField(() => EngagementListOutput, {
description: "Engagements of the partner's affiliated projects",
})
async engagements(
@AnonSession() session: Session,
@Parent() partner: Partner,
@ListArg(EngagementListInput) input: EngagementListInput,
@Loader(EngagementLoader) loader: LoaderOf<EngagementLoader>,
): Promise<EngagementListOutput> {
const list = await this.partnerService.listEngagements(
partner,
input,
session,
);
loader.primeAll(list.items);
return list;
}

@Mutation(() => CreatePartnerOutput, {
description: 'Create a partner',
})
Expand Down
16 changes: 16 additions & 0 deletions src/components/partner/partner.service.ts
Expand Up @@ -11,6 +11,7 @@ import {
} from '~/common';
import { HandleIdLookup, ResourceLoader } from '~/core';
import { Privileges } from '../authorization';
import { EngagementListInput, EngagementService } from '../engagement';
import {
LanguageListInput,
LanguageService,
Expand Down Expand Up @@ -40,6 +41,8 @@ export class PartnerService {
private readonly privileges: Privileges,
@Inject(forwardRef(() => ProjectService))
private readonly projectService: ProjectService & {},
@Inject(forwardRef(() => EngagementService))
private readonly engagementService: EngagementService & {},
@Inject(forwardRef(() => LanguageService))
private readonly languageService: LanguageService & {},
private readonly repo: PartnerRepository,
Expand Down Expand Up @@ -185,6 +188,19 @@ export class PartnerService {
canCreate: false,
};
}
async listEngagements(
partner: Partner,
input: EngagementListInput,
session: Session,
) {
return await this.engagementService.list(
{
...input,
filter: { ...input.filter, partnerId: partner.id },
},
session,
);
}

protected verifyFinancialReportingType(
financialReportingTypes: FinancialReportingType[] | undefined,
Expand Down

0 comments on commit 5528228

Please sign in to comment.