Skip to content

Commit d514d86

Browse files
committed
Refactor pg handlers
1 parent 5419554 commit d514d86

2 files changed

Lines changed: 37 additions & 43 deletions

File tree

index.js

Lines changed: 32 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,6 @@ const tinyParams = require('tiny-params')
88
const zlib = require('zlib')
99
const port = process.env.PORT || process.env.port || 8091
1010
const defaultTimeout = 120000
11-
const handlers = {
12-
search: (name, req) => findAll(name, req.params),
13-
create: (name, req) => create(name, req.params),
14-
read: (name, req) => find(name, req.id, req.params),
15-
update: (name, req) => save(name, req.id, req.params),
16-
delete: (name, req) => destroy(name, req.id, req.params)
17-
}
1811
const scrud = {
1912
GET: 'search',
2013
'GET?': 'search',
@@ -107,6 +100,20 @@ const filterObj = (obj, ary) => {
107100
return base
108101
}
109102

103+
// database action handlers
104+
const find = (rsrc, id, params) => pgActions(rsrc, 'read', id, params)
105+
const findAll = (rsrc, params) => pgActions(rsrc, 'search', null, params)
106+
const create = (rsrc, params) => pgActions(rsrc, 'create', null, params)
107+
const save = (rsrc, id, params) => pgActions(rsrc, 'update', id, params)
108+
const destroy = (rsrc, id, params) => pgActions(rsrc, 'delete', id, params)
109+
const handlers = {
110+
search: (name, req) => findAll(name, req.params),
111+
create: (name, req) => create(name, req.params),
112+
read: (name, req) => find(name, req.id, req.params),
113+
update: (name, req) => save(name, req.id, req.params),
114+
delete: (name, req) => destroy(name, req.id, req.params)
115+
}
116+
110117
// exports
111118
module.exports = {
112119
register,
@@ -289,43 +296,25 @@ function authenticate (jwt) {
289296
})
290297
}
291298

292-
// helper: find resource
293-
function find (resource, id, params) {
294-
if (!id && id !== 0) return Promise.reject(noIdErr())
295-
params.id = id
296-
params.id_array = [id]
297-
let firstRecord = (d) => Promise.resolve(d[0])
298-
return callPgFunc(`${pgPrefix}${resource}_read`, params).then(firstRecord)
299-
}
300-
301-
// helper: find set of resources
302-
function findAll (resource, params) {
303-
Object.keys(params).forEach((k) => {
304-
if (!Array.isArray(params[k])) return
305-
params[`${k}_array`] = params[k]
306-
})
307-
return callPgFunc(`${pgPrefix}${resource}_search`, params)
308-
}
309-
310-
// helper: create resource
311-
function create (resource, params) {
312-
let firstRecord = (d) => Promise.resolve(d[0])
313-
return callPgFunc(`${pgPrefix}${resource}_create`, params).then(firstRecord)
314-
}
315-
316-
// helper: update resource
317-
function save (resource, id, params) {
318-
if (!id && id !== 0) return Promise.reject(noIdErr())
319-
params.id = id
299+
// helper: handle all resource helpers
300+
function pgActions (resource, action, id, params) {
301+
let checkId = {read: true, update: true, delete: true}
302+
if (checkId[action]) {
303+
if (!id && id !== 0) return Promise.reject(noIdErr())
304+
if (action === 'read') params.id_array = [id]
305+
params.id = id
306+
}
320307
let firstRecord = (d) => Promise.resolve(d[0])
321-
return callPgFunc(`${pgPrefix}${resource}_update`, params).then(firstRecord)
322-
}
323-
324-
// helper: delete resource
325-
function destroy (resource, id, params) {
326-
if (!id && id !== 0) return Promise.reject(noIdErr())
327-
params.id = id
328-
return callPgFunc(`${pgPrefix}${resource}_delete`, params)
308+
let first = {create: true, read: true, update: true}
309+
if (action === 'search') {
310+
Object.keys(params).forEach((k) => {
311+
if (!Array.isArray(params[k])) return
312+
params[`${k}_array`] = params[k]
313+
})
314+
}
315+
let funcName = `${pgPrefix}${resource}_${action}`
316+
if (!first[action]) return callPgFunc(funcName, params)
317+
return callPgFunc(funcName, params).then(firstRecord)
329318
}
330319

331320
// default handler for all resource methods

test.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,11 @@ test.serial('regession: body parses gracefully', async (assert) => {
5656
await assert.notThrows(axios({method: 'PUT', url, data: 'u'}))
5757
})
5858

59+
// test.serial('close ends pg client', async (assert) => {
60+
// let url = `http://localhost:${port}${basePath}/member/${id}`
61+
// await assert.notThrows(axios({method: 'PUT', url, data: 'u', timeout: 3}))
62+
// })
63+
5964
test('register throws with no name', async (assert) => {
6065
await assert.throws(scrud.register(), Error, 'register throws with no name')
6166
})

0 commit comments

Comments
 (0)