@@ -38,6 +38,8 @@ class GetAllLhcFillsUseCase {
3838 const { filter, page = { } } = query ;
3939 const { limit = ApiConfig . pagination . limit , offset = 0 } = page ;
4040
41+ const SEARCH_ITEMS_SEPARATOR = ',' ;
42+
4143 const queryBuilder = new QueryBuilder ( ) ;
4244
4345 if ( filter ) {
@@ -48,11 +50,37 @@ class GetAllLhcFillsUseCase {
4850 }
4951
5052 if ( fillNumbers ) {
51- const fillNumbersSplit = fillNumbers . split ( ',' ) ;
53+ /*
54+ * Split by SEARCH_ITEMS_SEPARATOR. Don't validate for only numbers
55+ * Boolean trick: https://michaeluloth.com/javascript-filter-boolean/
56+ */
57+ const fillNumberCriteria = fillNumbers . split ( SEARCH_ITEMS_SEPARATOR )
58+ . map ( ( runNumbers ) => runNumbers . trim ( ) )
59+ . filter ( Boolean ) ;
60+
61+ // Set to prevent duplicate values.
62+ const fillNumberSet = new Set ( ) ;
63+
64+ fillNumberCriteria . forEach ( ( fillNumber ) => {
65+ if ( fillNumber . includes ( '-' ) ) {
66+ const [ start , end ] = fillNumber . split ( '-' ) . map ( ( n ) => parseInt ( n , 10 ) ) ;
67+ if ( ! Number . isNaN ( start ) && ! Number . isNaN ( end ) ) {
68+ for ( let i = start ; i <= end ; i ++ ) {
69+ fillNumberSet . add ( i ) ;
70+ }
71+ }
72+ } else {
73+ if ( ! Number . isNaN ( fillNumber ) ) {
74+ fillNumberSet . add ( Number ( fillNumber ) ) ;
75+ }
76+ }
77+ } ) ;
78+
79+ const finalFillnumberList = Array . from ( fillNumberSet ) ;
5280
53- const fillNumbersValidated = fillNumbersSplit . filter ( ( number ) => ! Number . isNaN ( number ) ) ;
54- if ( fillNumbersValidated . length > 0 ) {
55- queryBuilder . where ( 'fillNumber' ) . oneOf ( ...fillNumbersValidated ) ;
81+ // Check that the final fill numbers list contains at least one valid fill number
82+ if ( finalFillnumberList . length > 0 ) {
83+ queryBuilder . where ( 'fillNumber' ) . oneOf ( ...finalFillnumberList ) ;
5684 }
5785 }
5886 }
0 commit comments