@@ -14,14 +14,22 @@ import {
14
14
ACTIVE ,
15
15
createNode ,
16
16
createRelationships ,
17
+ defineSorters ,
18
+ filter ,
17
19
matchProps ,
18
20
merge ,
19
21
paginate ,
20
- sorting ,
22
+ sortWith ,
21
23
} from '~/core/database/query' ;
24
+ import {
25
+ fieldZoneFilters ,
26
+ fieldZoneSorters ,
27
+ } from '../field-zone/field-zone.repository' ;
28
+ import { userFilters , userSorters } from '../user/user.repository' ;
22
29
import {
23
30
type CreateFieldRegion ,
24
31
FieldRegion ,
32
+ FieldRegionFilters ,
25
33
type FieldRegionListInput ,
26
34
type UpdateFieldRegion ,
27
35
} from './dto' ;
@@ -102,14 +110,15 @@ export class FieldRegionRepository extends DtoRepository(FieldRegion) {
102
110
) ;
103
111
}
104
112
105
- async list ( { filter , ... input } : FieldRegionListInput ) {
113
+ async list ( input : FieldRegionListInput ) {
106
114
if ( ! this . privileges . can ( 'read' ) ) {
107
115
return SecuredList . Redacted ;
108
116
}
109
117
const result = await this . db
110
118
. query ( )
111
119
. match ( node ( 'node' , 'FieldRegion' ) )
112
- . apply ( sorting ( FieldRegion , input ) )
120
+ . apply ( fieldRegionFilters ( input . filter ) )
121
+ . apply ( sortWith ( fieldRegionSorters , input ) )
113
122
. apply ( paginate ( input , this . hydrate ( ) ) )
114
123
. first ( ) ;
115
124
return result ! ; // result from paginate() will always have 1 row.
@@ -128,3 +137,44 @@ export class FieldRegionRepository extends DtoRepository(FieldRegion) {
128
137
. run ( ) ;
129
138
}
130
139
}
140
+
141
+ export const fieldRegionFilters = filter . define ( ( ) => FieldRegionFilters , {
142
+ id : filter . baseNodeProp ( ) ,
143
+ director : filter . sub ( ( ) => userFilters ) ( ( sub ) =>
144
+ sub . match ( [
145
+ node ( 'outer' ) ,
146
+ relation ( 'out' , '' , 'director' , ACTIVE ) ,
147
+ node ( 'node' , 'User' ) ,
148
+ ] ) ,
149
+ ) ,
150
+ fieldZone : filter . sub ( ( ) => fieldZoneFilters ) ( ( sub ) =>
151
+ sub . match ( [
152
+ node ( 'outer' ) ,
153
+ relation ( 'out' , '' , 'zone' , ACTIVE ) ,
154
+ node ( 'node' , 'FieldZone' ) ,
155
+ ] ) ,
156
+ ) ,
157
+ } ) ;
158
+
159
+ export const fieldRegionSorters = defineSorters ( FieldRegion , {
160
+ // eslint-disable-next-line @typescript-eslint/naming-convention
161
+ 'director.*' : ( query , input ) =>
162
+ query
163
+ . with ( 'node as region' )
164
+ . match ( [
165
+ node ( 'region' ) ,
166
+ relation ( 'out' , '' , 'director' , ACTIVE ) ,
167
+ node ( 'node' , 'User' ) ,
168
+ ] )
169
+ . apply ( sortWith ( userSorters , input ) ) ,
170
+ // eslint-disable-next-line @typescript-eslint/naming-convention
171
+ 'fieldZone.*' : ( query , input ) =>
172
+ query
173
+ . with ( 'node as region' )
174
+ . match ( [
175
+ node ( 'region' ) ,
176
+ relation ( 'out' , '' , 'zone' , ACTIVE ) ,
177
+ node ( 'node' , 'FieldZone' ) ,
178
+ ] )
179
+ . apply ( sortWith ( fieldZoneSorters , input ) ) ,
180
+ } ) ;
0 commit comments