Skip to content

Commit 4578b19

Browse files
committed
Convert project member neo4j filters to use style
1 parent a01637e commit 4578b19

File tree

1 file changed

+14
-35
lines changed

1 file changed

+14
-35
lines changed

src/components/project/project-member/project-member.repository.ts

Lines changed: 14 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
ACTIVE,
1616
createNode,
1717
createRelationships,
18+
filter,
1819
matchPropsAndProjectSensAndScopedRoles,
1920
merge,
2021
oncePerProject,
@@ -25,6 +26,7 @@ import { UserRepository } from '../../user/user.repository';
2526
import {
2627
type CreateProjectMember,
2728
ProjectMember,
29+
ProjectMemberFilters,
2830
type ProjectMemberListInput,
2931
type UpdateProjectMember,
3032
} from './dto';
@@ -139,28 +141,11 @@ export class ProjectMemberRepository extends DtoRepository(ProjectMember) {
139141
const result = await this.db
140142
.query()
141143
.match([
142-
node(
143-
'project',
144-
'Project',
145-
filter?.projectId ? { id: filter.projectId } : {},
146-
),
144+
node('project', 'Project'),
147145
relation('out', '', 'member'),
148146
node('node', 'ProjectMember'),
149147
])
150-
.apply((q) =>
151-
filter?.roles
152-
? q
153-
.match([
154-
node('node'),
155-
relation('out', '', 'roles', ACTIVE),
156-
node('role', 'Property'),
157-
])
158-
.raw(
159-
`WHERE size(apoc.coll.intersection(role.value, $filteredRoles)) > 0`,
160-
{ filteredRoles: filter.roles },
161-
)
162-
: q,
163-
)
148+
.apply(projectMemberFilters(filter))
164149
.with('*') // needed between where & where
165150
.apply(
166151
this.privileges.filterToReadable({
@@ -177,26 +162,11 @@ export class ProjectMemberRepository extends DtoRepository(ProjectMember) {
177162
return await this.db
178163
.query()
179164
.match([
180-
node('', 'Project', { id: projectId }),
181-
relation('out', '', 'member', ACTIVE),
182165
node('node', 'ProjectMember'),
183166
relation('out', '', 'user', ACTIVE),
184167
node('user', 'User'),
185168
])
186-
.apply((q) =>
187-
roles
188-
? q
189-
.match([
190-
node('node'),
191-
relation('out', '', 'roles', ACTIVE),
192-
node('role', 'Property'),
193-
])
194-
.raw(
195-
`WHERE size(apoc.coll.intersection(role.value, $filteredRoles)) > 0`,
196-
{ filteredRoles: roles },
197-
)
198-
: q,
199-
)
169+
.apply(projectMemberFilters({ projectId, roles }))
200170
.with('user')
201171
.optionalMatch([
202172
node('user'),
@@ -210,3 +180,12 @@ export class ProjectMemberRepository extends DtoRepository(ProjectMember) {
210180
.run();
211181
}
212182
}
183+
184+
export const projectMemberFilters = filter.define(() => ProjectMemberFilters, {
185+
projectId: filter.pathExists((id) => [
186+
node('', 'Project', { id }),
187+
relation('out', '', 'member', ACTIVE),
188+
node('node'),
189+
]),
190+
roles: filter.intersectsProp(),
191+
});

0 commit comments

Comments
 (0)