@@ -143,7 +143,7 @@ export class UtilsMethode {
143143 resultExpression . push ( {
144144 expression : `${ preparedResourceName } .${ field . toString ( ) } ${ OperandMapForNull [
145145 operand
146- ] . replace (
146+ ] . replace (
147147 'EXPRESSION' ,
148148 UtilsMethode . getParamName (
149149 `${ preparedResourceName } .${ field } ` ,
@@ -158,7 +158,7 @@ export class UtilsMethode {
158158 resultExpression . push ( {
159159 expression : `${ preparedResourceName } .${ field . toString ( ) } ${ OperandsMap [
160160 operand
161- ] . replace (
161+ ] . replace (
162162 'EXPRESSION' ,
163163 UtilsMethode . getParamName ( `${ preparedResourceName } .${ field } ` , i )
164164 ) } `,
@@ -203,110 +203,118 @@ export class UtilsMethode {
203203 const resourceName = snakeToCamel ( name ) ;
204204 let relationFieldProperty : keyof Filter < T > [ 'relation' ] [ typeof relationProperty ] ;
205205 for ( relationFieldProperty in filter [ relationProperty ] ) {
206- const operand = Object . keys (
206+ for ( const operand of Object . keys (
207207 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 (
222221 `${ relationProperty } .${ relationFieldProperty . toString ( ) } ` ,
223222 i
224223 ) ;
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+ : {
261262 val : value ,
262263 name : paramsField ,
263264 } ,
264- } ) ;
265+ } ) ;
265266
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 [
275302 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+ : {
286308 val : value ,
287309 name : paramsField ,
288310 } ,
289- } ) ;
290- break ;
311+ selectInclude : relationProperty ,
312+ } ) ;
313+ break ;
291314 }
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- }
308315
309- i ++ ;
316+ i ++ ;
317+ }
310318 }
311319 }
312320 return resultExpression ;
@@ -380,8 +388,8 @@ export class UtilsMethode {
380388 ) {
381389 const detail = isArray
382390 ? `Resource '${ relationsTypeName } ' with ids '${ idsToAdd . join (
383- ','
384- ) } ' does not exist`
391+ ','
392+ ) } ' does not exist`
385393 : `Resource '${ relationsTypeName } ' with id '${ idsToAdd [ 0 ] } ' does not exist` ;
386394 throw new NotFoundException ( {
387395 detail,
0 commit comments