@@ -143,7 +143,7 @@ export class UtilsMethode {
143
143
resultExpression . push ( {
144
144
expression : `${ preparedResourceName } .${ field . toString ( ) } ${ OperandMapForNull [
145
145
operand
146
- ] . replace (
146
+ ] . replace (
147
147
'EXPRESSION' ,
148
148
UtilsMethode . getParamName (
149
149
`${ preparedResourceName } .${ field } ` ,
@@ -158,7 +158,7 @@ export class UtilsMethode {
158
158
resultExpression . push ( {
159
159
expression : `${ preparedResourceName } .${ field . toString ( ) } ${ OperandsMap [
160
160
operand
161
- ] . replace (
161
+ ] . replace (
162
162
'EXPRESSION' ,
163
163
UtilsMethode . getParamName ( `${ preparedResourceName } .${ field } ` , i )
164
164
) } `,
@@ -203,110 +203,118 @@ export class UtilsMethode {
203
203
const resourceName = snakeToCamel ( name ) ;
204
204
let relationFieldProperty : keyof Filter < T > [ 'relation' ] [ typeof relationProperty ] ;
205
205
for ( relationFieldProperty in filter [ relationProperty ] ) {
206
- const operand = Object . keys (
206
+ for ( const operand of Object . keys (
207
207
filter [ relationProperty ] [ relationFieldProperty ]
208
- ) . pop ( ) ;
209
- const value =
210
- operand === FilterOperand . like
211
- ? `%${ filter [ relationProperty ] [ relationFieldProperty ] [ operand ] } %`
212
- : filter [ relationProperty ] [ relationFieldProperty ] [ operand ] ;
213
-
214
- const currentOperandMap =
215
- value . toString ( ) . toLocaleLowerCase ( ) === 'null'
216
- ? OperandMapForNull
217
- : OperandsMap ;
218
- const paramsField =
219
- value . toString ( ) . toLocaleLowerCase ( ) === 'null'
220
- ? null
221
- : UtilsMethode . getParamName (
208
+ ) ) {
209
+ const value =
210
+ operand === FilterOperand . like
211
+ ? `%${ filter [ relationProperty ] [ relationFieldProperty ] [ operand ] } %`
212
+ : filter [ relationProperty ] [ relationFieldProperty ] [ operand ] ;
213
+ const currentOperandMap =
214
+ value . toString ( ) . toLocaleLowerCase ( ) === 'null'
215
+ ? OperandMapForNull
216
+ : OperandsMap ;
217
+ const paramsField =
218
+ value . toString ( ) . toLocaleLowerCase ( ) === 'null'
219
+ ? null
220
+ : UtilsMethode . getParamName (
222
221
`${ relationProperty } .${ relationFieldProperty . toString ( ) } ` ,
223
222
i
224
223
) ;
225
- switch ( relation . relationType ) {
226
- case 'many-to-many' : {
227
- const { inverseJoinColumns, joinColumns } =
228
- relation . isManyToManyOwner ? relation : relation . inverseRelation ;
229
- const relationProps = relation . isManyToManyOwner
230
- ? relation
231
- : relation . inverseRelation ;
232
- const { joinTableName } = relationProps ;
233
- const { databaseName : queryJoinPropsName } =
234
- relation . isManyToManyOwner
235
- ? inverseJoinColumns [ 0 ]
236
- : joinColumns [ 0 ] ;
237
- const { databaseName : selectJoinPropsName } =
238
- relation . isManyToManyOwner
239
- ? joinColumns [ 0 ]
240
- : inverseJoinColumns [ 0 ] ;
241
- const onQuery = `${ joinTableName } .${ queryJoinPropsName } = ${ relationProperty } .${ primaryColumn } ` ;
242
- const selectQuery = `${ joinTableName } .${ selectJoinPropsName } ` ;
243
-
244
- const query = builder
245
- . subQuery ( )
246
- . select ( selectQuery )
247
- . from ( joinTableName , joinTableName )
248
- . leftJoin ( resourceName , relationProperty , onQuery )
249
- . where (
250
- `${ relationProperty } .${ relationFieldProperty . toString ( ) } ${ currentOperandMap [
251
- operand
252
- ] . replace ( 'EXPRESSION' , paramsField ) } `
253
- )
254
- . getQuery ( ) ;
255
- resultExpression . push ( {
256
- expression : `${ preparedResourceName } .id IN ${ query } ` ,
257
- params :
258
- paramsField === null
259
- ? null
260
- : {
224
+ switch ( relation . relationType ) {
225
+ case 'many-to-many' : {
226
+ const { inverseJoinColumns, joinColumns } =
227
+ relation . isManyToManyOwner
228
+ ? relation
229
+ : relation . inverseRelation ;
230
+ const relationProps = relation . isManyToManyOwner
231
+ ? relation
232
+ : relation . inverseRelation ;
233
+ const { joinTableName } = relationProps ;
234
+ const { databaseName : queryJoinPropsName } =
235
+ relation . isManyToManyOwner
236
+ ? inverseJoinColumns [ 0 ]
237
+ : joinColumns [ 0 ] ;
238
+ const { databaseName : selectJoinPropsName } =
239
+ relation . isManyToManyOwner
240
+ ? joinColumns [ 0 ]
241
+ : inverseJoinColumns [ 0 ] ;
242
+ const onQuery = `${ joinTableName } .${ queryJoinPropsName } = ${ relationProperty } .${ primaryColumn } ` ;
243
+ const selectQuery = `${ joinTableName } .${ selectJoinPropsName } ` ;
244
+
245
+ const query = builder
246
+ . subQuery ( )
247
+ . select ( selectQuery )
248
+ . from ( joinTableName , joinTableName )
249
+ . leftJoin ( resourceName , relationProperty , onQuery )
250
+ . where (
251
+ `${ relationProperty } .${ relationFieldProperty . toString ( ) } ${ currentOperandMap [
252
+ operand
253
+ ] . replace ( 'EXPRESSION' , paramsField ) } `
254
+ )
255
+ . getQuery ( ) ;
256
+ resultExpression . push ( {
257
+ expression : `${ preparedResourceName } .id IN ${ query } ` ,
258
+ params :
259
+ paramsField === null
260
+ ? null
261
+ : {
261
262
val : value ,
262
263
name : paramsField ,
263
264
} ,
264
- } ) ;
265
+ } ) ;
265
266
266
- break ;
267
- }
268
- case 'one-to-many' : {
269
- const query = builder
270
- . subQuery ( )
271
- . select ( `${ resourceName } .${ inverseSidePropertyPath } ` )
272
- . from ( target , resourceName )
273
- . where (
274
- `${ resourceName } .${ relationFieldProperty . toString ( ) } ${ currentOperandMap [
267
+ break ;
268
+ }
269
+ case 'one-to-many' : {
270
+ if ( paramsField !== null ) {
271
+ resultExpression . push ( {
272
+ expression : `${ relationProperty } .${ relationFieldProperty . toString ( ) } ${ currentOperandMap [
273
+ operand
274
+ ] . replace ( 'EXPRESSION' , paramsField ) } `,
275
+ params : {
276
+ val : value ,
277
+ name : paramsField ,
278
+ } ,
279
+ selectInclude : relationProperty ,
280
+ } ) ;
281
+ break ;
282
+ }
283
+ const query = builder
284
+ . subQuery ( )
285
+ . select ( `${ resourceName } .${ inverseSidePropertyPath } ` )
286
+ . from ( target , resourceName )
287
+ . where (
288
+ `${ resourceName } .${ relationFieldProperty . toString ( ) } ${ currentOperandMap [
289
+ operand
290
+ ] . replace ( 'EXPRESSION' , paramsField ) } `
291
+ )
292
+ . getQuery ( ) ;
293
+ resultExpression . push ( {
294
+ expression : `${ preparedResourceName } .id IN ${ query } ` ,
295
+ params : null ,
296
+ } ) ;
297
+ break ;
298
+ }
299
+ default :
300
+ resultExpression . push ( {
301
+ expression : `${ relationProperty } .${ relationFieldProperty . toString ( ) } ${ currentOperandMap [
275
302
operand
276
- ] . replace ( 'EXPRESSION' , paramsField ) } `
277
- )
278
- . getQuery ( ) ;
279
-
280
- resultExpression . push ( {
281
- expression : `${ preparedResourceName } .id IN ${ query } ` ,
282
- params :
283
- paramsField === null
284
- ? null
285
- : {
303
+ ] . replace ( 'EXPRESSION' , paramsField ) } `,
304
+ params :
305
+ paramsField === null
306
+ ? null
307
+ : {
286
308
val : value ,
287
309
name : paramsField ,
288
310
} ,
289
- } ) ;
290
- break ;
311
+ selectInclude : relationProperty ,
312
+ } ) ;
313
+ break ;
291
314
}
292
- default :
293
- resultExpression . push ( {
294
- expression : `${ relationProperty } .${ relationFieldProperty . toString ( ) } ${ currentOperandMap [
295
- operand
296
- ] . replace ( 'EXPRESSION' , paramsField ) } `,
297
- params :
298
- paramsField === null
299
- ? null
300
- : {
301
- val : value ,
302
- name : paramsField ,
303
- } ,
304
- selectInclude : relationProperty ,
305
- } ) ;
306
- break ;
307
- }
308
315
309
- i ++ ;
316
+ i ++ ;
317
+ }
310
318
}
311
319
}
312
320
return resultExpression ;
@@ -380,8 +388,8 @@ export class UtilsMethode {
380
388
) {
381
389
const detail = isArray
382
390
? `Resource '${ relationsTypeName } ' with ids '${ idsToAdd . join (
383
- ','
384
- ) } ' does not exist`
391
+ ','
392
+ ) } ' does not exist`
385
393
: `Resource '${ relationsTypeName } ' with id '${ idsToAdd [ 0 ] } ' does not exist` ;
386
394
throw new NotFoundException ( {
387
395
detail,
0 commit comments