axe-api 0.21.0 → 0.30.0-rc1
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/dev-kit/app/Config/Application.d.ts +3 -0
- package/build/dev-kit/app/Config/Application.js +14 -0
- package/build/dev-kit/app/Config/Database.d.ts +3 -0
- package/build/dev-kit/app/Config/Database.js +24 -0
- package/build/dev-kit/app/Events/UserEvent.d.ts +3 -0
- package/build/dev-kit/app/Events/UserEvent.js +16 -0
- package/build/dev-kit/app/Hooks/CustomerHook.d.ts +3 -0
- package/build/dev-kit/app/Hooks/CustomerHook.js +16 -0
- package/build/dev-kit/app/Hooks/EmployeeHook.d.ts +2 -0
- package/build/dev-kit/app/Hooks/EmployeeHook.js +16 -0
- package/build/dev-kit/app/Hooks/UserHook.d.ts +3 -0
- package/build/dev-kit/app/Hooks/UserHook.js +17 -0
- package/build/dev-kit/app/Models/Customer.d.ts +7 -0
- package/build/dev-kit/app/Models/Customer.js +15 -0
- package/build/dev-kit/app/Models/Employee.d.ts +9 -0
- package/build/dev-kit/app/Models/Employee.js +21 -0
- package/build/dev-kit/app/Models/EmployeeAddress.d.ts +8 -0
- package/build/dev-kit/app/Models/EmployeeAddress.js +18 -0
- package/build/dev-kit/app/Models/Post.d.ts +6 -0
- package/build/dev-kit/app/Models/Post.js +14 -0
- package/build/dev-kit/app/Models/User.d.ts +7 -0
- package/build/dev-kit/app/Models/User.js +23 -0
- package/build/dev-kit/app/Serialization/UserSerialization.d.ts +3 -0
- package/build/dev-kit/app/Serialization/UserSerialization.js +6 -0
- package/build/dev-kit/app/config.d.ts +3 -0
- package/build/dev-kit/app/config.js +31 -0
- package/build/dev-kit/app/init.d.ts +4 -0
- package/build/dev-kit/app/init.js +16 -0
- package/build/dev-kit/app/v1/Events/UserEvent.d.ts +3 -0
- package/build/dev-kit/app/v1/Events/UserEvent.js +16 -0
- package/build/dev-kit/app/v1/Hooks/CustomerHook.d.ts +3 -0
- package/build/dev-kit/app/v1/Hooks/CustomerHook.js +16 -0
- package/build/dev-kit/app/v1/Hooks/EmployeeHook.d.ts +2 -0
- package/build/dev-kit/app/v1/Hooks/EmployeeHook.js +16 -0
- package/build/dev-kit/app/v1/Hooks/UserHook.d.ts +3 -0
- package/build/dev-kit/app/v1/Hooks/UserHook.js +17 -0
- package/build/dev-kit/app/v1/Models/Customer.d.ts +7 -0
- package/build/dev-kit/app/v1/Models/Customer.js +15 -0
- package/build/dev-kit/app/v1/Models/Employee.d.ts +9 -0
- package/build/dev-kit/app/v1/Models/Employee.js +21 -0
- package/build/dev-kit/app/v1/Models/EmployeeAddress.d.ts +8 -0
- package/build/dev-kit/app/v1/Models/EmployeeAddress.js +18 -0
- package/build/dev-kit/app/v1/Models/Post.d.ts +6 -0
- package/build/dev-kit/app/v1/Models/Post.js +14 -0
- package/build/dev-kit/app/v1/Models/User.d.ts +7 -0
- package/build/dev-kit/app/v1/Models/User.js +23 -0
- package/build/dev-kit/app/v1/Serialization/PostSerialization.d.ts +3 -0
- package/build/dev-kit/app/v1/Serialization/PostSerialization.js +6 -0
- package/build/dev-kit/app/v1/Serialization/UserSerialization.d.ts +3 -0
- package/build/dev-kit/app/v1/Serialization/UserSerialization.js +5 -0
- package/build/dev-kit/app/v1/config.d.ts +3 -0
- package/build/dev-kit/app/v1/config.js +19 -0
- package/build/dev-kit/app/v1/init.d.ts +4 -0
- package/build/dev-kit/app/v1/init.js +16 -0
- package/build/dev-kit/app/v2/Events/UserEvent.d.ts +3 -0
- package/build/dev-kit/app/v2/Events/UserEvent.js +16 -0
- package/build/dev-kit/app/v2/Hooks/CustomerHook.d.ts +3 -0
- package/build/dev-kit/app/v2/Hooks/CustomerHook.js +16 -0
- package/build/dev-kit/app/v2/Hooks/EmployeeHook.d.ts +2 -0
- package/build/dev-kit/app/v2/Hooks/EmployeeHook.js +16 -0
- package/build/dev-kit/app/v2/Hooks/UserHook.d.ts +3 -0
- package/build/dev-kit/app/v2/Hooks/UserHook.js +17 -0
- package/build/dev-kit/app/v2/Models/Customer.d.ts +10 -0
- package/build/dev-kit/app/v2/Models/Customer.js +20 -0
- package/build/dev-kit/app/v2/Models/Employee.d.ts +9 -0
- package/build/dev-kit/app/v2/Models/Employee.js +21 -0
- package/build/dev-kit/app/v2/Models/EmployeeAddress.d.ts +8 -0
- package/build/dev-kit/app/v2/Models/EmployeeAddress.js +18 -0
- package/build/dev-kit/app/v2/Models/Post.d.ts +6 -0
- package/build/dev-kit/app/v2/Models/Post.js +14 -0
- package/build/dev-kit/app/v2/Models/User.d.ts +7 -0
- package/build/dev-kit/app/v2/Models/User.js +23 -0
- package/build/dev-kit/app/v2/Serialization/UserSerialization.d.ts +3 -0
- package/build/dev-kit/app/v2/Serialization/UserSerialization.js +5 -0
- package/build/dev-kit/app/v2/config.d.ts +3 -0
- package/build/dev-kit/app/v2/config.js +9 -0
- package/build/dev-kit/app/v2/init.d.ts +4 -0
- package/build/dev-kit/app/v2/init.js +16 -0
- package/build/dev-kit/app/v3/config.d.ts +3 -0
- package/build/dev-kit/app/v3/config.js +9 -0
- package/build/dev-kit/config.d.ts +3 -0
- package/build/dev-kit/config.js +31 -0
- package/build/dev-kit.d.ts +1 -0
- package/build/dev-kit.js +16 -0
- package/build/package.json +67 -0
- package/build/src/Builders/ModelTreeBuilder.d.ts +3 -0
- package/build/src/Builders/ModelTreeBuilder.js +21 -17
- package/build/src/Builders/RouterBuilder.d.ts +3 -0
- package/build/src/Builders/RouterBuilder.js +31 -26
- package/build/src/Enums.d.ts +13 -0
- package/build/src/Enums.js +15 -1
- package/build/src/Exceptions/AxeError.d.ts +8 -0
- package/build/src/Exceptions/AxeError.js +11 -0
- package/build/src/Handlers/AllHandler.js +6 -5
- package/build/src/Handlers/DestroyHandler.js +11 -1
- package/build/src/Handlers/DocsHandler.d.ts +3 -0
- package/build/src/Handlers/DocsHandler.js +22 -0
- package/build/src/Handlers/ForceDestroyHandler.d.ts +3 -0
- package/build/src/Handlers/ForceDestroyHandler.js +41 -0
- package/build/src/Handlers/HandlerFactory.d.ts +1 -1
- package/build/src/Handlers/HandlerFactory.js +4 -1
- package/build/src/Handlers/Helpers.d.ts +5 -3
- package/build/src/Handlers/Helpers.js +24 -14
- package/build/src/Handlers/PaginateHandler.js +6 -5
- package/build/src/Handlers/PatchHandler.js +4 -2
- package/build/src/Handlers/RoutesHandler.d.ts +3 -0
- package/build/src/Handlers/RoutesHandler.js +16 -0
- package/build/src/Handlers/ShowHandler.js +6 -5
- package/build/src/Handlers/StoreHandler.js +2 -2
- package/build/src/Handlers/UpdateHandler.js +4 -2
- package/build/src/Helpers.d.ts +4 -0
- package/build/src/Helpers.js +78 -0
- package/build/src/Interfaces.d.ts +36 -11
- package/build/src/Middlewares/acceptLanguageMiddleware.js +3 -5
- package/build/src/Model.d.ts +1 -1
- package/build/src/Model.js +3 -4
- package/build/src/Resolvers/FolderResolver.js +1 -0
- package/build/src/Resolvers/GeneralHookResolver.d.ts +4 -2
- package/build/src/Resolvers/GeneralHookResolver.js +5 -8
- package/build/src/Resolvers/ModelResolver.d.ts +4 -0
- package/build/src/Resolvers/ModelResolver.js +26 -8
- package/build/src/Resolvers/TransactionResolver.d.ts +4 -2
- package/build/src/Resolvers/TransactionResolver.js +5 -4
- package/build/src/Resolvers/VersionConfigResolver.d.ts +7 -0
- package/build/src/Resolvers/VersionConfigResolver.js +58 -0
- package/build/src/Resolvers/VersionResolver.d.ts +7 -0
- package/build/src/Resolvers/VersionResolver.js +65 -0
- package/build/src/Resolvers/index.d.ts +3 -2
- package/build/src/Resolvers/index.js +5 -3
- package/build/src/Server.d.ts +3 -2
- package/build/src/Server.js +73 -46
- package/build/src/Services/APIService.d.ts +16 -0
- package/build/src/Services/APIService.js +79 -0
- package/build/src/Services/DocumentationService.d.ts +3 -1
- package/build/src/Services/DocumentationService.js +6 -0
- package/build/src/Services/LogService.d.ts +4 -1
- package/build/src/Services/LogService.js +6 -0
- package/build/src/Services/ModelService.d.ts +3 -0
- package/build/src/Services/ModelService.js +4 -0
- package/build/src/Services/QueryService.js +3 -0
- package/build/src/Services/SchemaValidatorService.d.ts +3 -0
- package/build/src/Services/SchemaValidatorService.js +15 -8
- package/build/src/Services/index.d.ts +2 -1
- package/build/src/Services/index.js +3 -1
- package/build/src/Types.d.ts +2 -0
- package/build/src/Types.js +2 -0
- package/build/src/constants.d.ts +1 -0
- package/build/src/constants.js +2 -1
- package/package.json +2 -1
- package/readme.md +0 -24
- package/CHANGELOG.md +0 -202
|
@@ -13,15 +13,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
const pluralize_1 = __importDefault(require("pluralize"));
|
|
16
|
+
const path_1 = __importDefault(require("path"));
|
|
16
17
|
const http_status_codes_1 = require("http-status-codes");
|
|
17
18
|
const change_case_1 = require("change-case");
|
|
18
19
|
const Resolvers_1 = require("../Resolvers");
|
|
19
20
|
const constants_1 = require("../constants");
|
|
20
21
|
const Enums_1 = require("../Enums");
|
|
22
|
+
const HandlerFactory_1 = __importDefault(require("../Handlers/HandlerFactory"));
|
|
21
23
|
const Services_1 = require("../Services");
|
|
22
24
|
const Middlewares_1 = require("../Middlewares");
|
|
23
25
|
class RouterBuilder {
|
|
24
|
-
constructor() {
|
|
26
|
+
constructor(version) {
|
|
25
27
|
this.getPrimaryKeyName = (model) => {
|
|
26
28
|
return (pluralize_1.default.singular(model.name).toLowerCase() +
|
|
27
29
|
this.ucFirst(model.instance.primaryKey));
|
|
@@ -30,9 +32,8 @@ class RouterBuilder {
|
|
|
30
32
|
return value.charAt(0).toUpperCase() + value.slice(1);
|
|
31
33
|
};
|
|
32
34
|
this.getRootPrefix = () => __awaiter(this, void 0, void 0, function* () {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
let prefix = ((_a = config === null || config === void 0 ? void 0 : config.Application) === null || _a === void 0 ? void 0 : _a.prefix) || "api";
|
|
35
|
+
const api = Services_1.APIService.getInstance();
|
|
36
|
+
let prefix = api.config.prefix || "api";
|
|
36
37
|
if (prefix.substr(0, 1) === "/") {
|
|
37
38
|
prefix = prefix.substr(1);
|
|
38
39
|
}
|
|
@@ -41,32 +42,31 @@ class RouterBuilder {
|
|
|
41
42
|
}
|
|
42
43
|
return prefix;
|
|
43
44
|
});
|
|
45
|
+
this.version = version;
|
|
44
46
|
}
|
|
45
47
|
build() {
|
|
46
48
|
return __awaiter(this, void 0, void 0, function* () {
|
|
47
49
|
const app = yield Services_1.IoCService.useByType("App");
|
|
48
|
-
const logger =
|
|
49
|
-
const
|
|
50
|
-
const modelList = yield Services_1.IoCService.useByType("ModelListService");
|
|
51
|
-
const generalHooks = yield Resolvers_1.GeneralHookResolver.resolve();
|
|
50
|
+
const logger = Services_1.LogService.getInstance();
|
|
51
|
+
const generalHooks = yield new Resolvers_1.GeneralHookResolver(this.version).resolve();
|
|
52
52
|
if (generalHooks.onBeforeInit) {
|
|
53
53
|
generalHooks.onBeforeInit(app);
|
|
54
54
|
}
|
|
55
|
-
yield this.createRoutesByModelTree(
|
|
56
|
-
logger.info(
|
|
55
|
+
yield this.createRoutesByModelTree();
|
|
56
|
+
logger.info(`[${this.version.name}] Express routes have been created.`);
|
|
57
57
|
if (generalHooks.onAfterInit) {
|
|
58
58
|
generalHooks.onAfterInit(app);
|
|
59
59
|
}
|
|
60
60
|
});
|
|
61
61
|
}
|
|
62
|
-
createRoutesByModelTree(
|
|
62
|
+
createRoutesByModelTree() {
|
|
63
63
|
return __awaiter(this, void 0, void 0, function* () {
|
|
64
|
-
for (const model of modelTree) {
|
|
65
|
-
yield this.createRouteByModel(model
|
|
64
|
+
for (const model of this.version.modelTree) {
|
|
65
|
+
yield this.createRouteByModel(model);
|
|
66
66
|
}
|
|
67
67
|
});
|
|
68
68
|
}
|
|
69
|
-
createRouteByModel(model,
|
|
69
|
+
createRouteByModel(model, urlPrefix = "", parentModel = null, relation = null, allowRecursive = true) {
|
|
70
70
|
return __awaiter(this, void 0, void 0, function* () {
|
|
71
71
|
if (model.instance.ignore) {
|
|
72
72
|
return;
|
|
@@ -79,7 +79,7 @@ class RouterBuilder {
|
|
|
79
79
|
continue;
|
|
80
80
|
}
|
|
81
81
|
const urlCreator = constants_1.API_ROUTE_TEMPLATES[handlerType];
|
|
82
|
-
const url = urlCreator(yield this.getRootPrefix(), urlPrefix, resource, model.instance.primaryKey);
|
|
82
|
+
const url = urlCreator(path_1.default.join(yield this.getRootPrefix(), this.version.name), urlPrefix, resource, model.instance.primaryKey);
|
|
83
83
|
// Creating the middleware list for the route. As default, we support some
|
|
84
84
|
// internal middlewares such as `Accept Language Middleware` which parse
|
|
85
85
|
// the "accept-language" header to use in the application general.
|
|
@@ -90,11 +90,11 @@ class RouterBuilder {
|
|
|
90
90
|
// Adding the route to the express
|
|
91
91
|
yield this.addExpressRoute(handlerType, url, middlewares, model, parentModel, relation);
|
|
92
92
|
}
|
|
93
|
-
yield this.createChildRoutes(model,
|
|
94
|
-
yield this.createNestedRoutes(model,
|
|
93
|
+
yield this.createChildRoutes(model, resource, urlPrefix);
|
|
94
|
+
yield this.createNestedRoutes(model, allowRecursive, urlPrefix, resource);
|
|
95
95
|
});
|
|
96
96
|
}
|
|
97
|
-
createNestedRoutes(model,
|
|
97
|
+
createNestedRoutes(model, allowRecursive, urlPrefix, resource) {
|
|
98
98
|
return __awaiter(this, void 0, void 0, function* () {
|
|
99
99
|
if (!model.isRecursive || !allowRecursive) {
|
|
100
100
|
return;
|
|
@@ -103,30 +103,29 @@ class RouterBuilder {
|
|
|
103
103
|
const relation = model.relations.find((relation) => relation.model === model.name &&
|
|
104
104
|
relation.type === Enums_1.Relationships.HAS_MANY);
|
|
105
105
|
if (relation) {
|
|
106
|
-
yield this.createRouteByModel(model,
|
|
106
|
+
yield this.createRouteByModel(model, `${urlPrefix}${resource}/:${(0, change_case_1.camelCase)(relation.foreignKey)}/`, model, relation, false);
|
|
107
107
|
}
|
|
108
108
|
});
|
|
109
109
|
}
|
|
110
|
-
createChildRoutes(model,
|
|
110
|
+
createChildRoutes(model, resource, urlPrefix) {
|
|
111
111
|
return __awaiter(this, void 0, void 0, function* () {
|
|
112
112
|
if (model.children.length === 0) {
|
|
113
113
|
return;
|
|
114
114
|
}
|
|
115
115
|
// We should different parameter name for child routes
|
|
116
|
-
const primaryKey = this.getPrimaryKeyName(model);
|
|
117
116
|
const subRelations = model.relations.filter((item) => item.type === Enums_1.Relationships.HAS_MANY);
|
|
118
117
|
for (const relation of subRelations) {
|
|
119
118
|
const child = model.children.find((item) => item.name === relation.model);
|
|
120
119
|
// It should be recursive
|
|
121
120
|
if (child) {
|
|
122
|
-
yield this.createRouteByModel(child,
|
|
121
|
+
yield this.createRouteByModel(child, `${urlPrefix}${resource}/:${(0, change_case_1.camelCase)(relation.foreignKey)}/`, model, relation);
|
|
123
122
|
}
|
|
124
123
|
}
|
|
125
124
|
});
|
|
126
125
|
}
|
|
127
126
|
addExpressRoute(handlerType, url, middlewares, model, parentModel, relation) {
|
|
128
127
|
return __awaiter(this, void 0, void 0, function* () {
|
|
129
|
-
const docs =
|
|
128
|
+
const docs = Services_1.DocumentationService.getInstance();
|
|
130
129
|
const app = yield Services_1.IoCService.useByType("App");
|
|
131
130
|
const handler = (req, res) => {
|
|
132
131
|
this.requestHandler(handlerType, req, res, model, parentModel, relation);
|
|
@@ -140,6 +139,10 @@ class RouterBuilder {
|
|
|
140
139
|
app.delete(url, middlewares, handler);
|
|
141
140
|
docs.push(Enums_1.HttpMethods.DELETE, url, model);
|
|
142
141
|
break;
|
|
142
|
+
case Enums_1.HandlerTypes.FORCE_DELETE:
|
|
143
|
+
app.delete(url, middlewares, handler);
|
|
144
|
+
docs.push(Enums_1.HttpMethods.DELETE, url, model);
|
|
145
|
+
break;
|
|
143
146
|
case Enums_1.HandlerTypes.INSERT:
|
|
144
147
|
app.post(url, middlewares, handler);
|
|
145
148
|
docs.push(Enums_1.HttpMethods.POST, url, model);
|
|
@@ -170,14 +173,16 @@ class RouterBuilder {
|
|
|
170
173
|
let trx = null;
|
|
171
174
|
let hasTransaction = false;
|
|
172
175
|
try {
|
|
173
|
-
const factory = yield Services_1.IoCService.useByType("HandlerFactory");
|
|
174
176
|
const database = (yield Services_1.IoCService.use("Database"));
|
|
175
|
-
|
|
177
|
+
const api = Services_1.APIService.getInstance();
|
|
178
|
+
hasTransaction = yield new Resolvers_1.TransactionResolver(this.version).resolve(model, handlerType);
|
|
176
179
|
if (hasTransaction) {
|
|
177
180
|
trx = yield database.transaction();
|
|
178
181
|
}
|
|
179
|
-
const handler =
|
|
182
|
+
const handler = HandlerFactory_1.default.get(handlerType);
|
|
180
183
|
const pack = {
|
|
184
|
+
api,
|
|
185
|
+
version: this.version,
|
|
181
186
|
req,
|
|
182
187
|
res,
|
|
183
188
|
handlerType,
|
package/build/src/Enums.d.ts
CHANGED
|
@@ -24,6 +24,7 @@ export declare enum HandlerTypes {
|
|
|
24
24
|
SHOW = "show",
|
|
25
25
|
UPDATE = "update",
|
|
26
26
|
DELETE = "destroy",
|
|
27
|
+
FORCE_DELETE = "force_delete",
|
|
27
28
|
PATCH = "patch",
|
|
28
29
|
ALL = "all"
|
|
29
30
|
}
|
|
@@ -33,6 +34,8 @@ export declare enum HookFunctionTypes {
|
|
|
33
34
|
onBeforeUpdate = "onBeforeUpdate",
|
|
34
35
|
onBeforeDeleteQuery = "onBeforeDeleteQuery",
|
|
35
36
|
onBeforeDelete = "onBeforeDelete",
|
|
37
|
+
onBeforeForceDeleteQuery = "onBeforeForceDeleteQuery",
|
|
38
|
+
onBeforeForceDelete = "onBeforeForceDelete",
|
|
36
39
|
onBeforePaginate = "onBeforePaginate",
|
|
37
40
|
onBeforeAll = "onBeforeAll",
|
|
38
41
|
onBeforeShow = "onBeforeShow",
|
|
@@ -41,6 +44,8 @@ export declare enum HookFunctionTypes {
|
|
|
41
44
|
onAfterUpdate = "onAfterUpdate",
|
|
42
45
|
onAfterDeleteQuery = "onAfterDeleteQuery",
|
|
43
46
|
onAfterDelete = "onAfterDelete",
|
|
47
|
+
onAfterForceDeleteQuery = "onAfterForceDeleteQuery",
|
|
48
|
+
onAfterForceDelete = "onAfterForceDelete",
|
|
44
49
|
onAfterPaginate = "onAfterPaginate",
|
|
45
50
|
onAfterAll = "onAfterAll",
|
|
46
51
|
onAfterShow = "onAfterShow"
|
|
@@ -75,3 +80,11 @@ export declare enum TimestampColumns {
|
|
|
75
80
|
CREATED_AT = "createdAtColumn",
|
|
76
81
|
UPDATED_AT = "updatedAtColumn"
|
|
77
82
|
}
|
|
83
|
+
export declare enum AxeErrorCode {
|
|
84
|
+
UNACCEPTABLE_VERSION_NAME = "UNACCEPTABLE_VERSION_NAME",
|
|
85
|
+
VERSION_CONFIG_NOT_FOUND = "VERSION_CONFIG_NOT_FOUND",
|
|
86
|
+
TABLE_DOESNT_HAVE_ANY_COLUMN = "TABLE_DOESNT_HAVE_ANY_COLUMN",
|
|
87
|
+
RESERVED_VERSION_NAME = "RESERVED_VERSION_NAME",
|
|
88
|
+
UNDEFINED_COLUMN = "UNDEFINED_COLUMN",
|
|
89
|
+
UNDEFINED_RELATION_MODEL = "UNDEFINED_RELATION_MODEL"
|
|
90
|
+
}
|
package/build/src/Enums.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
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;
|
|
3
|
+
exports.AxeErrorCode = exports.TimestampColumns = exports.SortTypes = exports.Relationships = exports.LogLevels = exports.HttpMethods = exports.Extensions = exports.HookFunctionTypes = exports.HandlerTypes = exports.DependencyTypes = exports.ConditionTypes = void 0;
|
|
4
4
|
var ConditionTypes;
|
|
5
5
|
(function (ConditionTypes) {
|
|
6
6
|
ConditionTypes["NotNull"] = "NotNull";
|
|
@@ -30,6 +30,7 @@ var HandlerTypes;
|
|
|
30
30
|
HandlerTypes["SHOW"] = "show";
|
|
31
31
|
HandlerTypes["UPDATE"] = "update";
|
|
32
32
|
HandlerTypes["DELETE"] = "destroy";
|
|
33
|
+
HandlerTypes["FORCE_DELETE"] = "force_delete";
|
|
33
34
|
HandlerTypes["PATCH"] = "patch";
|
|
34
35
|
HandlerTypes["ALL"] = "all";
|
|
35
36
|
})(HandlerTypes = exports.HandlerTypes || (exports.HandlerTypes = {}));
|
|
@@ -40,6 +41,8 @@ var HookFunctionTypes;
|
|
|
40
41
|
HookFunctionTypes["onBeforeUpdate"] = "onBeforeUpdate";
|
|
41
42
|
HookFunctionTypes["onBeforeDeleteQuery"] = "onBeforeDeleteQuery";
|
|
42
43
|
HookFunctionTypes["onBeforeDelete"] = "onBeforeDelete";
|
|
44
|
+
HookFunctionTypes["onBeforeForceDeleteQuery"] = "onBeforeForceDeleteQuery";
|
|
45
|
+
HookFunctionTypes["onBeforeForceDelete"] = "onBeforeForceDelete";
|
|
43
46
|
HookFunctionTypes["onBeforePaginate"] = "onBeforePaginate";
|
|
44
47
|
HookFunctionTypes["onBeforeAll"] = "onBeforeAll";
|
|
45
48
|
HookFunctionTypes["onBeforeShow"] = "onBeforeShow";
|
|
@@ -48,6 +51,8 @@ var HookFunctionTypes;
|
|
|
48
51
|
HookFunctionTypes["onAfterUpdate"] = "onAfterUpdate";
|
|
49
52
|
HookFunctionTypes["onAfterDeleteQuery"] = "onAfterDeleteQuery";
|
|
50
53
|
HookFunctionTypes["onAfterDelete"] = "onAfterDelete";
|
|
54
|
+
HookFunctionTypes["onAfterForceDeleteQuery"] = "onAfterForceDeleteQuery";
|
|
55
|
+
HookFunctionTypes["onAfterForceDelete"] = "onAfterForceDelete";
|
|
51
56
|
HookFunctionTypes["onAfterPaginate"] = "onAfterPaginate";
|
|
52
57
|
HookFunctionTypes["onAfterAll"] = "onAfterAll";
|
|
53
58
|
HookFunctionTypes["onAfterShow"] = "onAfterShow";
|
|
@@ -88,3 +93,12 @@ var TimestampColumns;
|
|
|
88
93
|
TimestampColumns["CREATED_AT"] = "createdAtColumn";
|
|
89
94
|
TimestampColumns["UPDATED_AT"] = "updatedAtColumn";
|
|
90
95
|
})(TimestampColumns = exports.TimestampColumns || (exports.TimestampColumns = {}));
|
|
96
|
+
var AxeErrorCode;
|
|
97
|
+
(function (AxeErrorCode) {
|
|
98
|
+
AxeErrorCode["UNACCEPTABLE_VERSION_NAME"] = "UNACCEPTABLE_VERSION_NAME";
|
|
99
|
+
AxeErrorCode["VERSION_CONFIG_NOT_FOUND"] = "VERSION_CONFIG_NOT_FOUND";
|
|
100
|
+
AxeErrorCode["TABLE_DOESNT_HAVE_ANY_COLUMN"] = "TABLE_DOESNT_HAVE_ANY_COLUMN";
|
|
101
|
+
AxeErrorCode["RESERVED_VERSION_NAME"] = "RESERVED_VERSION_NAME";
|
|
102
|
+
AxeErrorCode["UNDEFINED_COLUMN"] = "UNDEFINED_COLUMN";
|
|
103
|
+
AxeErrorCode["UNDEFINED_RELATION_MODEL"] = "UNDEFINED_RELATION_MODEL";
|
|
104
|
+
})(AxeErrorCode = exports.AxeErrorCode || (exports.AxeErrorCode = {}));
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
class AxeError extends Error {
|
|
4
|
+
constructor(code, message) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.type = "AxeError";
|
|
7
|
+
this.code = code;
|
|
8
|
+
this.message = message;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.default = AxeError;
|
|
@@ -13,13 +13,14 @@ const Helpers_1 = require("./Helpers");
|
|
|
13
13
|
const Services_1 = require("../Services");
|
|
14
14
|
const Enums_1 = require("../Enums");
|
|
15
15
|
exports.default = (pack) => __awaiter(void 0, void 0, void 0, function* () {
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const queryParser = new Services_1.QueryService(model, modelList.get());
|
|
16
|
+
const { version, model, req, res, database, relation, parentModel } = pack;
|
|
17
|
+
const queryParser = new Services_1.QueryService(model, version.modelList.get());
|
|
19
18
|
// We should parse URL query string to use as condition in Lucid query
|
|
20
19
|
const conditions = queryParser.get(req.query);
|
|
21
20
|
// Creating a new database query
|
|
22
21
|
const query = database.from(model.instance.table);
|
|
22
|
+
// If there is a deletedAtColumn, it means that this table support soft-delete
|
|
23
|
+
(0, Helpers_1.addSoftDeleteQuery)(model, conditions, query);
|
|
23
24
|
// Users should be able to select some fields to show.
|
|
24
25
|
queryParser.applyFields(query, conditions.fields);
|
|
25
26
|
// Binding parent id if there is.
|
|
@@ -32,12 +33,12 @@ exports.default = (pack) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
32
33
|
queryParser.applySorting(query, conditions.sort);
|
|
33
34
|
let result = yield query;
|
|
34
35
|
// We should try to get related data if there is any
|
|
35
|
-
yield (0, Helpers_1.getRelatedData)(result, conditions.with, model, modelList, database, Enums_1.HandlerTypes.ALL, req);
|
|
36
|
+
yield (0, Helpers_1.getRelatedData)(version, result, conditions.with, model, version.modelList, database, Enums_1.HandlerTypes.ALL, req);
|
|
36
37
|
yield (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onAfterAll, Object.assign(Object.assign({}, pack), { result,
|
|
37
38
|
conditions,
|
|
38
39
|
query }));
|
|
39
40
|
// Serializing the data by the model's serialize method
|
|
40
|
-
result = yield (0, Helpers_1.serializeData)(result, model.
|
|
41
|
+
result = yield (0, Helpers_1.serializeData)(version, result, model.serialize, Enums_1.HandlerTypes.ALL, req);
|
|
41
42
|
// Filtering hidden fields from the response data.
|
|
42
43
|
(0, Helpers_1.filterHiddenFields)(result, model.instance.hiddens);
|
|
43
44
|
return res.json(result);
|
|
@@ -20,6 +20,8 @@ exports.default = (pack) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
20
20
|
const query = database
|
|
21
21
|
.from(model.instance.table)
|
|
22
22
|
.where(model.instance.primaryKey, req.params[model.instance.primaryKey]);
|
|
23
|
+
// If there is a deletedAtColumn, it means that this table support soft-delete
|
|
24
|
+
(0, Helpers_1.addSoftDeleteQuery)(model, null, query);
|
|
23
25
|
// If there is a relation, we should bind it
|
|
24
26
|
(0, Helpers_1.addForeignKeyQuery)(req, query, relation, parentModel);
|
|
25
27
|
yield (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onBeforeDeleteQuery, Object.assign(Object.assign({}, pack), { query }));
|
|
@@ -31,7 +33,15 @@ exports.default = (pack) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
31
33
|
item }));
|
|
32
34
|
yield (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onBeforeDelete, Object.assign(Object.assign({}, pack), { query,
|
|
33
35
|
item }));
|
|
34
|
-
|
|
36
|
+
// If there is a deletedAtColumn, it means that this table support soft-delete
|
|
37
|
+
if (model.instance.deletedAtColumn) {
|
|
38
|
+
yield query.update({
|
|
39
|
+
[model.instance.deletedAtColumn]: new Date(),
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
yield query.delete();
|
|
44
|
+
}
|
|
35
45
|
yield (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onAfterDelete, Object.assign(Object.assign({}, pack), { item }));
|
|
36
46
|
return res.json();
|
|
37
47
|
});
|
|
@@ -0,0 +1,22 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const Services_1 = require("../Services");
|
|
13
|
+
exports.default = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
|
|
14
|
+
const docs = Services_1.DocumentationService.getInstance();
|
|
15
|
+
const api = Services_1.APIService.getInstance();
|
|
16
|
+
res.json({
|
|
17
|
+
routes: docs.get(),
|
|
18
|
+
versions: api.versions.map((version) => {
|
|
19
|
+
return Object.assign(Object.assign({}, version), { config: Object.assign(Object.assign({}, version.config), { transaction: undefined }), folders: undefined, modelList: undefined, models: version.modelList.get() });
|
|
20
|
+
}),
|
|
21
|
+
});
|
|
22
|
+
});
|
|
@@ -0,0 +1,41 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
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* () {
|
|
19
|
+
const { model, req, res, database, relation, parentModel } = pack;
|
|
20
|
+
const query = database
|
|
21
|
+
.from(model.instance.table)
|
|
22
|
+
.where(model.instance.primaryKey, req.params[model.instance.primaryKey]);
|
|
23
|
+
// If there is a deletedAtColumn, it means that this table support soft-delete
|
|
24
|
+
if (model.instance.deletedAtColumn === null) {
|
|
25
|
+
throw new ApiError_1.default("You can use force delete only soft-delete supported models.");
|
|
26
|
+
}
|
|
27
|
+
// If there is a relation, we should bind it
|
|
28
|
+
(0, Helpers_1.addForeignKeyQuery)(req, query, relation, parentModel);
|
|
29
|
+
yield (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onBeforeForceDeleteQuery, Object.assign(Object.assign({}, pack), { query }));
|
|
30
|
+
const item = yield query.first();
|
|
31
|
+
if (!item) {
|
|
32
|
+
throw new ApiError_1.default(`The item is not found on ${model.name}.`);
|
|
33
|
+
}
|
|
34
|
+
yield (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onAfterForceDeleteQuery, Object.assign(Object.assign({}, pack), { query,
|
|
35
|
+
item }));
|
|
36
|
+
yield (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onBeforeForceDelete, Object.assign(Object.assign({}, pack), { query,
|
|
37
|
+
item }));
|
|
38
|
+
yield query.delete();
|
|
39
|
+
yield (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onAfterForceDelete, Object.assign(Object.assign({}, pack), { item }));
|
|
40
|
+
return res.json();
|
|
41
|
+
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IRequestPack } from "../Interfaces";
|
|
2
2
|
import { HandlerTypes } from "../Enums";
|
|
3
3
|
declare class HandlerFactory {
|
|
4
|
-
get(handleType: HandlerTypes): (pack: IRequestPack) => void;
|
|
4
|
+
static get(handleType: HandlerTypes): (pack: IRequestPack) => void;
|
|
5
5
|
}
|
|
6
6
|
export default HandlerFactory;
|
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const AllHandler_1 = __importDefault(require("./AllHandler"));
|
|
7
7
|
const DestroyHandler_1 = __importDefault(require("./DestroyHandler"));
|
|
8
|
+
const ForceDestroyHandler_1 = __importDefault(require("./ForceDestroyHandler"));
|
|
8
9
|
const PaginateHandler_1 = __importDefault(require("./PaginateHandler"));
|
|
9
10
|
const PatchHandler_1 = __importDefault(require("./PatchHandler"));
|
|
10
11
|
const UpdateHandler_1 = __importDefault(require("./UpdateHandler"));
|
|
@@ -12,12 +13,14 @@ const ShowHandler_1 = __importDefault(require("./ShowHandler"));
|
|
|
12
13
|
const StoreHandler_1 = __importDefault(require("./StoreHandler"));
|
|
13
14
|
const Enums_1 = require("../Enums");
|
|
14
15
|
class HandlerFactory {
|
|
15
|
-
get(handleType) {
|
|
16
|
+
static get(handleType) {
|
|
16
17
|
switch (handleType) {
|
|
17
18
|
case Enums_1.HandlerTypes.ALL:
|
|
18
19
|
return AllHandler_1.default;
|
|
19
20
|
case Enums_1.HandlerTypes.DELETE:
|
|
20
21
|
return DestroyHandler_1.default;
|
|
22
|
+
case Enums_1.HandlerTypes.FORCE_DELETE:
|
|
23
|
+
return ForceDestroyHandler_1.default;
|
|
21
24
|
case Enums_1.HandlerTypes.INSERT:
|
|
22
25
|
return StoreHandler_1.default;
|
|
23
26
|
case Enums_1.HandlerTypes.PAGINATE:
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import { Request } from "express";
|
|
2
|
-
import { IModelService, IRelation, IHookParameter } from "../Interfaces";
|
|
2
|
+
import { IModelService, IRelation, IHookParameter, IQuery, IVersion } from "../Interfaces";
|
|
3
3
|
import { Knex } from "knex";
|
|
4
4
|
import { IWith } from "../Interfaces";
|
|
5
5
|
import { HandlerTypes, HookFunctionTypes, TimestampColumns } from "../Enums";
|
|
6
6
|
import { ModelListService } from "../Services";
|
|
7
|
+
import { SerializationFunction } from "../Types";
|
|
7
8
|
export declare const bindTimestampValues: (formData: Record<string, any>, columnTypes: TimestampColumns[] | undefined, model: IModelService) => void;
|
|
8
9
|
export declare const getMergedFormData: (req: Request, fillables: string[]) => Record<string, any>;
|
|
9
10
|
export declare const callHooks: (model: IModelService, type: HookFunctionTypes, params: IHookParameter) => Promise<void>;
|
|
10
11
|
export declare const getParentColumn: (relation: IRelation | null) => string | null;
|
|
11
12
|
export declare const addForeignKeyQuery: (request: Request, query: Knex.QueryBuilder, relation: IRelation | null, parentModel: IModelService | null) => void;
|
|
12
|
-
export declare const serializeData: (itemArray: any[] | any, modelSerializer:
|
|
13
|
+
export declare const serializeData: (version: IVersion, itemArray: any[] | any, modelSerializer: SerializationFunction | null, handler: HandlerTypes, request: Request) => Promise<any[]>;
|
|
13
14
|
export declare const filterHiddenFields: (itemArray: any[], hiddens: string[] | null) => void;
|
|
14
|
-
export declare const
|
|
15
|
+
export declare const addSoftDeleteQuery: (model: IModelService, conditions: IQuery | null, query: Knex.QueryBuilder) => void;
|
|
16
|
+
export declare const getRelatedData: (version: IVersion, data: any[], withArray: IWith[], model: IModelService, modelList: ModelListService, database: Knex | Knex.Transaction, handler: HandlerTypes, request: Request) => Promise<void>;
|
|
@@ -12,7 +12,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
12
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.getRelatedData = exports.filterHiddenFields = exports.serializeData = exports.addForeignKeyQuery = exports.getParentColumn = exports.callHooks = exports.getMergedFormData = exports.bindTimestampValues = void 0;
|
|
15
|
+
exports.getRelatedData = exports.addSoftDeleteQuery = exports.filterHiddenFields = exports.serializeData = exports.addForeignKeyQuery = exports.getParentColumn = exports.callHooks = exports.getMergedFormData = exports.bindTimestampValues = void 0;
|
|
16
16
|
const change_case_1 = require("change-case");
|
|
17
17
|
const Enums_1 = require("../Enums");
|
|
18
18
|
const ApiError_1 = __importDefault(require("../Exceptions/ApiError"));
|
|
@@ -30,7 +30,7 @@ const bindTimestampValues = (formData, columnTypes = [], model) => {
|
|
|
30
30
|
exports.bindTimestampValues = bindTimestampValues;
|
|
31
31
|
const getMergedFormData = (req, fillables) => {
|
|
32
32
|
const formData = {};
|
|
33
|
-
Object.keys(req.body).forEach((key) => {
|
|
33
|
+
Object.keys((req === null || req === void 0 ? void 0 : req.body) || {}).forEach((key) => {
|
|
34
34
|
if (fillables.includes(key)) {
|
|
35
35
|
formData[key] = req.body[key];
|
|
36
36
|
}
|
|
@@ -92,14 +92,13 @@ const serialize = (data, callback, request) => {
|
|
|
92
92
|
}
|
|
93
93
|
return callback(data, request);
|
|
94
94
|
};
|
|
95
|
-
const globalSerializer = (itemArray, handler, request) => __awaiter(void 0, void 0, void 0, function* () {
|
|
96
|
-
|
|
97
|
-
if (!Application.serializers) {
|
|
95
|
+
const globalSerializer = (version, itemArray, handler, request) => __awaiter(void 0, void 0, void 0, function* () {
|
|
96
|
+
if (!version.config.serializers) {
|
|
98
97
|
return itemArray;
|
|
99
98
|
}
|
|
100
99
|
const callbacks = [];
|
|
101
100
|
// Push all runable serializer into callbacks.
|
|
102
|
-
|
|
101
|
+
version.config.serializers.map((configSerializer) => {
|
|
103
102
|
// Serialize data for all requests types.
|
|
104
103
|
if (typeof configSerializer === "function") {
|
|
105
104
|
callbacks.push(configSerializer);
|
|
@@ -116,9 +115,9 @@ const globalSerializer = (itemArray, handler, request) => __awaiter(void 0, void
|
|
|
116
115
|
});
|
|
117
116
|
return itemArray;
|
|
118
117
|
});
|
|
119
|
-
const serializeData = (itemArray, modelSerializer, handler, request) => __awaiter(void 0, void 0, void 0, function* () {
|
|
118
|
+
const serializeData = (version, itemArray, modelSerializer, handler, request) => __awaiter(void 0, void 0, void 0, function* () {
|
|
120
119
|
itemArray = serialize(itemArray, modelSerializer, request);
|
|
121
|
-
itemArray = yield globalSerializer(itemArray, handler, request);
|
|
120
|
+
itemArray = yield globalSerializer(version, itemArray, handler, request);
|
|
122
121
|
return itemArray;
|
|
123
122
|
});
|
|
124
123
|
exports.serializeData = serializeData;
|
|
@@ -138,7 +137,15 @@ const filterHiddenFields = (itemArray, hiddens) => {
|
|
|
138
137
|
});
|
|
139
138
|
};
|
|
140
139
|
exports.filterHiddenFields = filterHiddenFields;
|
|
141
|
-
const
|
|
140
|
+
const addSoftDeleteQuery = (model, conditions, query) => {
|
|
141
|
+
// TODO: Trashed feature will be implemented later
|
|
142
|
+
// (conditions === null || conditions?.trashed === false)
|
|
143
|
+
if (model.instance.deletedAtColumn) {
|
|
144
|
+
query.whereNull(model.instance.deletedAtColumn);
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
exports.addSoftDeleteQuery = addSoftDeleteQuery;
|
|
148
|
+
const getRelatedData = (version, data, withArray, model, modelList, database, handler, request) => __awaiter(void 0, void 0, void 0, function* () {
|
|
142
149
|
if (withArray.length === 0) {
|
|
143
150
|
return;
|
|
144
151
|
}
|
|
@@ -192,17 +199,20 @@ const getRelatedData = (data, withArray, model, modelList, database, handler, re
|
|
|
192
199
|
selectColumns.push(...requiredForeignKeys);
|
|
193
200
|
}
|
|
194
201
|
selectColumns = uniqueByMap(selectColumns);
|
|
202
|
+
const foreignModelQuery = database(foreignModel.instance.table).select(selectColumns);
|
|
203
|
+
// If the model is supported soft-delete we should check the data.
|
|
204
|
+
if (foreignModel.instance.deletedAtColumn) {
|
|
205
|
+
foreignModelQuery.whereNull(foreignModel.instance.deletedAtColumn);
|
|
206
|
+
}
|
|
195
207
|
// Fetching related records by foreignKey and primary key values.
|
|
196
|
-
let relatedRecords = yield
|
|
197
|
-
.select(selectColumns)
|
|
198
|
-
.whereIn(searchFieldKey, parentPrimaryKeyValues);
|
|
208
|
+
let relatedRecords = yield foreignModelQuery.whereIn(searchFieldKey, parentPrimaryKeyValues);
|
|
199
209
|
// We should serialize related data if there is any serialization function
|
|
200
|
-
relatedRecords = yield (0, exports.serializeData)(relatedRecords, foreignModel.
|
|
210
|
+
relatedRecords = yield (0, exports.serializeData)(version, relatedRecords, foreignModel.serialize, handler, request);
|
|
201
211
|
// We should hide hidden fields if there is any
|
|
202
212
|
(0, exports.filterHiddenFields)(relatedRecords, foreignModel.instance.hiddens);
|
|
203
213
|
// We should try to get child data if there is any on the query
|
|
204
214
|
if (clientQuery.children.length > 0) {
|
|
205
|
-
yield (0, exports.getRelatedData)(relatedRecords, clientQuery.children, foreignModel, modelList, database, handler, request);
|
|
215
|
+
yield (0, exports.getRelatedData)(version, relatedRecords, clientQuery.children, foreignModel, modelList, database, handler, request);
|
|
206
216
|
}
|
|
207
217
|
// Binding relation data to the parent rows.
|
|
208
218
|
data.forEach((row) => {
|
|
@@ -13,13 +13,14 @@ const Helpers_1 = require("./Helpers");
|
|
|
13
13
|
const Enums_1 = require("../Enums");
|
|
14
14
|
const Services_1 = require("../Services");
|
|
15
15
|
exports.default = (pack) => __awaiter(void 0, void 0, void 0, function* () {
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const queryParser = new Services_1.QueryService(model, modelList.get());
|
|
16
|
+
const { version, model, req, database, relation, parentModel } = pack;
|
|
17
|
+
const queryParser = new Services_1.QueryService(model, version.modelList.get());
|
|
19
18
|
// We should parse URL query string to use as condition in Lucid query
|
|
20
19
|
const conditions = queryParser.get(req.query);
|
|
21
20
|
// Creating a new database query
|
|
22
21
|
const query = database.from(model.instance.table);
|
|
22
|
+
// If there is a deletedAtColumn, it means that this table support soft-delete
|
|
23
|
+
(0, Helpers_1.addSoftDeleteQuery)(model, conditions, query);
|
|
23
24
|
// Users should be able to select some fields to show.
|
|
24
25
|
queryParser.applyFields(query, conditions.fields);
|
|
25
26
|
// Binding parent id if there is.
|
|
@@ -36,12 +37,12 @@ exports.default = (pack) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
36
37
|
isLengthAware: true,
|
|
37
38
|
});
|
|
38
39
|
// We should try to get related data if there is any
|
|
39
|
-
yield (0, Helpers_1.getRelatedData)(result.data, conditions.with, model, modelList, database, Enums_1.HandlerTypes.PAGINATE, req);
|
|
40
|
+
yield (0, Helpers_1.getRelatedData)(version, result.data, conditions.with, model, version.modelList, database, Enums_1.HandlerTypes.PAGINATE, req);
|
|
40
41
|
yield (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onAfterPaginate, Object.assign(Object.assign({}, pack), { conditions,
|
|
41
42
|
result,
|
|
42
43
|
query }));
|
|
43
44
|
// Serializing the data by the model's serialize method
|
|
44
|
-
result.data = yield (0, Helpers_1.serializeData)(result.data, model.
|
|
45
|
+
result.data = yield (0, Helpers_1.serializeData)(version, result.data, model.serialize, Enums_1.HandlerTypes.PAGINATE, req);
|
|
45
46
|
// Filtering hidden fields from the response data.
|
|
46
47
|
(0, Helpers_1.filterHiddenFields)(result.data, model.instance.hiddens);
|
|
47
48
|
return pack.res.json(result);
|
|
@@ -17,10 +17,12 @@ const Helpers_1 = require("./Helpers");
|
|
|
17
17
|
const Enums_1 = require("../Enums");
|
|
18
18
|
const ApiError_1 = __importDefault(require("../Exceptions/ApiError"));
|
|
19
19
|
exports.default = (pack) => __awaiter(void 0, void 0, void 0, function* () {
|
|
20
|
-
const { model, req, res, database, relation, parentModel } = pack;
|
|
20
|
+
const { version, model, req, res, database, relation, parentModel } = pack;
|
|
21
21
|
const query = database.from(model.instance.table);
|
|
22
22
|
// If there is a relation, we should bind it
|
|
23
23
|
(0, Helpers_1.addForeignKeyQuery)(req, query, relation, parentModel);
|
|
24
|
+
// If there is a deletedAtColumn, it means that this table support soft-delete
|
|
25
|
+
(0, Helpers_1.addSoftDeleteQuery)(model, null, query);
|
|
24
26
|
yield (0, Helpers_1.callHooks)(model, Enums_1.HookFunctionTypes.onBeforeUpdateQuery, Object.assign(Object.assign({}, pack), { query }));
|
|
25
27
|
let item = yield query
|
|
26
28
|
.where(model.instance.primaryKey, req.params[model.instance.primaryKey])
|
|
@@ -58,7 +60,7 @@ exports.default = (pack) => __awaiter(void 0, void 0, void 0, function* () {
|
|
|
58
60
|
formData,
|
|
59
61
|
query }));
|
|
60
62
|
// Serializing the data by the model's serialize method
|
|
61
|
-
item = yield (0, Helpers_1.serializeData)(item, model.
|
|
63
|
+
item = yield (0, Helpers_1.serializeData)(version, item, model.serialize, Enums_1.HandlerTypes.PATCH, req);
|
|
62
64
|
// Filtering hidden fields from the response data.
|
|
63
65
|
(0, Helpers_1.filterHiddenFields)([item], model.instance.hiddens);
|
|
64
66
|
return res.json(item);
|
|
@@ -0,0 +1,16 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const Services_1 = require("../Services");
|
|
13
|
+
exports.default = (req, res) => __awaiter(void 0, void 0, void 0, function* () {
|
|
14
|
+
const docs = Services_1.DocumentationService.getInstance();
|
|
15
|
+
res.json(docs.get().map((route) => `${route.method} ${route.url}`));
|
|
16
|
+
});
|