axe-api 0.30.0-rc6 → 0.30.0-rc7
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/src/Builders/ModelTreeBuilder.js +13 -19
- package/build/src/Builders/RouterBuilder.js +154 -176
- package/build/src/Exceptions/ApiError.js +3 -0
- package/build/src/Exceptions/AxeError.js +3 -0
- package/build/src/Handlers/AllHandler.js +15 -18
- package/build/src/Handlers/DestroyHandler.js +23 -20
- package/build/src/Handlers/DocsHandler.js +12 -12
- package/build/src/Handlers/ForceDestroyHandler.js +22 -19
- package/build/src/Handlers/Helpers.js +16 -25
- package/build/src/Handlers/PaginateHandler.js +15 -18
- package/build/src/Handlers/PatchHandler.js +29 -23
- package/build/src/Handlers/RoutesHandler.js +2 -11
- package/build/src/Handlers/ShowHandler.js +15 -18
- package/build/src/Handlers/StoreHandler.js +14 -17
- package/build/src/Handlers/UpdateHandler.js +25 -22
- package/build/src/Helpers.js +2 -11
- package/build/src/Middlewares/acceptLanguageMiddleware.js +3 -12
- package/build/src/Model.js +1 -1
- package/build/src/Resolvers/FileResolver.js +35 -48
- package/build/src/Resolvers/GeneralHookResolver.js +12 -22
- package/build/src/Resolvers/ModelResolver.js +125 -148
- package/build/src/Resolvers/TransactionResolver.js +36 -46
- package/build/src/Resolvers/VersionConfigResolver.js +10 -20
- package/build/src/Resolvers/VersionResolver.js +20 -35
- package/build/src/Resolvers/WithQueryResolver.js +16 -14
- package/build/src/Server.js +57 -78
- package/build/src/Services/APIService.js +2 -0
- package/build/src/Services/DocumentationService.js +2 -0
- package/build/src/Services/IoCService.js +16 -29
- package/build/src/Services/LimitService.js +2 -2
- package/build/src/Services/LogService.js +2 -0
- package/build/src/Services/ModelListService.js +1 -0
- package/build/src/Services/ModelService.js +11 -2
- package/build/src/Services/QueryService.js +18 -14
- package/build/src/Services/SchemaValidatorService.js +89 -99
- package/package.json +5 -4
|
@@ -1,29 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
const Enums_1 = require("../Enums");
|
|
13
4
|
const Services_1 = require("../Services");
|
|
14
5
|
class ModelTreeBuilder {
|
|
6
|
+
version;
|
|
15
7
|
constructor(version) {
|
|
16
8
|
this.version = version;
|
|
17
9
|
}
|
|
18
|
-
build() {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
logger.info(`[${this.version.name}] Model tree has been created.`);
|
|
26
|
-
});
|
|
10
|
+
async build() {
|
|
11
|
+
const logger = Services_1.LogService.getInstance();
|
|
12
|
+
const tree = this.getRootLevelOfTree();
|
|
13
|
+
this.createRecursiveTree(tree);
|
|
14
|
+
this.addNestedRoutes(tree);
|
|
15
|
+
this.version.modelTree = tree;
|
|
16
|
+
logger.info(`[${this.version.name}] Model tree has been created.`);
|
|
27
17
|
}
|
|
28
18
|
getRootLevelOfTree() {
|
|
29
19
|
const childModels = [];
|
|
@@ -60,7 +50,11 @@ class ModelTreeBuilder {
|
|
|
60
50
|
this.version.modelList.get().forEach((model) => {
|
|
61
51
|
const recursiveRelations = model.relations.filter((relation) => relation.model === model.name);
|
|
62
52
|
if (recursiveRelations.length === 2) {
|
|
63
|
-
tree.push(
|
|
53
|
+
tree.push({
|
|
54
|
+
...model,
|
|
55
|
+
isRecursive: true,
|
|
56
|
+
children: [],
|
|
57
|
+
});
|
|
64
58
|
}
|
|
65
59
|
});
|
|
66
60
|
}
|
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
4
|
};
|
|
@@ -23,186 +14,162 @@ const HandlerFactory_1 = __importDefault(require("../Handlers/HandlerFactory"));
|
|
|
23
14
|
const Services_1 = require("../Services");
|
|
24
15
|
const Middlewares_1 = require("../Middlewares");
|
|
25
16
|
class RouterBuilder {
|
|
17
|
+
version;
|
|
26
18
|
constructor(version) {
|
|
27
|
-
this.getPrimaryKeyName = (model) => {
|
|
28
|
-
return (pluralize_1.default.singular(model.name).toLowerCase() +
|
|
29
|
-
this.ucFirst(model.instance.primaryKey));
|
|
30
|
-
};
|
|
31
|
-
this.ucFirst = (value) => {
|
|
32
|
-
return value.charAt(0).toUpperCase() + value.slice(1);
|
|
33
|
-
};
|
|
34
|
-
this.getRootPrefix = () => __awaiter(this, void 0, void 0, function* () {
|
|
35
|
-
const api = Services_1.APIService.getInstance();
|
|
36
|
-
let prefix = api.config.prefix || "api";
|
|
37
|
-
if (prefix.substr(0, 1) === "/") {
|
|
38
|
-
prefix = prefix.substr(1);
|
|
39
|
-
}
|
|
40
|
-
if (prefix.substr(prefix.length - 1) === "/") {
|
|
41
|
-
prefix = prefix.substr(0, prefix.length - 1);
|
|
42
|
-
}
|
|
43
|
-
return prefix;
|
|
44
|
-
});
|
|
45
19
|
this.version = version;
|
|
46
20
|
}
|
|
47
|
-
build() {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
}
|
|
60
|
-
});
|
|
21
|
+
async build() {
|
|
22
|
+
const app = await Services_1.IoCService.useByType("App");
|
|
23
|
+
const logger = Services_1.LogService.getInstance();
|
|
24
|
+
const generalHooks = await new Resolvers_1.GeneralHookResolver(this.version).resolve();
|
|
25
|
+
if (generalHooks.onBeforeInit) {
|
|
26
|
+
generalHooks.onBeforeInit(app);
|
|
27
|
+
}
|
|
28
|
+
await this.createRoutesByModelTree();
|
|
29
|
+
logger.info(`[${this.version.name}] Express routes have been created.`);
|
|
30
|
+
if (generalHooks.onAfterInit) {
|
|
31
|
+
generalHooks.onAfterInit(app);
|
|
32
|
+
}
|
|
61
33
|
}
|
|
62
|
-
createRoutesByModelTree() {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
});
|
|
34
|
+
async createRoutesByModelTree() {
|
|
35
|
+
for (const model of this.version.modelTree) {
|
|
36
|
+
await this.createRouteByModel(model);
|
|
37
|
+
}
|
|
68
38
|
}
|
|
69
|
-
createRouteByModel(model, urlPrefix = "", parentModel = null, relation = null, allowRecursive = true) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
continue;
|
|
80
|
-
}
|
|
81
|
-
const urlCreator = constants_1.API_ROUTE_TEMPLATES[handlerType];
|
|
82
|
-
const url = urlCreator(path_1.default.join(yield this.getRootPrefix(), this.version.name), urlPrefix, resource, model.instance.primaryKey);
|
|
83
|
-
// Creating the middleware list for the route. As default, we support some
|
|
84
|
-
// internal middlewares such as `Accept Language Middleware` which parse
|
|
85
|
-
// the "accept-language" header to use in the application general.
|
|
86
|
-
const middlewares = [
|
|
87
|
-
Middlewares_1.acceptLanguageMiddleware,
|
|
88
|
-
...model.instance.getMiddlewares(handlerType),
|
|
89
|
-
];
|
|
90
|
-
// Adding the route to the express
|
|
91
|
-
yield this.addExpressRoute(handlerType, url, middlewares, model, parentModel, relation);
|
|
39
|
+
async createRouteByModel(model, urlPrefix = "", parentModel = null, relation = null, allowRecursive = true) {
|
|
40
|
+
if (model.instance.ignore) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const resource = this.getResourcePath(model, relation);
|
|
44
|
+
// We create and handle routes by not duplicate so many lines.
|
|
45
|
+
for (const handler of Object.keys(constants_1.API_ROUTE_TEMPLATES)) {
|
|
46
|
+
const handlerType = handler;
|
|
47
|
+
if (!model.instance.handlers.includes(handlerType)) {
|
|
48
|
+
continue;
|
|
92
49
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
50
|
+
const urlCreator = constants_1.API_ROUTE_TEMPLATES[handlerType];
|
|
51
|
+
const url = urlCreator(path_1.default.join(await this.getRootPrefix(), this.version.name), urlPrefix, resource, model.instance.primaryKey);
|
|
52
|
+
// Creating the middleware list for the route. As default, we support some
|
|
53
|
+
// internal middlewares such as `Accept Language Middleware` which parse
|
|
54
|
+
// the "accept-language" header to use in the application general.
|
|
55
|
+
const middlewares = [
|
|
56
|
+
Middlewares_1.acceptLanguageMiddleware,
|
|
57
|
+
...model.instance.getMiddlewares(handlerType),
|
|
58
|
+
];
|
|
59
|
+
// Adding the route to the express
|
|
60
|
+
await this.addExpressRoute(handlerType, url, middlewares, model, parentModel, relation);
|
|
61
|
+
}
|
|
62
|
+
await this.createChildRoutes(model, resource, urlPrefix);
|
|
63
|
+
await this.createNestedRoutes(model, allowRecursive, urlPrefix, resource);
|
|
96
64
|
}
|
|
97
|
-
createNestedRoutes(model, allowRecursive, urlPrefix, resource) {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
}
|
|
108
|
-
});
|
|
65
|
+
async createNestedRoutes(model, allowRecursive, urlPrefix, resource) {
|
|
66
|
+
if (!model.isRecursive || !allowRecursive) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
// We should different parameter name for child routes
|
|
70
|
+
const relation = model.relations.find((relation) => relation.model === model.name &&
|
|
71
|
+
relation.type === Enums_1.Relationships.HAS_MANY);
|
|
72
|
+
if (relation) {
|
|
73
|
+
await this.createRouteByModel(model, `${urlPrefix}${resource}/:${(0, change_case_1.camelCase)(relation.foreignKey)}/`, model, relation, false);
|
|
74
|
+
}
|
|
109
75
|
}
|
|
110
|
-
createChildRoutes(model, resource, urlPrefix) {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
yield this.createRouteByModel(child, `${urlPrefix}${resource}/:${(0, change_case_1.camelCase)(relation.foreignKey)}/`, model, relation);
|
|
122
|
-
}
|
|
76
|
+
async createChildRoutes(model, resource, urlPrefix) {
|
|
77
|
+
if (model.children.length === 0) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
// We should different parameter name for child routes
|
|
81
|
+
const subRelations = model.relations.filter((item) => item.type === Enums_1.Relationships.HAS_MANY);
|
|
82
|
+
for (const relation of subRelations) {
|
|
83
|
+
const child = model.children.find((item) => item.name === relation.model);
|
|
84
|
+
// It should be recursive
|
|
85
|
+
if (child) {
|
|
86
|
+
await this.createRouteByModel(child, `${urlPrefix}${resource}/:${(0, change_case_1.camelCase)(relation.foreignKey)}/`, model, relation);
|
|
123
87
|
}
|
|
124
|
-
}
|
|
88
|
+
}
|
|
125
89
|
}
|
|
126
|
-
|
|
127
|
-
return
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
90
|
+
getPrimaryKeyName = (model) => {
|
|
91
|
+
return (pluralize_1.default.singular(model.name).toLowerCase() +
|
|
92
|
+
this.ucFirst(model.instance.primaryKey));
|
|
93
|
+
};
|
|
94
|
+
ucFirst = (value) => {
|
|
95
|
+
return value.charAt(0).toUpperCase() + value.slice(1);
|
|
96
|
+
};
|
|
97
|
+
async addExpressRoute(handlerType, url, middlewares, model, parentModel, relation) {
|
|
98
|
+
const docs = Services_1.DocumentationService.getInstance();
|
|
99
|
+
const app = await Services_1.IoCService.useByType("App");
|
|
100
|
+
const handler = (req, res) => {
|
|
101
|
+
this.requestHandler(handlerType, req, res, model, parentModel, relation);
|
|
102
|
+
};
|
|
103
|
+
switch (handlerType) {
|
|
104
|
+
case Enums_1.HandlerTypes.ALL:
|
|
105
|
+
app.get(url, middlewares, handler);
|
|
106
|
+
docs.push(Enums_1.HttpMethods.GET, url, model);
|
|
107
|
+
break;
|
|
108
|
+
case Enums_1.HandlerTypes.DELETE:
|
|
109
|
+
app.delete(url, middlewares, handler);
|
|
110
|
+
docs.push(Enums_1.HttpMethods.DELETE, url, model);
|
|
111
|
+
break;
|
|
112
|
+
case Enums_1.HandlerTypes.FORCE_DELETE:
|
|
113
|
+
app.delete(url, middlewares, handler);
|
|
114
|
+
docs.push(Enums_1.HttpMethods.DELETE, url, model);
|
|
115
|
+
break;
|
|
116
|
+
case Enums_1.HandlerTypes.INSERT:
|
|
117
|
+
app.post(url, middlewares, handler);
|
|
118
|
+
docs.push(Enums_1.HttpMethods.POST, url, model);
|
|
119
|
+
break;
|
|
120
|
+
case Enums_1.HandlerTypes.PAGINATE:
|
|
121
|
+
app.get(url, middlewares, handler);
|
|
122
|
+
docs.push(Enums_1.HttpMethods.GET, url, model);
|
|
123
|
+
break;
|
|
124
|
+
case Enums_1.HandlerTypes.PATCH:
|
|
125
|
+
app.patch(url, middlewares, handler);
|
|
126
|
+
docs.push(Enums_1.HttpMethods.PATCH, url, model);
|
|
127
|
+
break;
|
|
128
|
+
case Enums_1.HandlerTypes.SHOW:
|
|
129
|
+
app.get(url, middlewares, handler);
|
|
130
|
+
docs.push(Enums_1.HttpMethods.GET, url, model);
|
|
131
|
+
break;
|
|
132
|
+
case Enums_1.HandlerTypes.UPDATE:
|
|
133
|
+
app.put(url, middlewares, handler);
|
|
134
|
+
docs.push(Enums_1.HttpMethods.PUT, url, model);
|
|
135
|
+
break;
|
|
136
|
+
default:
|
|
137
|
+
throw new Error("Undefined handler type");
|
|
138
|
+
}
|
|
170
139
|
}
|
|
171
|
-
requestHandler(handlerType, req, res, model, parentModel, relation) {
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
trx = yield database.transaction();
|
|
181
|
-
}
|
|
182
|
-
const handler = HandlerFactory_1.default.get(handlerType);
|
|
183
|
-
const pack = {
|
|
184
|
-
api,
|
|
185
|
-
version: this.version,
|
|
186
|
-
req,
|
|
187
|
-
res,
|
|
188
|
-
handlerType,
|
|
189
|
-
model,
|
|
190
|
-
parentModel,
|
|
191
|
-
relation,
|
|
192
|
-
database: hasTransaction && trx ? trx : database,
|
|
193
|
-
};
|
|
194
|
-
yield handler(pack);
|
|
195
|
-
if (hasTransaction && trx) {
|
|
196
|
-
trx.commit();
|
|
197
|
-
}
|
|
140
|
+
async requestHandler(handlerType, req, res, model, parentModel, relation) {
|
|
141
|
+
let trx = null;
|
|
142
|
+
let hasTransaction = false;
|
|
143
|
+
try {
|
|
144
|
+
const database = (await Services_1.IoCService.use("Database"));
|
|
145
|
+
const api = Services_1.APIService.getInstance();
|
|
146
|
+
hasTransaction = await new Resolvers_1.TransactionResolver(this.version).resolve(model, handlerType);
|
|
147
|
+
if (hasTransaction) {
|
|
148
|
+
trx = await database.transaction();
|
|
198
149
|
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
150
|
+
const handler = HandlerFactory_1.default.get(handlerType);
|
|
151
|
+
const pack = {
|
|
152
|
+
api,
|
|
153
|
+
version: this.version,
|
|
154
|
+
req,
|
|
155
|
+
res,
|
|
156
|
+
handlerType,
|
|
157
|
+
model,
|
|
158
|
+
parentModel,
|
|
159
|
+
relation,
|
|
160
|
+
database: hasTransaction && trx ? trx : database,
|
|
161
|
+
};
|
|
162
|
+
await handler(pack);
|
|
163
|
+
if (hasTransaction && trx) {
|
|
164
|
+
trx.commit();
|
|
204
165
|
}
|
|
205
|
-
}
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
if (hasTransaction && trx) {
|
|
169
|
+
trx.rollback();
|
|
170
|
+
}
|
|
171
|
+
this.sendErrorAsResponse(res, error);
|
|
172
|
+
}
|
|
206
173
|
}
|
|
207
174
|
sendErrorAsResponse(res, error) {
|
|
208
175
|
const type = error.type;
|
|
@@ -229,5 +196,16 @@ class RouterBuilder {
|
|
|
229
196
|
? (0, change_case_1.paramCase)(relation.name)
|
|
230
197
|
: (0, change_case_1.paramCase)(pluralize_1.default.plural(model.name)).toLowerCase();
|
|
231
198
|
}
|
|
199
|
+
getRootPrefix = async () => {
|
|
200
|
+
const api = Services_1.APIService.getInstance();
|
|
201
|
+
let prefix = api.config.prefix || "api";
|
|
202
|
+
if (prefix.substr(0, 1) === "/") {
|
|
203
|
+
prefix = prefix.substr(1);
|
|
204
|
+
}
|
|
205
|
+
if (prefix.substr(prefix.length - 1) === "/") {
|
|
206
|
+
prefix = prefix.substr(0, prefix.length - 1);
|
|
207
|
+
}
|
|
208
|
+
return prefix;
|
|
209
|
+
};
|
|
232
210
|
}
|
|
233
211
|
exports.default = RouterBuilder;
|
|
@@ -1,18 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
const Helpers_1 = require("./Helpers");
|
|
13
4
|
const Services_1 = require("../Services");
|
|
14
5
|
const Enums_1 = require("../Enums");
|
|
15
|
-
exports.default = (pack) =>
|
|
6
|
+
exports.default = async (pack) => {
|
|
16
7
|
const { version, model, req, res, database, relation, parentModel } = pack;
|
|
17
8
|
const queryParser = new Services_1.QueryService(model, version.modelList.get(), version.config);
|
|
18
9
|
// We should parse URL query string to use as condition in Lucid query
|
|
@@ -27,19 +18,25 @@ exports.default = (pack) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
27
18
|
(0, Helpers_1.addForeignKeyQuery)(req, query, relation, parentModel);
|
|
28
19
|
// Users should be able to filter records
|
|
29
20
|
queryParser.applyWheres(query, conditions.q);
|
|
30
|
-
|
|
31
|
-
|
|
21
|
+
await (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onBeforeAll, {
|
|
22
|
+
...pack,
|
|
23
|
+
conditions,
|
|
24
|
+
query,
|
|
25
|
+
});
|
|
32
26
|
// User should be able to select sorting fields and types
|
|
33
27
|
queryParser.applySorting(query, conditions.sort);
|
|
34
|
-
let result =
|
|
28
|
+
let result = await query;
|
|
35
29
|
// We should try to get related data if there is any
|
|
36
|
-
|
|
37
|
-
|
|
30
|
+
await (0, Helpers_1.getRelatedData)(version, result, conditions.with, model, version.modelList, database, Enums_1.HandlerTypes.ALL, req);
|
|
31
|
+
await (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onAfterAll, {
|
|
32
|
+
...pack,
|
|
33
|
+
result,
|
|
38
34
|
conditions,
|
|
39
|
-
query
|
|
35
|
+
query,
|
|
36
|
+
});
|
|
40
37
|
// Serializing the data by the model's serialize method
|
|
41
|
-
result =
|
|
38
|
+
result = await (0, Helpers_1.serializeData)(version, result, model.serialize, Enums_1.HandlerTypes.ALL, req);
|
|
42
39
|
// Filtering hidden fields from the response data.
|
|
43
40
|
(0, Helpers_1.filterHiddenFields)(result, model.instance.hiddens);
|
|
44
41
|
return res.json(result);
|
|
45
|
-
}
|
|
42
|
+
};
|
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
4
|
};
|
|
@@ -15,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
6
|
const Helpers_1 = require("./Helpers");
|
|
16
7
|
const Enums_1 = require("../Enums");
|
|
17
8
|
const ApiError_1 = __importDefault(require("../Exceptions/ApiError"));
|
|
18
|
-
exports.default = (pack) =>
|
|
9
|
+
exports.default = async (pack) => {
|
|
19
10
|
const { model, req, res, database, relation, parentModel } = pack;
|
|
20
11
|
const query = database
|
|
21
12
|
.from(model.instance.table)
|
|
@@ -24,24 +15,36 @@ exports.default = (pack) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
24
15
|
(0, Helpers_1.addSoftDeleteQuery)(model, null, query);
|
|
25
16
|
// If there is a relation, we should bind it
|
|
26
17
|
(0, Helpers_1.addForeignKeyQuery)(req, query, relation, parentModel);
|
|
27
|
-
|
|
28
|
-
|
|
18
|
+
await (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onBeforeDeleteQuery, {
|
|
19
|
+
...pack,
|
|
20
|
+
query,
|
|
21
|
+
});
|
|
22
|
+
const item = await query.first();
|
|
29
23
|
if (!item) {
|
|
30
24
|
throw new ApiError_1.default(`The item is not found on ${model.name}.`);
|
|
31
25
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
item
|
|
26
|
+
await (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onAfterDeleteQuery, {
|
|
27
|
+
...pack,
|
|
28
|
+
query,
|
|
29
|
+
item,
|
|
30
|
+
});
|
|
31
|
+
await (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onBeforeDelete, {
|
|
32
|
+
...pack,
|
|
33
|
+
query,
|
|
34
|
+
item,
|
|
35
|
+
});
|
|
36
36
|
// If there is a deletedAtColumn, it means that this table support soft-delete
|
|
37
37
|
if (model.instance.deletedAtColumn) {
|
|
38
|
-
|
|
38
|
+
await query.update({
|
|
39
39
|
[model.instance.deletedAtColumn]: new Date(),
|
|
40
40
|
});
|
|
41
41
|
}
|
|
42
42
|
else {
|
|
43
|
-
|
|
43
|
+
await query.delete();
|
|
44
44
|
}
|
|
45
|
-
|
|
45
|
+
await (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onAfterDelete, {
|
|
46
|
+
...pack,
|
|
47
|
+
item,
|
|
48
|
+
});
|
|
46
49
|
return res.json();
|
|
47
|
-
}
|
|
50
|
+
};
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
const Services_1 = require("../Services");
|
|
13
|
-
exports.default = (req, res) =>
|
|
4
|
+
exports.default = async (req, res) => {
|
|
14
5
|
const docs = Services_1.DocumentationService.getInstance();
|
|
15
6
|
const api = Services_1.APIService.getInstance();
|
|
16
7
|
res.json({
|
|
17
8
|
routes: docs.get(),
|
|
18
9
|
versions: api.versions.map((version) => {
|
|
19
|
-
return
|
|
10
|
+
return {
|
|
11
|
+
...version,
|
|
12
|
+
config: {
|
|
13
|
+
...version.config,
|
|
14
|
+
transaction: undefined,
|
|
15
|
+
},
|
|
16
|
+
folders: undefined,
|
|
17
|
+
modelList: undefined,
|
|
18
|
+
models: version.modelList.get(),
|
|
19
|
+
};
|
|
20
20
|
}),
|
|
21
21
|
});
|
|
22
|
-
}
|
|
22
|
+
};
|