@@ -62,28 +62,30 @@ module.exports = function (source) {
62
62
// Filters list
63
63
var filters = { }
64
64
65
- // Result array
66
- var array
65
+ // Resource chain
66
+ var chain = db ( req . params . resource ) . chain ( )
67
67
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
69
69
// parameters
70
+ var q = req . query . q
70
71
var _start = req . query . _start
71
72
var _end = req . query . _end
72
73
var _sort = req . query . _sort
73
74
var _order = req . query . _order
74
75
var _limit = req . query . _limit
76
+ delete req . query . q
75
77
delete req . query . _start
76
78
delete req . query . _end
77
79
delete req . query . _sort
78
80
delete req . query . _order
79
81
delete req . query . _limit
80
82
81
- if ( req . query . q ) {
83
+ if ( q ) {
82
84
83
85
// Full-text search
84
- var q = req . query . q . toLowerCase ( )
86
+ q = q . toLowerCase ( )
85
87
86
- array = db ( req . params . resource ) . filter ( function ( obj ) {
88
+ chain = chain . filter ( function ( obj ) {
87
89
for ( var key in obj ) {
88
90
var value = obj [ key ]
89
91
if ( db . _ . deepQuery ( value , q ) ) {
@@ -92,67 +94,62 @@ module.exports = function (source) {
92
94
}
93
95
} )
94
96
95
- } else {
97
+ }
96
98
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
+ }
102
104
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 ] )
111
112
}
113
+ }
112
114
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 ] )
123
120
}
124
121
}
125
122
126
123
// Sort
127
124
if ( _sort ) {
128
125
_order = _order || 'ASC'
129
126
130
- array = _ . sortBy ( array , function ( element ) {
127
+ chain = chain . sortBy ( function ( element ) {
131
128
return element [ _sort ]
132
129
} )
133
130
134
131
if ( _order === 'DESC' ) {
135
- array . reverse ( )
132
+ chain = chain . reverse ( )
136
133
}
137
134
}
138
135
139
136
// Slice result
140
137
if ( _end || _limit ) {
141
- res . setHeader ( 'X-Total-Count' , array . length )
138
+ res . setHeader ( 'X-Total-Count' , chain . size ( ) )
142
139
res . setHeader ( 'Access-Control-Expose-Headers' , 'X-Total-Count' )
143
140
}
144
141
145
142
_start = parseInt ( _start , 10 ) || 0
146
143
147
144
if ( _end ) {
148
145
_end = parseInt ( _end , 10 )
149
- array = array . slice ( _start , _end )
146
+ chain = chain . slice ( _start , _end )
150
147
} else if ( _limit ) {
151
148
_limit = parseInt ( _limit , 10 )
152
- array = array . slice ( _start , _start + _limit )
149
+ chain = chain . slice ( _start , _start + _limit )
153
150
}
154
151
155
- res . locals . data = array
152
+ res . locals . data = chain . value ( )
156
153
next ( )
157
154
}
158
155
0 commit comments