File tree Expand file tree Collapse file tree 3 files changed +73
-1
lines changed
Expand file tree Collapse file tree 3 files changed +73
-1
lines changed Original file line number Diff line number Diff line change 44 * @author C. Mayer (meggsimum)
55 */
66const db = require ( '../config/db.config.js' ) ;
7+ const queryResolver = require ( '../query/resolver' ) ;
78const Places = db . places ;
89
910// fetch all places
1011exports . findAll = ( req , res ) => {
11- Places . findAll ( ) . then ( places => {
12+ // resolve query params (filter, limit, ...) as Sequelize opts
13+ const seqOpts = queryResolver . getSequelizeOpts ( req . query ) ;
14+ Places . findAll ( seqOpts ) . then ( places => {
1215 // send all Customers to Client
1316 res . json ( places ) ;
1417 } ) . catch ( err => {
Original file line number Diff line number Diff line change 1+ /**
2+ * Resolves a query string to a Sequelize DB query options object.
3+ *
4+ * @param {* } query The Express request query object
5+ *
6+ * @author C. Mayer (meggsimum)
7+ */
8+ exports . getSequelizeOpts = ( query ) => {
9+ let order = null ;
10+ let where = null ;
11+ let limit = null ;
12+
13+ // ORDER BY
14+ const orderByColumn = query . order_by ;
15+ if ( orderByColumn && orderByColumn !== '' ) {
16+ const orderByDir = query . order_dir || 'ASC' ;
17+ order = [
18+ [ orderByColumn , orderByDir ]
19+ ] ;
20+ }
21+
22+ // LIMIT
23+ limit = query . limit ? Number ( query . limit ) : null ;
24+
25+ // FILTER (equals)
26+ const filterParts = query . filter ? query . filter . split ( '=' ) : null ;
27+ if ( filterParts && filterParts . length === 2 ) {
28+ const whereProp = filterParts [ 0 ] ;
29+ const whereVal = filterParts [ 1 ] ;
30+ where = { } ;
31+
32+ const { Op } = require ( 'sequelize' ) ;
33+ where [ whereProp ] = {
34+ [ Op . eq ] : whereVal
35+ } ;
36+ }
37+
38+ return {
39+ where : where ,
40+ limit : limit ,
41+ order : order
42+ }
43+ } ;
Original file line number Diff line number Diff line change @@ -15,6 +15,32 @@ module.exports = function (app) {
1515 * /api/places:
1616 * get:
1717 * summary: Retrieve all places
18+ * parameters:
19+ * - in: query
20+ * name: limit
21+ * schema:
22+ * type: integer
23+ * required: false
24+ * description: Maximum number of result objects
25+ * - in: query
26+ * name: filter
27+ * schema:
28+ * type: string
29+ * required: false
30+ * description: CQL-like filter (only 'equals' at the moment) in the form 'name=Mutterstadt'
31+ * - in: query
32+ * name: order_by
33+ * schema:
34+ * type: string
35+ * required: false
36+ * description: Field to use to order results by
37+ * - in: query
38+ * name: order_dir
39+ * schema:
40+ * type: string
41+ * required: false
42+ * default: ASC
43+ * description: Order direction, either 'ASC' or 'DESC'
1844 * responses:
1945 * "200":
2046 * description: JSON with all places objects as array
You can’t perform that action at this time.
0 commit comments