axe-api 0.20.0-rc4 → 0.20.0-rc5
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/build/index.js +7 -30
- package/build/src/Builders/ModelTreeBuilder.js +8 -10
- package/build/src/Builders/RouterBuilder.js +41 -46
- package/build/src/Builders/index.js +3 -10
- package/build/src/Enums.js +20 -23
- package/build/src/Exceptions/ApiError.js +3 -5
- package/build/src/Handlers/AllHandler.js +12 -14
- package/build/src/Handlers/DestroyHandler.js +10 -15
- package/build/src/Handlers/HandlerFactory.js +23 -28
- package/build/src/Handlers/Helpers.d.ts +1 -1
- package/build/src/Handlers/Helpers.js +28 -42
- package/build/src/Handlers/PaginateHandler.js +12 -14
- package/build/src/Handlers/PatchHandler.js +16 -21
- package/build/src/Handlers/ShowHandler.js +14 -19
- package/build/src/Handlers/StoreHandler.js +12 -17
- package/build/src/Handlers/UpdateHandler.js +16 -21
- package/build/src/Interfaces.js +1 -3
- package/build/src/Model.js +17 -22
- package/build/src/Resolvers/FileResolver.js +7 -12
- package/build/src/Resolvers/FolderResolver.js +7 -12
- package/build/src/Resolvers/GeneralHookResolver.js +7 -12
- package/build/src/Resolvers/ModelMiddlewareResolver.js +1 -3
- package/build/src/Resolvers/ModelResolver.js +21 -26
- package/build/src/Resolvers/TransactionResolver.js +3 -5
- package/build/src/Resolvers/index.js +7 -18
- package/build/src/Server.js +40 -45
- package/build/src/Services/DocumentationService.js +1 -3
- package/build/src/Services/IoCService.js +5 -7
- package/build/src/Services/LogService.js +10 -12
- package/build/src/Services/ModelListService.js +1 -3
- package/build/src/Services/ModelService.js +4 -6
- package/build/src/Services/QueryService.js +29 -34
- package/build/src/Services/SchemaValidatorService.js +7 -9
- package/build/src/Services/index.js +8 -20
- package/build/src/constants.js +18 -21
- package/package.json +3 -1
package/build/index.js
CHANGED
|
@@ -1,30 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
17
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
|
-
};
|
|
19
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
exports.DEFAULT_HANDLERS = exports.ApiError = exports.Model = exports.Server = void 0;
|
|
21
|
-
const Server_1 = __importDefault(require("./src/Server"));
|
|
22
|
-
exports.Server = Server_1.default;
|
|
23
|
-
const Model_1 = __importDefault(require("./src/Model"));
|
|
24
|
-
exports.Model = Model_1.default;
|
|
25
|
-
const ApiError_1 = __importDefault(require("./src/Exceptions/ApiError"));
|
|
26
|
-
exports.ApiError = ApiError_1.default;
|
|
27
|
-
const constants_1 = require("./src/constants");
|
|
28
|
-
Object.defineProperty(exports, "DEFAULT_HANDLERS", { enumerable: true, get: function () { return constants_1.DEFAULT_HANDLERS; } });
|
|
29
|
-
__exportStar(require("./src/Enums"), exports);
|
|
30
|
-
__exportStar(require("./src/Interfaces"), exports);
|
|
1
|
+
import Server from "./src/Server";
|
|
2
|
+
import Model from "./src/Model";
|
|
3
|
+
import ApiError from "./src/Exceptions/ApiError";
|
|
4
|
+
import { DEFAULT_HANDLERS } from "./src/constants";
|
|
5
|
+
export * from "./src/Enums";
|
|
6
|
+
export * from "./src/Interfaces";
|
|
7
|
+
export { Server, Model, ApiError, DEFAULT_HANDLERS };
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
2
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
3
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -8,18 +7,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
8
|
});
|
|
10
9
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const Services_1 = require("../Services");
|
|
10
|
+
import { Relationships } from "../Enums";
|
|
11
|
+
import { IoCService } from "../Services";
|
|
14
12
|
class ModelTreeBuilder {
|
|
15
13
|
build() {
|
|
16
14
|
return __awaiter(this, void 0, void 0, function* () {
|
|
17
|
-
const logger = yield
|
|
18
|
-
const modelList = yield
|
|
15
|
+
const logger = yield IoCService.useByType("LogService");
|
|
16
|
+
const modelList = yield IoCService.useByType("ModelListService");
|
|
19
17
|
const tree = this.getRootLevelOfTree(modelList);
|
|
20
18
|
this.createRecursiveTree(tree, modelList);
|
|
21
19
|
this.addNestedRoutes(tree, modelList);
|
|
22
|
-
|
|
20
|
+
IoCService.singleton("ModelTree", () => tree);
|
|
23
21
|
logger.info("Model tree has been created.");
|
|
24
22
|
});
|
|
25
23
|
}
|
|
@@ -27,7 +25,7 @@ class ModelTreeBuilder {
|
|
|
27
25
|
const childModels = [];
|
|
28
26
|
modelList.get().forEach((model) => {
|
|
29
27
|
childModels.push(...model.relations
|
|
30
|
-
.filter((relation) => relation.type ===
|
|
28
|
+
.filter((relation) => relation.type === Relationships.HAS_MANY)
|
|
31
29
|
.map((relation) => relation.model));
|
|
32
30
|
});
|
|
33
31
|
return modelList.get().filter((model) => !childModels.includes(model.name));
|
|
@@ -48,7 +46,7 @@ class ModelTreeBuilder {
|
|
|
48
46
|
}
|
|
49
47
|
getChildModelNames(model) {
|
|
50
48
|
return model.relations
|
|
51
|
-
.filter((item) => item.type ===
|
|
49
|
+
.filter((item) => item.type === Relationships.HAS_MANY)
|
|
52
50
|
.map((item) => item.model);
|
|
53
51
|
}
|
|
54
52
|
addNestedRoutes(tree, modelList) {
|
|
@@ -61,4 +59,4 @@ class ModelTreeBuilder {
|
|
|
61
59
|
});
|
|
62
60
|
}
|
|
63
61
|
}
|
|
64
|
-
|
|
62
|
+
export default ModelTreeBuilder;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
2
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
3
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -8,21 +7,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
8
|
});
|
|
10
9
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const Resolvers_1 = require("../Resolvers");
|
|
19
|
-
const constants_1 = require("../constants");
|
|
20
|
-
const Enums_1 = require("../Enums");
|
|
21
|
-
const Services_1 = require("../Services");
|
|
10
|
+
import pluralize from "pluralize";
|
|
11
|
+
import { StatusCodes } from "http-status-codes";
|
|
12
|
+
import { paramCase, camelCase } from "change-case";
|
|
13
|
+
import { GeneralHookResolver, TransactionResolver, ModelMiddlewareResolver, } from "../Resolvers";
|
|
14
|
+
import { API_ROUTE_TEMPLATES } from "../constants";
|
|
15
|
+
import { HandlerTypes, Relationships, HttpMethods } from "../Enums";
|
|
16
|
+
import { IoCService, } from "../Services";
|
|
22
17
|
class RouterBuilder {
|
|
23
18
|
constructor() {
|
|
24
19
|
this.getPrimaryKeyName = (model) => {
|
|
25
|
-
return (
|
|
20
|
+
return (pluralize.singular(model.name).toLowerCase() +
|
|
26
21
|
this.ucFirst(model.instance.primaryKey));
|
|
27
22
|
};
|
|
28
23
|
this.ucFirst = (value) => {
|
|
@@ -30,7 +25,7 @@ class RouterBuilder {
|
|
|
30
25
|
};
|
|
31
26
|
this.getRootPrefix = () => __awaiter(this, void 0, void 0, function* () {
|
|
32
27
|
var _a;
|
|
33
|
-
const config = yield
|
|
28
|
+
const config = yield IoCService.use("Config");
|
|
34
29
|
let prefix = ((_a = config === null || config === void 0 ? void 0 : config.Application) === null || _a === void 0 ? void 0 : _a.prefix) || "api";
|
|
35
30
|
if (prefix.substr(0, 1) === "/") {
|
|
36
31
|
prefix = prefix.substr(1);
|
|
@@ -43,10 +38,10 @@ class RouterBuilder {
|
|
|
43
38
|
}
|
|
44
39
|
build() {
|
|
45
40
|
return __awaiter(this, void 0, void 0, function* () {
|
|
46
|
-
const logger = yield
|
|
47
|
-
const modelTree = yield
|
|
48
|
-
const modelList = yield
|
|
49
|
-
const generalHooks = yield
|
|
41
|
+
const logger = yield IoCService.useByType("LogService");
|
|
42
|
+
const modelTree = yield IoCService.useByType("ModelTree");
|
|
43
|
+
const modelList = yield IoCService.useByType("ModelListService");
|
|
44
|
+
const generalHooks = yield GeneralHookResolver.resolve();
|
|
50
45
|
if (generalHooks.onBeforeInit) {
|
|
51
46
|
generalHooks.onBeforeInit();
|
|
52
47
|
}
|
|
@@ -71,15 +66,15 @@ class RouterBuilder {
|
|
|
71
66
|
}
|
|
72
67
|
const resource = this.getResourcePath(model, relation);
|
|
73
68
|
// We create and handle routes by not duplicate so many lines.
|
|
74
|
-
for (const handler of Object.keys(
|
|
69
|
+
for (const handler of Object.keys(API_ROUTE_TEMPLATES)) {
|
|
75
70
|
const handlerType = handler;
|
|
76
71
|
if (!model.instance.handlers.includes(handlerType)) {
|
|
77
72
|
continue;
|
|
78
73
|
}
|
|
79
|
-
const urlCreator =
|
|
74
|
+
const urlCreator = API_ROUTE_TEMPLATES[handlerType];
|
|
80
75
|
const url = urlCreator(yield this.getRootPrefix(), urlPrefix, resource, model.instance.primaryKey);
|
|
81
76
|
// Detecting filters
|
|
82
|
-
const middlewares =
|
|
77
|
+
const middlewares = ModelMiddlewareResolver.resolve(model, handlerType);
|
|
83
78
|
// Adding the route to the express
|
|
84
79
|
yield this.addExpressRoute(handlerType, url, middlewares, model, parentModel, relation);
|
|
85
80
|
}
|
|
@@ -94,9 +89,9 @@ class RouterBuilder {
|
|
|
94
89
|
}
|
|
95
90
|
// We should different parameter name for child routes
|
|
96
91
|
const relation = model.relations.find((relation) => relation.model === model.name &&
|
|
97
|
-
relation.type ===
|
|
92
|
+
relation.type === Relationships.HAS_MANY);
|
|
98
93
|
if (relation) {
|
|
99
|
-
yield this.createRouteByModel(model, modelList, `${urlPrefix}${resource}/:${
|
|
94
|
+
yield this.createRouteByModel(model, modelList, `${urlPrefix}${resource}/:${camelCase(relation.foreignKey)}/`, model, relation, false);
|
|
100
95
|
}
|
|
101
96
|
});
|
|
102
97
|
}
|
|
@@ -107,7 +102,7 @@ class RouterBuilder {
|
|
|
107
102
|
}
|
|
108
103
|
// We should different parameter name for child routes
|
|
109
104
|
const primaryKey = this.getPrimaryKeyName(model);
|
|
110
|
-
const subRelations = model.relations.filter((item) => item.type ===
|
|
105
|
+
const subRelations = model.relations.filter((item) => item.type === Relationships.HAS_MANY);
|
|
111
106
|
for (const relation of subRelations) {
|
|
112
107
|
const child = model.children.find((item) => item.name === relation.model);
|
|
113
108
|
// It should be recursive
|
|
@@ -119,39 +114,39 @@ class RouterBuilder {
|
|
|
119
114
|
}
|
|
120
115
|
addExpressRoute(handlerType, url, middlewares, model, parentModel, relation) {
|
|
121
116
|
return __awaiter(this, void 0, void 0, function* () {
|
|
122
|
-
const docs = yield
|
|
123
|
-
const app = yield
|
|
117
|
+
const docs = yield IoCService.useByType("DocumentationService");
|
|
118
|
+
const app = yield IoCService.useByType("App");
|
|
124
119
|
const handler = (req, res) => {
|
|
125
120
|
this.requestHandler(handlerType, req, res, model, parentModel, relation);
|
|
126
121
|
};
|
|
127
122
|
switch (handlerType) {
|
|
128
|
-
case
|
|
123
|
+
case HandlerTypes.ALL:
|
|
129
124
|
app.get(url, middlewares, handler);
|
|
130
|
-
docs.push(
|
|
125
|
+
docs.push(HttpMethods.GET, url, model);
|
|
131
126
|
break;
|
|
132
|
-
case
|
|
127
|
+
case HandlerTypes.DELETE:
|
|
133
128
|
app.delete(url, middlewares, handler);
|
|
134
|
-
docs.push(
|
|
129
|
+
docs.push(HttpMethods.DELETE, url, model);
|
|
135
130
|
break;
|
|
136
|
-
case
|
|
131
|
+
case HandlerTypes.INSERT:
|
|
137
132
|
app.post(url, middlewares, handler);
|
|
138
|
-
docs.push(
|
|
133
|
+
docs.push(HttpMethods.POST, url, model);
|
|
139
134
|
break;
|
|
140
|
-
case
|
|
135
|
+
case HandlerTypes.PAGINATE:
|
|
141
136
|
app.get(url, middlewares, handler);
|
|
142
|
-
docs.push(
|
|
137
|
+
docs.push(HttpMethods.GET, url, model);
|
|
143
138
|
break;
|
|
144
|
-
case
|
|
139
|
+
case HandlerTypes.PATCH:
|
|
145
140
|
app.patch(url, middlewares, handler);
|
|
146
|
-
docs.push(
|
|
141
|
+
docs.push(HttpMethods.PATCH, url, model);
|
|
147
142
|
break;
|
|
148
|
-
case
|
|
143
|
+
case HandlerTypes.SHOW:
|
|
149
144
|
app.get(url, middlewares, handler);
|
|
150
|
-
docs.push(
|
|
145
|
+
docs.push(HttpMethods.GET, url, model);
|
|
151
146
|
break;
|
|
152
|
-
case
|
|
147
|
+
case HandlerTypes.UPDATE:
|
|
153
148
|
app.put(url, middlewares, handler);
|
|
154
|
-
docs.push(
|
|
149
|
+
docs.push(HttpMethods.PUT, url, model);
|
|
155
150
|
break;
|
|
156
151
|
default:
|
|
157
152
|
throw new Error("Undefined handler type");
|
|
@@ -163,9 +158,9 @@ class RouterBuilder {
|
|
|
163
158
|
let trx = null;
|
|
164
159
|
let hasTransaction = false;
|
|
165
160
|
try {
|
|
166
|
-
const factory = yield
|
|
167
|
-
const database = (yield
|
|
168
|
-
hasTransaction = yield
|
|
161
|
+
const factory = yield IoCService.useByType("HandlerFactory");
|
|
162
|
+
const database = (yield IoCService.use("Database"));
|
|
163
|
+
hasTransaction = yield TransactionResolver.resolve(model, handlerType);
|
|
169
164
|
if (hasTransaction) {
|
|
170
165
|
trx = yield database.transaction();
|
|
171
166
|
}
|
|
@@ -202,7 +197,7 @@ class RouterBuilder {
|
|
|
202
197
|
});
|
|
203
198
|
break;
|
|
204
199
|
default:
|
|
205
|
-
res.status(
|
|
200
|
+
res.status(StatusCodes.INTERNAL_SERVER_ERROR).json({
|
|
206
201
|
error: "An error occurred.",
|
|
207
202
|
});
|
|
208
203
|
break;
|
|
@@ -210,10 +205,10 @@ class RouterBuilder {
|
|
|
210
205
|
}
|
|
211
206
|
getResourcePath(model, relation) {
|
|
212
207
|
// TODO: Fix
|
|
213
|
-
return
|
|
208
|
+
return paramCase(pluralize.plural(model.name)).toLowerCase();
|
|
214
209
|
// return relation
|
|
215
210
|
// ? relation.resource
|
|
216
211
|
// : paramCase(pluralize.plural(model.name)).toLowerCase();
|
|
217
212
|
}
|
|
218
213
|
}
|
|
219
|
-
|
|
214
|
+
export default RouterBuilder;
|
|
@@ -1,10 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.RouterBuilder = exports.ModelTreeBuilder = void 0;
|
|
7
|
-
const ModelTreeBuilder_1 = __importDefault(require("./ModelTreeBuilder"));
|
|
8
|
-
exports.ModelTreeBuilder = ModelTreeBuilder_1.default;
|
|
9
|
-
const RouterBuilder_1 = __importDefault(require("./RouterBuilder"));
|
|
10
|
-
exports.RouterBuilder = RouterBuilder_1.default;
|
|
1
|
+
import ModelTreeBuilder from "./ModelTreeBuilder";
|
|
2
|
+
import RouterBuilder from "./RouterBuilder";
|
|
3
|
+
export { ModelTreeBuilder, RouterBuilder };
|
package/build/src/Enums.js
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.TimestampColumns = exports.SortTypes = exports.Relationships = exports.LogLevels = exports.HttpMethods = exports.Extensions = exports.HookFunctionTypes = exports.HandlerTypes = exports.DependencyTypes = exports.ConditionTypes = void 0;
|
|
4
|
-
var ConditionTypes;
|
|
1
|
+
export var ConditionTypes;
|
|
5
2
|
(function (ConditionTypes) {
|
|
6
3
|
ConditionTypes["NotNull"] = "NotNull";
|
|
7
4
|
ConditionTypes["Null"] = "NotNull";
|
|
@@ -17,13 +14,13 @@ var ConditionTypes;
|
|
|
17
14
|
ConditionTypes["NotIn"] = "NotIn";
|
|
18
15
|
ConditionTypes["Between"] = "Between";
|
|
19
16
|
ConditionTypes["NotBetween"] = "NotBetween";
|
|
20
|
-
})(ConditionTypes
|
|
21
|
-
var DependencyTypes;
|
|
17
|
+
})(ConditionTypes || (ConditionTypes = {}));
|
|
18
|
+
export var DependencyTypes;
|
|
22
19
|
(function (DependencyTypes) {
|
|
23
20
|
DependencyTypes["BIND"] = "BIND";
|
|
24
21
|
DependencyTypes["SINGLETON"] = "SINGLETON";
|
|
25
|
-
})(DependencyTypes
|
|
26
|
-
var HandlerTypes;
|
|
22
|
+
})(DependencyTypes || (DependencyTypes = {}));
|
|
23
|
+
export var HandlerTypes;
|
|
27
24
|
(function (HandlerTypes) {
|
|
28
25
|
HandlerTypes["INSERT"] = "store";
|
|
29
26
|
HandlerTypes["PAGINATE"] = "paginate";
|
|
@@ -32,8 +29,8 @@ var HandlerTypes;
|
|
|
32
29
|
HandlerTypes["DELETE"] = "destroy";
|
|
33
30
|
HandlerTypes["PATCH"] = "patch";
|
|
34
31
|
HandlerTypes["ALL"] = "all";
|
|
35
|
-
})(HandlerTypes
|
|
36
|
-
var HookFunctionTypes;
|
|
32
|
+
})(HandlerTypes || (HandlerTypes = {}));
|
|
33
|
+
export var HookFunctionTypes;
|
|
37
34
|
(function (HookFunctionTypes) {
|
|
38
35
|
HookFunctionTypes["onBeforeInsert"] = "onBeforeInsert";
|
|
39
36
|
HookFunctionTypes["onBeforeUpdateQuery"] = "onBeforeUpdateQuery";
|
|
@@ -51,40 +48,40 @@ var HookFunctionTypes;
|
|
|
51
48
|
HookFunctionTypes["onAfterPaginate"] = "onAfterPaginate";
|
|
52
49
|
HookFunctionTypes["onAfterAll"] = "onAfterAll";
|
|
53
50
|
HookFunctionTypes["onAfterShow"] = "onAfterShow";
|
|
54
|
-
})(HookFunctionTypes
|
|
55
|
-
var Extensions;
|
|
51
|
+
})(HookFunctionTypes || (HookFunctionTypes = {}));
|
|
52
|
+
export var Extensions;
|
|
56
53
|
(function (Extensions) {
|
|
57
54
|
Extensions["Hooks"] = "Hooks";
|
|
58
55
|
Extensions["Events"] = "Events";
|
|
59
|
-
})(Extensions
|
|
60
|
-
var HttpMethods;
|
|
56
|
+
})(Extensions || (Extensions = {}));
|
|
57
|
+
export var HttpMethods;
|
|
61
58
|
(function (HttpMethods) {
|
|
62
59
|
HttpMethods["POST"] = "POST";
|
|
63
60
|
HttpMethods["PUT"] = "PUT";
|
|
64
61
|
HttpMethods["PATCH"] = "PATCH";
|
|
65
62
|
HttpMethods["GET"] = "GET";
|
|
66
63
|
HttpMethods["DELETE"] = "DELETE";
|
|
67
|
-
})(HttpMethods
|
|
68
|
-
var LogLevels;
|
|
64
|
+
})(HttpMethods || (HttpMethods = {}));
|
|
65
|
+
export var LogLevels;
|
|
69
66
|
(function (LogLevels) {
|
|
70
67
|
LogLevels[LogLevels["NONE"] = 0] = "NONE";
|
|
71
68
|
LogLevels[LogLevels["ERROR"] = 1] = "ERROR";
|
|
72
69
|
LogLevels[LogLevels["WARNING"] = 2] = "WARNING";
|
|
73
70
|
LogLevels[LogLevels["INFO"] = 3] = "INFO";
|
|
74
71
|
LogLevels[LogLevels["ALL"] = 4] = "ALL";
|
|
75
|
-
})(LogLevels
|
|
76
|
-
var Relationships;
|
|
72
|
+
})(LogLevels || (LogLevels = {}));
|
|
73
|
+
export var Relationships;
|
|
77
74
|
(function (Relationships) {
|
|
78
75
|
Relationships["HAS_ONE"] = "HAS_ONE";
|
|
79
76
|
Relationships["HAS_MANY"] = "HAS_MANY";
|
|
80
|
-
})(Relationships
|
|
81
|
-
var SortTypes;
|
|
77
|
+
})(Relationships || (Relationships = {}));
|
|
78
|
+
export var SortTypes;
|
|
82
79
|
(function (SortTypes) {
|
|
83
80
|
SortTypes["ASC"] = "ASC";
|
|
84
81
|
SortTypes["DESC"] = "DESC";
|
|
85
|
-
})(SortTypes
|
|
86
|
-
var TimestampColumns;
|
|
82
|
+
})(SortTypes || (SortTypes = {}));
|
|
83
|
+
export var TimestampColumns;
|
|
87
84
|
(function (TimestampColumns) {
|
|
88
85
|
TimestampColumns["CREATED_AT"] = "createdAtColumn";
|
|
89
86
|
TimestampColumns["UPDATED_AT"] = "updatedAtColumn";
|
|
90
|
-
})(TimestampColumns
|
|
87
|
+
})(TimestampColumns || (TimestampColumns = {}));
|
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const http_status_codes_1 = require("http-status-codes");
|
|
1
|
+
import { StatusCodes } from "http-status-codes";
|
|
4
2
|
class ApiError extends Error {
|
|
5
3
|
constructor(message) {
|
|
6
4
|
super(message);
|
|
7
5
|
this.type = "ApiError";
|
|
8
|
-
this.status =
|
|
6
|
+
this.status = StatusCodes.BAD_REQUEST;
|
|
9
7
|
this.message = message;
|
|
10
8
|
}
|
|
11
9
|
}
|
|
12
|
-
|
|
10
|
+
export default ApiError;
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
2
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
3
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -8,14 +7,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
8
|
});
|
|
10
9
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const modelList = yield Services_1.IoCService.useByType("ModelListService");
|
|
10
|
+
import { addForeignKeyQuery, getRelatedData, serializeData, filterHiddenFields, callHooks, } from "./Helpers";
|
|
11
|
+
import { IoCService, QueryService } from "../Services";
|
|
12
|
+
import { HandlerTypes, HookFunctionTypes } from "../Enums";
|
|
13
|
+
export default (pack) => __awaiter(void 0, void 0, void 0, function* () {
|
|
14
|
+
const modelList = yield IoCService.useByType("ModelListService");
|
|
17
15
|
const { model, req, res, database, relation, parentModel } = pack;
|
|
18
|
-
const queryParser = new
|
|
16
|
+
const queryParser = new QueryService(model, modelList.get());
|
|
19
17
|
// We should parse URL query string to use as condition in Lucid query
|
|
20
18
|
const conditions = queryParser.get(req.query);
|
|
21
19
|
// Creating a new database query
|
|
@@ -23,22 +21,22 @@ exports.default = (pack) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
23
21
|
// Users should be able to select some fields to show.
|
|
24
22
|
queryParser.applyFields(query, conditions.fields);
|
|
25
23
|
// Binding parent id if there is.
|
|
26
|
-
|
|
24
|
+
addForeignKeyQuery(req, query, relation, parentModel);
|
|
27
25
|
// Users should be able to filter records
|
|
28
26
|
queryParser.applyWheres(query, conditions.q);
|
|
29
|
-
yield
|
|
27
|
+
yield callHooks(model, HookFunctionTypes.onBeforeAll, Object.assign(Object.assign({}, pack), { conditions,
|
|
30
28
|
query }));
|
|
31
29
|
// User should be able to select sorting fields and types
|
|
32
30
|
queryParser.applySorting(query, conditions.sort);
|
|
33
31
|
let result = yield query;
|
|
34
32
|
// We should try to get related data if there is any
|
|
35
|
-
yield
|
|
36
|
-
yield
|
|
33
|
+
yield getRelatedData(result, conditions.with, model, modelList, database, HandlerTypes.ALL, req);
|
|
34
|
+
yield callHooks(model, HookFunctionTypes.onAfterAll, Object.assign(Object.assign({}, pack), { result,
|
|
37
35
|
conditions,
|
|
38
36
|
query }));
|
|
39
37
|
// Serializing the data by the model's serialize method
|
|
40
|
-
result = yield
|
|
38
|
+
result = yield serializeData(result, model.instance.serialize, HandlerTypes.ALL, req);
|
|
41
39
|
// Filtering hidden fields from the response data.
|
|
42
|
-
|
|
40
|
+
filterHiddenFields(result, model.instance.hiddens);
|
|
43
41
|
return res.json(result);
|
|
44
42
|
});
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
2
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
3
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -8,30 +7,26 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
8
|
});
|
|
10
9
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const Helpers_1 = require("./Helpers");
|
|
16
|
-
const Enums_1 = require("../Enums");
|
|
17
|
-
const ApiError_1 = __importDefault(require("../Exceptions/ApiError"));
|
|
18
|
-
exports.default = (pack) => __awaiter(void 0, void 0, void 0, function* () {
|
|
10
|
+
import { addForeignKeyQuery, callHooks } from "./Helpers";
|
|
11
|
+
import { HookFunctionTypes } from "../Enums";
|
|
12
|
+
import ApiError from "../Exceptions/ApiError";
|
|
13
|
+
export default (pack) => __awaiter(void 0, void 0, void 0, function* () {
|
|
19
14
|
const { model, req, res, database, relation, parentModel } = pack;
|
|
20
15
|
const query = database
|
|
21
16
|
.from(model.instance.table)
|
|
22
17
|
.where(model.instance.primaryKey, req.params[model.instance.primaryKey]);
|
|
23
18
|
// If there is a relation, we should bind it
|
|
24
|
-
|
|
25
|
-
yield
|
|
19
|
+
addForeignKeyQuery(req, query, relation, parentModel);
|
|
20
|
+
yield callHooks(model, HookFunctionTypes.onBeforeDeleteQuery, Object.assign(Object.assign({}, pack), { query }));
|
|
26
21
|
let item = yield query.first();
|
|
27
22
|
if (!item) {
|
|
28
|
-
throw new
|
|
23
|
+
throw new ApiError(`The item is not found on ${model.name}.`);
|
|
29
24
|
}
|
|
30
|
-
yield
|
|
25
|
+
yield callHooks(model, HookFunctionTypes.onAfterDeleteQuery, Object.assign(Object.assign({}, pack), { query,
|
|
31
26
|
item }));
|
|
32
|
-
yield
|
|
27
|
+
yield callHooks(model, HookFunctionTypes.onBeforeDelete, Object.assign(Object.assign({}, pack), { query,
|
|
33
28
|
item }));
|
|
34
29
|
yield query.delete();
|
|
35
|
-
yield
|
|
30
|
+
yield callHooks(model, HookFunctionTypes.onAfterDelete, Object.assign(Object.assign({}, pack), { item }));
|
|
36
31
|
return res.json();
|
|
37
32
|
});
|
|
@@ -1,36 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const PatchHandler_1 = __importDefault(require("./PatchHandler"));
|
|
10
|
-
const UpdateHandler_1 = __importDefault(require("./UpdateHandler"));
|
|
11
|
-
const ShowHandler_1 = __importDefault(require("./ShowHandler"));
|
|
12
|
-
const StoreHandler_1 = __importDefault(require("./StoreHandler"));
|
|
13
|
-
const Enums_1 = require("../Enums");
|
|
1
|
+
import AllHandler from "./AllHandler";
|
|
2
|
+
import DestroyHandler from "./DestroyHandler";
|
|
3
|
+
import PaginateHandler from "./PaginateHandler";
|
|
4
|
+
import PatchHandler from "./PatchHandler";
|
|
5
|
+
import UpdateHandler from "./UpdateHandler";
|
|
6
|
+
import ShowHandler from "./ShowHandler";
|
|
7
|
+
import StoreHandler from "./StoreHandler";
|
|
8
|
+
import { HandlerTypes } from "../Enums";
|
|
14
9
|
class HandlerFactory {
|
|
15
10
|
get(handleType) {
|
|
16
11
|
switch (handleType) {
|
|
17
|
-
case
|
|
18
|
-
return
|
|
19
|
-
case
|
|
20
|
-
return
|
|
21
|
-
case
|
|
22
|
-
return
|
|
23
|
-
case
|
|
24
|
-
return
|
|
25
|
-
case
|
|
26
|
-
return
|
|
27
|
-
case
|
|
28
|
-
return
|
|
29
|
-
case
|
|
30
|
-
return
|
|
12
|
+
case HandlerTypes.ALL:
|
|
13
|
+
return AllHandler;
|
|
14
|
+
case HandlerTypes.DELETE:
|
|
15
|
+
return DestroyHandler;
|
|
16
|
+
case HandlerTypes.INSERT:
|
|
17
|
+
return StoreHandler;
|
|
18
|
+
case HandlerTypes.PAGINATE:
|
|
19
|
+
return PaginateHandler;
|
|
20
|
+
case HandlerTypes.PATCH:
|
|
21
|
+
return PatchHandler;
|
|
22
|
+
case HandlerTypes.SHOW:
|
|
23
|
+
return ShowHandler;
|
|
24
|
+
case HandlerTypes.UPDATE:
|
|
25
|
+
return UpdateHandler;
|
|
31
26
|
default:
|
|
32
27
|
throw new Error("Handler type is not defined");
|
|
33
28
|
}
|
|
34
29
|
}
|
|
35
30
|
}
|
|
36
|
-
|
|
31
|
+
export default HandlerFactory;
|
|
@@ -11,4 +11,4 @@ export declare const getParentColumn: (relation: IRelation | null) => string | n
|
|
|
11
11
|
export declare const addForeignKeyQuery: (request: Request, query: Knex.QueryBuilder, relation: IRelation | null, parentModel: IModelService | null) => void;
|
|
12
12
|
export declare const serializeData: (itemArray: any[] | any, modelSerializer: (data: any, request: Request) => void, handler: HandlerTypes, request: Request) => Promise<any[]>;
|
|
13
13
|
export declare const filterHiddenFields: (itemArray: any[], hiddens: string[] | null) => void;
|
|
14
|
-
export declare const getRelatedData: (data: any[], withArray: IWith[], model: IModelService, modelList: ModelListService, database: Knex, handler: HandlerTypes, request: Request) => Promise<void>;
|
|
14
|
+
export declare const getRelatedData: (data: any[], withArray: IWith[], model: IModelService, modelList: ModelListService, database: Knex | Knex.Transaction, handler: HandlerTypes, request: Request) => Promise<void>;
|