@@ -62,28 +62,30 @@ module.exports = function (source) {
6262 // Filters list
6363 var filters = { }
6464
65- // Result array
66- var array
65+ // Resource chain
66+ var chain = db ( req . params . resource ) . chain ( )
6767
68- // Remove _start, _end and _limit from req.query to avoid filtering using those
68+ // Remove q, _start, _end, ... from req.query to avoid filtering using those
6969 // parameters
70+ var q = req . query . q
7071 var _start = req . query . _start
7172 var _end = req . query . _end
7273 var _sort = req . query . _sort
7374 var _order = req . query . _order
7475 var _limit = req . query . _limit
76+ delete req . query . q
7577 delete req . query . _start
7678 delete req . query . _end
7779 delete req . query . _sort
7880 delete req . query . _order
7981 delete req . query . _limit
8082
81- if ( req . query . q ) {
83+ if ( q ) {
8284
8385 // Full-text search
84- var q = req . query . q . toLowerCase ( )
86+ q = q . toLowerCase ( )
8587
86- array = db ( req . params . resource ) . filter ( function ( obj ) {
88+ chain = chain . filter ( function ( obj ) {
8789 for ( var key in obj ) {
8890 var value = obj [ key ]
8991 if ( db . _ . deepQuery ( value , q ) ) {
@@ -92,67 +94,62 @@ module.exports = function (source) {
9294 }
9395 } )
9496
95- } else {
97+ }
9698
97- // Add :parentId filter in case URL is like /:parent/:parentId/:resource
98- if ( req . params . parent ) {
99- var parent = pluralize . singular ( req . params . parent )
100- filters [ parent + 'Id' ] = + req . params . parentId
101- }
99+ // Add :parentId filter in case URL is like /:parent/:parentId/:resource
100+ if ( req . params . parent ) {
101+ var parent = pluralize . singular ( req . params . parent )
102+ filters [ parent + 'Id' ] = + req . params . parentId
103+ }
102104
103- // Add query parameters filters
104- // Convert query parameters to their native counterparts
105- for ( var key in req . query ) {
106- // don't take into account JSONP query parameters
107- // jQuery adds a '_' query parameter too
108- if ( key !== 'callback' && key !== '_' ) {
109- filters [ key ] = utils . toNative ( req . query [ key ] )
110- }
105+ // Add query parameters filters
106+ // Convert query parameters to their native counterparts
107+ for ( var key in req . query ) {
108+ // don't take into account JSONP query parameters
109+ // jQuery adds a '_' query parameter too
110+ if ( key !== 'callback' && key !== '_' ) {
111+ filters [ key ] = utils . toNative ( req . query [ key ] )
111112 }
113+ }
112114
113- // Filter
114- if ( _ ( filters ) . isEmpty ( ) ) {
115- array = db ( req . params . resource ) . value ( )
116- } else {
117- var chain = db ( req . params . resource ) . chain ( )
118- for ( var f in filters ) {
119- // This syntax allow for deep filtering using lodash (i.e. a.b.c[0])
120- chain = chain . filter ( f , filters [ f ] )
121- }
122- array = chain . value ( )
115+ // Filter
116+ if ( ! _ ( filters ) . isEmpty ( ) ) {
117+ for ( var f in filters ) {
118+ // This syntax allow for deep filtering using lodash (i.e. a.b.c[0])
119+ chain = chain . filter ( f , filters [ f ] )
123120 }
124121 }
125122
126123 // Sort
127124 if ( _sort ) {
128125 _order = _order || 'ASC'
129126
130- array = _ . sortBy ( array , function ( element ) {
127+ chain = chain . sortBy ( function ( element ) {
131128 return element [ _sort ]
132129 } )
133130
134131 if ( _order === 'DESC' ) {
135- array . reverse ( )
132+ chain = chain . reverse ( )
136133 }
137134 }
138135
139136 // Slice result
140137 if ( _end || _limit ) {
141- res . setHeader ( 'X-Total-Count' , array . length )
138+ res . setHeader ( 'X-Total-Count' , chain . size ( ) )
142139 res . setHeader ( 'Access-Control-Expose-Headers' , 'X-Total-Count' )
143140 }
144141
145142 _start = parseInt ( _start , 10 ) || 0
146143
147144 if ( _end ) {
148145 _end = parseInt ( _end , 10 )
149- array = array . slice ( _start , _end )
146+ chain = chain . slice ( _start , _end )
150147 } else if ( _limit ) {
151148 _limit = parseInt ( _limit , 10 )
152- array = array . slice ( _start , _start + _limit )
149+ chain = chain . slice ( _start , _start + _limit )
153150 }
154151
155- res . locals . data = array
152+ res . locals . data = chain . value ( )
156153 next ( )
157154 }
158155
0 commit comments