Skip to content

Commit 5eda0ac

Browse files
committed
Expose Project.primaryPartnership
1 parent 6c236ac commit 5eda0ac

File tree

5 files changed

+33
-0
lines changed

5 files changed

+33
-0
lines changed

src/components/partnership/dto/partnership.dto.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
Secured,
99
SecuredBoolean,
1010
SecuredDateNullable,
11+
SecuredProperty,
1112
SecuredProps,
1213
Sensitivity,
1314
SensitivityField,
@@ -92,3 +93,8 @@ declare module '~/core/resources/map' {
9293
Partnership: typeof e.default.Partnership;
9394
}
9495
}
96+
97+
@ObjectType({
98+
description: SecuredProperty.descriptionFor('a partnership'),
99+
})
100+
export class SecuredPartnership extends SecuredProperty(Partnership) {}

src/components/project/dto/project.dto.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,8 @@ class Project extends Interfaces {
124124
@Calculated()
125125
readonly status: ProjectStatus;
126126

127+
readonly primaryPartnership: Secured<LinkTo<'Partnership'> | null>;
128+
127129
readonly primaryLocation: Secured<LinkTo<'Location'> | null>;
128130

129131
readonly marketingLocation: Secured<LinkTo<'Location'> | null>;

src/components/project/project.edgedb.repository.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ const hydrate = e.shape(e.Project, (project) => ({
2727
__typename: project.__type__.name.slice(9, null),
2828

2929
rootDirectory: true,
30+
primaryPartnership: e
31+
.select(project.partnerships, (p) => ({
32+
filter: e.op(p.primary, '=', true),
33+
}))
34+
.assert_single(),
3035
primaryLocation: true,
3136
marketingLocation: true,
3237
marketingRegionOverride: true,

src/components/project/project.repository.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import {
2727
requestingUser,
2828
SortCol,
2929
sortWith,
30+
variable,
3031
} from '~/core/database/query';
3132
import { Privileges } from '../authorization';
3233
import { locationSorters } from '../location/location.repository';
@@ -86,6 +87,13 @@ export class ProjectRepository extends CommonRepository {
8687
relation('out', '', 'rootDirectory', ACTIVE),
8788
node('rootDirectory', 'Directory'),
8889
])
90+
.optionalMatch([
91+
node('node'),
92+
relation('out', '', 'partnership', ACTIVE),
93+
node('primaryPartnership', 'Partnership'),
94+
relation('out', '', 'primary', ACTIVE),
95+
node('', 'Property', { value: variable('true') }),
96+
])
8997
.optionalMatch([
9098
node('node'),
9199
relation('out', '', 'primaryLocation', ACTIVE),
@@ -125,6 +133,7 @@ export class ProjectRepository extends CommonRepository {
125133
type: 'node.type',
126134
pinned: 'exists((:User { id: $requestingUser })-[:pinned]->(node))',
127135
rootDirectory: 'rootDirectory { .id }',
136+
primaryPartnership: 'primaryPartnership { .id }',
128137
primaryLocation: 'primaryLocation { .id }',
129138
marketingLocation: 'marketingLocation { .id }',
130139
fieldRegion: 'fieldRegion { .id }',

src/components/project/project.resolver.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ import { SecuredOrganization } from '../organization/dto';
4343
import { PartnershipLoader } from '../partnership';
4444
import {
4545
PartnershipListInput,
46+
SecuredPartnership,
4647
SecuredPartnershipList,
4748
} from '../partnership/dto';
4849
import { ProjectChangeRequestLoader } from '../project-change-request';
@@ -281,6 +282,16 @@ export class ProjectResolver {
281282
};
282283
}
283284

285+
@ResolveField(() => SecuredPartnership)
286+
async primaryPartnership(
287+
@Parent() project: Project,
288+
@Loader(PartnershipLoader) partnerships: LoaderOf<PartnershipLoader>,
289+
): Promise<SecuredPartnership> {
290+
return await mapSecuredValue(project.primaryPartnership, ({ id }) =>
291+
partnerships.load({ id, view: { active: true } }),
292+
);
293+
}
294+
284295
@ResolveField(() => SecuredLocation)
285296
async primaryLocation(
286297
@Parent() project: Project,

0 commit comments

Comments
 (0)