@@ -5,42 +5,8 @@ const fields = require('./mapper/fields')
55const ordination = require ( './mapper/ordination' )
66const filters = require ( './mapper/filters' )
77
8- var options = { }
9-
10- function filter ( req , res , next ) {
11- const default_query = {
12- 'pagination' : pagination . pagination ( req . query , options ) ,
13- 'fields' : fields . fields ( req . query , options ) ,
14- 'sort' : ordination . sort ( req . query , options ) ,
15- 'filters' : filters . filters ( req . query , options )
16- }
17- req . query = default_query
18- next ( )
19- }
20-
21- exports = module . exports . options = function ( params ) {
22- return function ( req , res , next ) {
23- if ( typeof params === 'object' && Object . keys ( params ) . length > 0 ) {
24- if ( params . default ) {
25- if ( params . default . pagination ) {
26- options . default . pagination . limit = params . default . pagination . limit || options . default . pagination . limit
27- options . default . pagination . skip = params . default . pagination . skip || options . default . pagination . skip
28- options . default . pagination . page = params . default . pagination . page || options . default . pagination . page
29- }
30- options . default . fields = params . default . fields || options . default . fields
31- options . default . sort = params . default . sort || options . default . sort
32- options . default . filters = params . default . filters || options . default . filters
33- }
34- options . use_page = params . use_page || options . use_page
35- options . client_db = params . client_db || options . client_db
36- options . date_field = params . date_field || options . date_field
37- }
38- return filter ( req , res , next )
39- }
40- }
41-
42- exports = module . exports . set_default = function ( ) {
43- options = {
8+ function init_default ( ) {
9+ return {
4410 default : {
4511 pagination : {
4612 limit : Number . MAX_SAFE_INTEGER ,
@@ -53,6 +19,71 @@ exports = module.exports.set_default = function () {
5319 } ,
5420 use_page : false ,
5521 client_db : 'mongodb' ,
56- date_field : 'created_at'
22+ date_fields : {
23+ start_at : 'created_at' ,
24+ end_at : 'created_at'
25+ }
26+ }
27+ }
28+
29+ exports = module . exports . parser = function ( params ) {
30+ return function ( req , res , next ) {
31+ const options = validate_options ( params )
32+ req . query = {
33+ 'pagination' : pagination . pagination ( req . query , options ) ,
34+ 'fields' : fields . fields ( req . query , options ) ,
35+ 'sort' : ordination . sort ( req . query , options ) ,
36+ 'filters' : filters . filters ( req . query , options )
37+ }
38+ next ( )
39+ }
40+ }
41+
42+ function validate_options ( params ) {
43+ const options = init_default ( )
44+ if ( typeof params === 'object' && Object . keys ( params ) . length > 0 ) {
45+ if ( params . default ) {
46+ if ( params . default . pagination ) {
47+ options . default . pagination . limit = params . default . pagination . limit || options . default . pagination . limit
48+ options . default . pagination . skip = params . default . pagination . skip || options . default . pagination . skip
49+ options . default . pagination . page = params . default . pagination . page || options . default . pagination . page
50+ }
51+ options . default . fields = params . default . fields || options . default . fields
52+ options . default . sort = params . default . sort || options . default . sort
53+ options . default . filters = params . default . filters || options . default . filters
54+ }
55+ options . use_page = params . use_page || options . use_page
56+ options . client_db = params . client_db || options . client_db
57+ if ( params . date_fields ) {
58+ options . date_fields . start_at = params . date_fields . start_at || options . date_fields . start_at
59+ options . date_fields . end_at = params . date_fields . end_at || options . date_fields . end_at
60+ }
5761 }
62+ return options
63+ }
64+
65+ exports = module . exports . parseFields = function ( query , fields_default ) {
66+ const options = validate_options ( { 'default' : { 'fields' : fields_default } } )
67+ return fields . fields ( query , options )
68+ }
69+
70+ exports = module . exports . parseSort = function ( query , sort_default ) {
71+ const options = validate_options ( { 'default' : { 'sort' : sort_default } } )
72+ return ordination . sort ( query , options )
73+ }
74+
75+ exports = module . exports . parsePagination = function ( query , pagination_default ) {
76+ const options = validate_options ( { 'default' : { 'pagination' : pagination_default } } )
77+ return pagination . pagination ( query , options )
78+ }
79+
80+ exports = module . exports . parseFilter = function ( query , filters_default , date_fields ) {
81+ const options = validate_options ( { 'default' : { 'filters' : filters_default } , 'date_fields' : date_fields } )
82+ return filters . filters ( query , options )
83+ }
84+
85+ exports = module . exports . parseDate = function ( query , date_fields ) {
86+ const options = validate_options ( { 'date_fields' : date_fields } )
87+ return filters . filters ( query , options )
5888}
89+
0 commit comments