@@ -15,6 +15,7 @@ import {
15
15
ACTIVE ,
16
16
createNode ,
17
17
createRelationships ,
18
+ filter ,
18
19
matchPropsAndProjectSensAndScopedRoles ,
19
20
merge ,
20
21
oncePerProject ,
@@ -25,6 +26,7 @@ import { UserRepository } from '../../user/user.repository';
25
26
import {
26
27
type CreateProjectMember ,
27
28
ProjectMember ,
29
+ ProjectMemberFilters ,
28
30
type ProjectMemberListInput ,
29
31
type UpdateProjectMember ,
30
32
} from './dto' ;
@@ -139,28 +141,11 @@ export class ProjectMemberRepository extends DtoRepository(ProjectMember) {
139
141
const result = await this . db
140
142
. query ( )
141
143
. match ( [
142
- node (
143
- 'project' ,
144
- 'Project' ,
145
- filter ?. projectId ? { id : filter . projectId } : { } ,
146
- ) ,
144
+ node ( 'project' , 'Project' ) ,
147
145
relation ( 'out' , '' , 'member' ) ,
148
146
node ( 'node' , 'ProjectMember' ) ,
149
147
] )
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 ) )
164
149
. with ( '*' ) // needed between where & where
165
150
. apply (
166
151
this . privileges . filterToReadable ( {
@@ -177,26 +162,11 @@ export class ProjectMemberRepository extends DtoRepository(ProjectMember) {
177
162
return await this . db
178
163
. query ( )
179
164
. match ( [
180
- node ( '' , 'Project' , { id : projectId } ) ,
181
- relation ( 'out' , '' , 'member' , ACTIVE ) ,
182
165
node ( 'node' , 'ProjectMember' ) ,
183
166
relation ( 'out' , '' , 'user' , ACTIVE ) ,
184
167
node ( 'user' , 'User' ) ,
185
168
] )
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 } ) )
200
170
. with ( 'user' )
201
171
. optionalMatch ( [
202
172
node ( 'user' ) ,
@@ -210,3 +180,12 @@ export class ProjectMemberRepository extends DtoRepository(ProjectMember) {
210
180
. run ( ) ;
211
181
}
212
182
}
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