axe-api 0.18.1 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/package.json +1 -1
- package/src/constants.js +14 -4
- package/src/core/Model.js +2 -3
- package/src/handlers/all.js +73 -0
- package/src/handlers/index.js +3 -2
- package/src/handlers/{autosave.js → patch.js} +1 -1
- package/src/resolvers/setExpressRoutes.js +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Release Notes
|
|
2
2
|
|
|
3
|
+
## [0.19.0 (2021-12-05)](https://github.com/axe-api/axe-api/compare/0.19.0...0.18.1)
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- [#110](https://github.com/axe-api/axe-api/issues/110)
|
|
8
|
+
|
|
9
|
+
### Enhancements
|
|
10
|
+
|
|
11
|
+
- [#106](https://github.com/axe-api/axe-api/issues/106)
|
|
12
|
+
|
|
3
13
|
## [0.18.1 (2021-12-02)](https://github.com/axe-api/axe-api/compare/0.18.1...0.18.0)
|
|
4
14
|
|
|
5
15
|
### Fixed
|
package/package.json
CHANGED
package/src/constants.js
CHANGED
|
@@ -13,6 +13,7 @@ const HOOK_FUNCTIONS = {
|
|
|
13
13
|
onBeforeDeleteQuery: "onBeforeDeleteQuery",
|
|
14
14
|
onBeforeDelete: "onBeforeDelete",
|
|
15
15
|
onBeforePaginate: "onBeforePaginate",
|
|
16
|
+
onBeforeAll: "onBeforeAll",
|
|
16
17
|
onBeforeShow: "onBeforeShow",
|
|
17
18
|
onAfterInsert: "onAfterInsert",
|
|
18
19
|
onAfterUpdateQuery: "onAfterUpdateQuery",
|
|
@@ -20,6 +21,7 @@ const HOOK_FUNCTIONS = {
|
|
|
20
21
|
onAfterDeleteQuery: "onAfterDeleteQuery",
|
|
21
22
|
onAfterDelete: "onAfterDelete",
|
|
22
23
|
onAfterPaginate: "onAfterPaginate",
|
|
24
|
+
onAfterAll: "onAfterAll",
|
|
23
25
|
onAfterShow: "onAfterShow",
|
|
24
26
|
};
|
|
25
27
|
|
|
@@ -52,7 +54,8 @@ const HANDLERS = {
|
|
|
52
54
|
SHOW: "show",
|
|
53
55
|
UPDATE: "update",
|
|
54
56
|
DELETE: "destroy",
|
|
55
|
-
|
|
57
|
+
PATCH: "patch",
|
|
58
|
+
ALL: "all",
|
|
56
59
|
};
|
|
57
60
|
|
|
58
61
|
const DEFAULT_HANDLERS = [
|
|
@@ -60,6 +63,7 @@ const DEFAULT_HANDLERS = [
|
|
|
60
63
|
HANDLERS.PAGINATE,
|
|
61
64
|
HANDLERS.SHOW,
|
|
62
65
|
HANDLERS.UPDATE,
|
|
66
|
+
HANDLERS.PATCH,
|
|
63
67
|
HANDLERS.DELETE,
|
|
64
68
|
];
|
|
65
69
|
|
|
@@ -68,6 +72,7 @@ const HTTP_METHODS = {
|
|
|
68
72
|
GET: "GET",
|
|
69
73
|
PUT: "PUT",
|
|
70
74
|
DELETE: "DELETE",
|
|
75
|
+
PATCH: "PATCH",
|
|
71
76
|
};
|
|
72
77
|
|
|
73
78
|
const API_ROUTE_TEMPLATES = {
|
|
@@ -79,6 +84,11 @@ const API_ROUTE_TEMPLATES = {
|
|
|
79
84
|
url: (prefix, parentUrl, resource) => `/${prefix}/${parentUrl}${resource}`,
|
|
80
85
|
method: HTTP_METHODS.GET,
|
|
81
86
|
},
|
|
87
|
+
[HANDLERS.ALL]: {
|
|
88
|
+
url: (prefix, parentUrl, resource) =>
|
|
89
|
+
`/${prefix}/${parentUrl}${resource}/all`,
|
|
90
|
+
method: HTTP_METHODS.GET,
|
|
91
|
+
},
|
|
82
92
|
[HANDLERS.SHOW]: {
|
|
83
93
|
url: (prefix, parentUrl, resource, primaryKey) =>
|
|
84
94
|
`/${prefix}/${parentUrl}${resource}/:${primaryKey}`,
|
|
@@ -89,10 +99,10 @@ const API_ROUTE_TEMPLATES = {
|
|
|
89
99
|
`/${prefix}/${parentUrl}${resource}/:${primaryKey}`,
|
|
90
100
|
method: HTTP_METHODS.PUT,
|
|
91
101
|
},
|
|
92
|
-
[HANDLERS.
|
|
102
|
+
[HANDLERS.PATCH]: {
|
|
93
103
|
url: (prefix, parentUrl, resource, primaryKey) =>
|
|
94
|
-
`/${prefix}/${parentUrl}${resource}/:${primaryKey}
|
|
95
|
-
method: HTTP_METHODS.
|
|
104
|
+
`/${prefix}/${parentUrl}${resource}/:${primaryKey}`,
|
|
105
|
+
method: HTTP_METHODS.PATCH,
|
|
96
106
|
},
|
|
97
107
|
[HANDLERS.DELETE]: {
|
|
98
108
|
url: (prefix, parentUrl, resource, primaryKey) =>
|
package/src/core/Model.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import pluralize from "pluralize";
|
|
2
2
|
import { snakeCase } from "snake-case";
|
|
3
|
-
import { RELATIONSHIPS,
|
|
4
|
-
const { INSERT, SHOW, UPDATE, PAGINATE, DELETE } = HANDLERS;
|
|
3
|
+
import { RELATIONSHIPS, DEFAULT_HANDLERS } from "./../constants.js";
|
|
5
4
|
|
|
6
5
|
class Model {
|
|
7
6
|
constructor() {
|
|
@@ -25,7 +24,7 @@ class Model {
|
|
|
25
24
|
}
|
|
26
25
|
|
|
27
26
|
get handlers() {
|
|
28
|
-
return [
|
|
27
|
+
return [...DEFAULT_HANDLERS];
|
|
29
28
|
}
|
|
30
29
|
|
|
31
30
|
get middlewares() {
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import {
|
|
2
|
+
callHooks,
|
|
3
|
+
getRelatedData,
|
|
4
|
+
filterHiddenFields,
|
|
5
|
+
serializeData,
|
|
6
|
+
addForeignKeyQuery,
|
|
7
|
+
} from "./helpers.js";
|
|
8
|
+
import { HOOK_FUNCTIONS, HANDLERS } from "./../constants.js";
|
|
9
|
+
import QueryParser from "./../core/QueryParser.js";
|
|
10
|
+
|
|
11
|
+
export default async (context) => {
|
|
12
|
+
const { request, response, model, models, trx, relation, parentModel } =
|
|
13
|
+
context;
|
|
14
|
+
|
|
15
|
+
const queryParser = new QueryParser({ model, models });
|
|
16
|
+
|
|
17
|
+
// We should parse URL query string to use as condition in Lucid query
|
|
18
|
+
const conditions = queryParser.get(request.query);
|
|
19
|
+
|
|
20
|
+
// Creating a new database query
|
|
21
|
+
const query = trx.from(model.instance.table);
|
|
22
|
+
|
|
23
|
+
// Users should be able to select some fields to show.
|
|
24
|
+
queryParser.applyFields(query, conditions.fields);
|
|
25
|
+
|
|
26
|
+
// Binding parent id if there is.
|
|
27
|
+
addForeignKeyQuery(request, query, relation, parentModel);
|
|
28
|
+
|
|
29
|
+
// Users should be able to filter records
|
|
30
|
+
queryParser.applyWheres(query, conditions.q);
|
|
31
|
+
|
|
32
|
+
await callHooks(model, HOOK_FUNCTIONS.onBeforeAll, {
|
|
33
|
+
...context,
|
|
34
|
+
conditions,
|
|
35
|
+
query,
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
// User should be able to select sorting fields and types
|
|
39
|
+
queryParser.applySorting(query, conditions.sort);
|
|
40
|
+
|
|
41
|
+
const result = await query;
|
|
42
|
+
|
|
43
|
+
// We should try to get related data if there is any
|
|
44
|
+
await getRelatedData(
|
|
45
|
+
result.data,
|
|
46
|
+
conditions.with,
|
|
47
|
+
model,
|
|
48
|
+
models,
|
|
49
|
+
trx,
|
|
50
|
+
HANDLERS.ALL,
|
|
51
|
+
request
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
await callHooks(model, HOOK_FUNCTIONS.onAfterAll, {
|
|
55
|
+
...context,
|
|
56
|
+
result,
|
|
57
|
+
conditions,
|
|
58
|
+
query,
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
// Serializing the data by the model's serialize method
|
|
62
|
+
result.data = await serializeData(
|
|
63
|
+
result.data,
|
|
64
|
+
model.instance.serialize,
|
|
65
|
+
HANDLERS.ALL,
|
|
66
|
+
request
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
// Filtering hidden fields from the response data.
|
|
70
|
+
filterHiddenFields(result.data, model.instance.hiddens);
|
|
71
|
+
|
|
72
|
+
return response.json(result);
|
|
73
|
+
};
|
package/src/handlers/index.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import
|
|
1
|
+
import all from "./all.js";
|
|
2
|
+
import patch from "./patch.js";
|
|
2
3
|
import store from "./store.js";
|
|
3
4
|
import show from "./show.js";
|
|
4
5
|
import paginate from "./paginate.js";
|
|
5
6
|
import update from "./update.js";
|
|
6
7
|
import destroy from "./destroy.js";
|
|
7
8
|
|
|
8
|
-
export default {
|
|
9
|
+
export default { all, patch, store, show, paginate, update, destroy };
|