Skip to content

Commit a5e0f1a

Browse files
author
ryanholte
committed
[CHORE] adds route hooks
1 parent fa82ba0 commit a5e0f1a

File tree

5 files changed

+56
-13
lines changed

5 files changed

+56
-13
lines changed

lib/db/baseModel.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,12 @@ module.exports = {
168168
},
169169

170170
delete(id) {
171-
return this.forge({id})
172-
.destroy();
171+
return this
172+
.forge()
173+
.query(function (qb) {
174+
qb.where({id});
175+
qb.delete(['*']);
176+
});
173177
},
174178

175179
update(id, record) {

lib/route/methods/delete.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ const Response = require('../response');
22
const method = 'delete';
33

44
function Delete(options) {
5-
const {path, name, Model, validate, beforeCreate, pre = [], auth, strippedColumns} = options;
5+
const {path, name, Model, validate, beforeDelete, pre = [], auth, strippedColumns} = options;
66

77
return {
88
method,
@@ -13,7 +13,17 @@ function Delete(options) {
1313
handler: async function (request) {
1414
const id = request.params.id;
1515
try {
16-
const model = await Model.delete(id);
16+
17+
const query = Model.delete(id);
18+
if (beforeDelete) {
19+
beforeDelete('delete', request, query._knex);
20+
}
21+
const responseArr = await query.query();
22+
let model = null;
23+
if (responseArr.length) {
24+
model = Model.forge(responseArr.pop());
25+
}
26+
1727
return Response.success(name, model, strippedColumns);
1828
} catch (ex) {
1929
console.log('get error', ex);

lib/route/methods/get.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,15 @@ function Get(options) {
2626
const valid = await beforeRead('get', request, query);
2727
}
2828

29-
const model = await query.fetch();
29+
let fetchOptions = undefined;
30+
const relations = query.customRelations;
31+
if (relations) {
32+
fetchOptions = {
33+
withRelated: relations
34+
};
35+
}
36+
37+
const model = await query.fetch(fetchOptions);
3038
return Response.success(name, model, strippedColumns);
3139
} catch (ex) {
3240
console.log('get error', ex);

lib/route/response.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ class Response {
1010

1111
if (model && model.relations) {
1212
model.relations = _.reduce(model.relations, (seed, childModel, key) => {
13-
seed[key] = childModel.stripColumns();
13+
seed[key] = (childModel && childModel.stripColumns && childModel.stripColumns()) || childModel;
1414
return seed;
1515
}, {});
1616
}
1717

18-
obj[routeName] = (model && model.stripColumns()) || model;
18+
obj[routeName] = (model && model.stripColumns && model.stripColumns()) || model;
1919
return obj;
2020
}
2121

lib/route/route.js

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ const ModelFactory = require('../db/modelFactory');
99
const getPre = (setting, valueDefault) => {
1010
const hapiDefault = [];
1111
if (setting !== undefined) {
12+
if (setting === false) {
13+
return hapiDefault;
14+
}
1215
return setting;
1316
}
1417

@@ -53,6 +56,7 @@ class Plugin {
5356
this.modelEvents = route.events;
5457
this.modelHooks = route.hooks && route.hooks() || {};
5558
this.pre = route.pre && route.pre() || {};
59+
this.omitRoutes = route.omitRoutes && route.omitRoutes() || [];
5660
this.auth = route.auth && route.auth() || {};
5761
this.stripColumns = route.stripColumns && route.stripColumns() || [];
5862
const Model = this.getModel();
@@ -88,18 +92,35 @@ class Plugin {
8892
const deleteOptions = Object.assign({}, routeDefaults, {
8993
pre: getPre(this.pre.delete, this.pre.default),
9094
auth: getAuth(this.auth.delete, this.auth.default),
91-
beforeDelte: this.modelHooks.beforeDelete
95+
beforeDelete: this.modelHooks.beforeDelete
9296
});
9397

9498

9599
this.plugin = {
96100
name: this.config.name,
97101
register: async (server, options) => {
98-
await server.route(require('./methods/post')(postOptions));
99-
await server.route(require('./methods/get')(getOptions));
100-
await server.route(require('./methods/put')(putOptions));
101-
await server.route(require('./methods/query')(queryOptions));
102-
await server.route(require('./methods/delete')(deleteOptions));
102+
if (this.omitRoutes === 'all') {
103+
return;
104+
}
105+
106+
if (!this.omitRoutes.includes('post')) {
107+
await server.route(require('./methods/post')(postOptions));
108+
}
109+
if (!this.omitRoutes.includes('get')) {
110+
await server.route(require('./methods/get')(getOptions));
111+
}
112+
113+
if (!this.omitRoutes.includes('put')) {
114+
await server.route(require('./methods/put')(putOptions));
115+
}
116+
117+
if (!this.omitRoutes.includes('query')) {
118+
await server.route(require('./methods/query')(queryOptions));
119+
}
120+
121+
if (!this.omitRoutes.includes('delete')) {
122+
await server.route(require('./methods/delete')(deleteOptions));
123+
}
103124
},
104125
};
105126
}

0 commit comments

Comments
 (0)