axe-api 1.0.0-rc9 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/build/index.d.ts +1 -0
  2. package/build/index.js +1 -0
  3. package/build/src/Builders/IndexBuilder.d.ts +7 -0
  4. package/build/src/Builders/IndexBuilder.js +35 -0
  5. package/build/src/Builders/ModelTreeBuilder.js +2 -1
  6. package/build/src/Builders/RouterBuilder.js +22 -11
  7. package/build/src/Builders/SwaggerBuilder.d.ts +2 -0
  8. package/build/src/Builders/SwaggerBuilder.js +609 -0
  9. package/build/src/Enums.d.ts +6 -1
  10. package/build/src/Enums.js +7 -1
  11. package/build/src/Handlers/DocsHandler.js +41 -0
  12. package/build/src/Handlers/ErrorHandler.d.ts +6 -0
  13. package/build/src/Handlers/ErrorHandler.js +12 -0
  14. package/build/src/Handlers/Helpers.d.ts +16 -4
  15. package/build/src/Handlers/Helpers.js +202 -5
  16. package/build/src/Handlers/RequestHandler.d.ts +4 -1
  17. package/build/src/Handlers/RequestHandler.js +36 -40
  18. package/build/src/Handlers/{DocsHTMLHandler.js → SwaggerHandler.js} +8 -7
  19. package/build/src/Interfaces.d.ts +103 -35
  20. package/build/src/Middlewares/RateLimit/AdaptorFactory.d.ts +3 -3
  21. package/build/src/Middlewares/RateLimit/MemoryAdaptor.d.ts +2 -2
  22. package/build/src/Middlewares/RateLimit/RedisAdaptor.d.ts +12 -4
  23. package/build/src/Middlewares/RateLimit/RedisAdaptor.js +24 -0
  24. package/build/src/Middlewares/RateLimit/index.d.ts +22 -3
  25. package/build/src/Middlewares/RateLimit/index.js +23 -3
  26. package/build/src/Model.d.ts +256 -10
  27. package/build/src/Model.js +322 -30
  28. package/build/src/Phases/All/FetchPhase.d.ts +2 -2
  29. package/build/src/Phases/All/PreparePhase.d.ts +2 -2
  30. package/build/src/Phases/All/index.d.ts +1 -1
  31. package/build/src/Phases/CacheTagCleanPhase.d.ts +3 -0
  32. package/build/src/{Handlers/MetadataHandler.js → Phases/CacheTagCleanPhase.js} +6 -10
  33. package/build/src/Phases/Delete/ActionPhase.d.ts +2 -2
  34. package/build/src/Phases/Delete/ActionPhase.js +21 -2
  35. package/build/src/Phases/Delete/PreparePhase.d.ts +2 -2
  36. package/build/src/Phases/Delete/QueryPhase.d.ts +2 -2
  37. package/build/src/Phases/Delete/ResponsePhase.d.ts +2 -2
  38. package/build/src/Phases/Delete/ResponsePhase.js +2 -1
  39. package/build/src/Phases/Delete/index.d.ts +4 -4
  40. package/build/src/Phases/ForceDelete/ActionPhase.d.ts +2 -2
  41. package/build/src/Phases/ForceDelete/ActionPhase.js +7 -0
  42. package/build/src/Phases/ForceDelete/PreparePhase.d.ts +2 -2
  43. package/build/src/Phases/ForceDelete/QueryPhase.d.ts +2 -2
  44. package/build/src/Phases/ForceDelete/index.d.ts +3 -3
  45. package/build/src/Phases/GetCachePhase.d.ts +3 -0
  46. package/build/src/Phases/GetCachePhase.js +39 -0
  47. package/build/src/Phases/List/RelationalPhase.d.ts +2 -2
  48. package/build/src/Phases/List/ResultPhase.d.ts +2 -2
  49. package/build/src/Phases/List/ResultPhase.js +9 -1
  50. package/build/src/Phases/List/SerializePhase.d.ts +2 -2
  51. package/build/src/Phases/List/index.d.ts +3 -3
  52. package/build/src/Phases/Paginate/FetchPhase.d.ts +2 -2
  53. package/build/src/Phases/Paginate/PreparePhase.d.ts +2 -2
  54. package/build/src/Phases/Paginate/index.d.ts +2 -2
  55. package/build/src/Phases/Patch/PrepareActionPhase.d.ts +2 -2
  56. package/build/src/Phases/Patch/PrepareActionPhase.js +13 -10
  57. package/build/src/Phases/Patch/index.d.ts +1 -1
  58. package/build/src/Phases/Search/FetchPhase.d.ts +3 -0
  59. package/build/src/Phases/Search/FetchPhase.js +66 -0
  60. package/build/src/Phases/Search/PreparePhase.d.ts +3 -0
  61. package/build/src/Phases/Search/PreparePhase.js +19 -0
  62. package/build/src/Phases/Search/index.d.ts +5 -0
  63. package/build/src/Phases/Search/index.js +11 -0
  64. package/build/src/Phases/Show/FetchPhase.d.ts +2 -2
  65. package/build/src/Phases/Show/FetchPhase.js +11 -1
  66. package/build/src/Phases/Show/PreparePhase.d.ts +2 -2
  67. package/build/src/Phases/Show/PreparePhase.js +5 -13
  68. package/build/src/Phases/Show/index.d.ts +2 -2
  69. package/build/src/Phases/Single/GetPhase.d.ts +2 -2
  70. package/build/src/Phases/Single/PrepareGetPhase.d.ts +2 -2
  71. package/build/src/Phases/Single/RelationalPhase.d.ts +2 -2
  72. package/build/src/Phases/Single/ResultPhase.d.ts +2 -2
  73. package/build/src/Phases/Single/ResultPhase.js +9 -1
  74. package/build/src/Phases/Single/SerializePhase.d.ts +2 -2
  75. package/build/src/Phases/Single/index.d.ts +5 -5
  76. package/build/src/Phases/Store/ActionPhase.d.ts +2 -2
  77. package/build/src/Phases/Store/ActionPhase.js +18 -7
  78. package/build/src/Phases/Store/PreparePhase.d.ts +2 -2
  79. package/build/src/Phases/Store/PreparePhase.js +14 -9
  80. package/build/src/Phases/Store/ResultPhase.d.ts +3 -0
  81. package/build/src/Phases/Store/ResultPhase.js +23 -0
  82. package/build/src/Phases/Store/index.d.ts +3 -2
  83. package/build/src/Phases/Store/index.js +2 -0
  84. package/build/src/Phases/URLSearchParamPhase.d.ts +3 -0
  85. package/build/src/Phases/URLSearchParamPhase.js +37 -0
  86. package/build/src/Phases/Update/ActionPhase.d.ts +2 -2
  87. package/build/src/Phases/Update/ActionPhase.js +14 -3
  88. package/build/src/Phases/Update/PrepareActionPhase.d.ts +2 -2
  89. package/build/src/Phases/Update/PrepareActionPhase.js +13 -10
  90. package/build/src/Phases/Update/index.d.ts +2 -2
  91. package/build/src/Resolvers/ModelResolver.d.ts +1 -0
  92. package/build/src/Resolvers/ModelResolver.js +21 -2
  93. package/build/src/Resolvers/TransactionResolver.js +3 -15
  94. package/build/src/Resolvers/VersionConfigResolver.js +6 -1
  95. package/build/src/Resolvers/VersionResolver.js +1 -0
  96. package/build/src/Server.d.ts +5 -0
  97. package/build/src/Server.js +44 -11
  98. package/build/src/Services/APIService.d.ts +3 -3
  99. package/build/src/Services/APIService.js +3 -16
  100. package/build/src/Services/App.d.ts +94 -8
  101. package/build/src/Services/App.js +94 -29
  102. package/build/src/Services/AxeRequest.d.ts +51 -2
  103. package/build/src/Services/AxeRequest.js +51 -4
  104. package/build/src/Services/AxeResponse.d.ts +28 -1
  105. package/build/src/Services/AxeResponse.js +28 -0
  106. package/build/src/Services/ConverterService.d.ts +5 -3
  107. package/build/src/Services/DocumentationService.d.ts +5 -2
  108. package/build/src/Services/DocumentationService.js +13 -1
  109. package/build/src/Services/ElasticService.d.ts +14 -0
  110. package/build/src/Services/ElasticService.js +74 -0
  111. package/build/src/Services/IoCService.d.ts +29 -2
  112. package/build/src/Services/IoCService.js +33 -6
  113. package/build/src/Services/LimitService.d.ts +18 -0
  114. package/build/src/Services/LimitService.js +18 -0
  115. package/build/src/Services/ModelService.d.ts +9 -5
  116. package/build/src/Services/ModelService.js +11 -0
  117. package/build/src/Services/QueryService.d.ts +3 -3
  118. package/build/src/Services/QueryService.js +6 -0
  119. package/build/src/Services/SchemaValidatorService.d.ts +1 -0
  120. package/build/src/Services/SchemaValidatorService.js +4 -0
  121. package/build/src/Services/URLService.d.ts +6 -14
  122. package/build/src/Services/URLService.js +10 -8
  123. package/build/src/Steps/Event.d.ts +11 -0
  124. package/build/src/Steps/Event.js +17 -0
  125. package/build/src/Steps/Hook.d.ts +11 -0
  126. package/build/src/Steps/Hook.js +17 -0
  127. package/build/src/Steps/Phase.d.ts +11 -0
  128. package/build/src/Steps/Phase.js +18 -0
  129. package/build/src/Types.d.ts +12 -10
  130. package/build/src/constants.d.ts +8 -9
  131. package/build/src/constants.js +215 -152
  132. package/package.json +46 -36
  133. package/build/src/Middlewares/RateLimit/IAdaptor.d.ts +0 -6
  134. package/build/src/Middlewares/RateLimit/IAdaptor.js +0 -2
  135. /package/build/src/Handlers/{DocsHTMLHandler.d.ts → DocsHandler.d.ts} +0 -0
  136. /package/build/src/Handlers/{MetadataHandler.d.ts → SwaggerHandler.d.ts} +0 -0
@@ -1,3 +1,3 @@
1
- import { IRequestPack } from "../../Interfaces";
2
- declare const _default: (context: IRequestPack) => Promise<void>;
1
+ import { IContext } from "../../Interfaces";
2
+ declare const _default: (context: IContext) => Promise<void>;
3
3
  export default _default;
@@ -1,3 +1,3 @@
1
- import { IRequestPack } from "../../Interfaces";
2
- declare const _default: (context: IRequestPack) => Promise<void>;
1
+ import { IContext } from "../../Interfaces";
2
+ declare const _default: (context: IContext) => Promise<void>;
3
3
  export default _default;
@@ -1,4 +1,4 @@
1
1
  declare const _default: {
2
- FetchPhase: (context: import("../../Interfaces").IRequestPack) => Promise<void>;
2
+ FetchPhase: (context: import("../../Interfaces").IContext) => Promise<void>;
3
3
  };
4
4
  export default _default;
@@ -0,0 +1,3 @@
1
+ import { IContext } from "../Interfaces";
2
+ declare const _default: (context: IContext) => Promise<void>;
3
+ export default _default;
@@ -9,14 +9,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
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
- });
12
+ const Helpers_1 = require("../Handlers/Helpers");
13
+ exports.default = (context) => __awaiter(void 0, void 0, void 0, function* () {
14
+ const { item, model, handlerType } = context;
15
+ const { primaryKey } = model.instance;
16
+ const config = model.getCacheConfiguration(handlerType);
17
+ (0, Helpers_1.clearCacheTags)((0, Helpers_1.toCacheTagKey)(model, item[primaryKey], config));
22
18
  });
@@ -1,3 +1,3 @@
1
- import { IRequestPack } from "../../Interfaces";
2
- declare const _default: (context: IRequestPack) => Promise<void>;
1
+ import { IContext } from "../../Interfaces";
2
+ declare const _default: (context: IContext) => Promise<void>;
3
3
  export default _default;
@@ -9,16 +9,35 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
+ const Services_1 = require("../../Services");
13
+ const Helpers_1 = require("../../Handlers/Helpers");
12
14
  exports.default = (context) => __awaiter(void 0, void 0, void 0, function* () {
15
+ const { model, req } = context;
13
16
  if (context.query) {
14
17
  // If there is a deletedAtColumn, it means that this table support soft-delete
15
- if (context.model.instance.deletedAtColumn) {
18
+ if (model.instance.deletedAtColumn) {
16
19
  yield context.query.update({
17
- [context.model.instance.deletedAtColumn]: new Date(),
20
+ [model.instance.deletedAtColumn]: new Date(),
18
21
  });
22
+ // Fetching the latest version of the item
23
+ const item = yield context
24
+ .database(model.instance.table)
25
+ .where(model.instance.primaryKey, req.params[model.instance.primaryKey])
26
+ .first();
27
+ // Updat the index values
28
+ if (model.instance.search) {
29
+ const elastic = yield Services_1.IoCService.use("Elastic");
30
+ const body = (0, Helpers_1.getSearchData)(model, item);
31
+ yield elastic.update(model.name, context.item[model.instance.primaryKey], body);
32
+ }
19
33
  }
20
34
  else {
21
35
  yield context.query.delete();
36
+ // Updat the index values
37
+ if (model.instance.search) {
38
+ const elastic = yield Services_1.IoCService.use("Elastic");
39
+ yield elastic.delete(model.name, context.item[model.instance.primaryKey]);
40
+ }
22
41
  }
23
42
  }
24
43
  });
@@ -1,3 +1,3 @@
1
- import { IRequestPack } from "../../Interfaces";
2
- declare const _default: (context: IRequestPack) => Promise<void>;
1
+ import { IContext } from "../../Interfaces";
2
+ declare const _default: (context: IContext) => Promise<void>;
3
3
  export default _default;
@@ -1,3 +1,3 @@
1
- import { IRequestPack } from "../../Interfaces";
2
- declare const _default: (context: IRequestPack) => Promise<void>;
1
+ import { IContext } from "../../Interfaces";
2
+ declare const _default: (context: IContext) => Promise<void>;
3
3
  export default _default;
@@ -1,3 +1,3 @@
1
- import { IRequestPack } from "../../Interfaces";
2
- declare const _default: (context: IRequestPack) => Promise<void>;
1
+ import { IContext } from "../../Interfaces";
2
+ declare const _default: (context: IContext) => Promise<void>;
3
3
  export default _default;
@@ -10,5 +10,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.default = (context) => __awaiter(void 0, void 0, void 0, function* () {
13
- context.res.noContent();
13
+ const { res } = context;
14
+ res.noContent();
14
15
  });
@@ -1,7 +1,7 @@
1
1
  declare const _default: {
2
- ActionPhase: (context: import("../../Interfaces").IRequestPack) => Promise<void>;
3
- PreparePhase: (context: import("../../Interfaces").IRequestPack) => Promise<void>;
4
- QueryPhase: (context: import("../../Interfaces").IRequestPack) => Promise<void>;
5
- ResponsePhase: (context: import("../../Interfaces").IRequestPack) => Promise<void>;
2
+ ActionPhase: (context: import("../../Interfaces").IContext) => Promise<void>;
3
+ PreparePhase: (context: import("../../Interfaces").IContext) => Promise<void>;
4
+ QueryPhase: (context: import("../../Interfaces").IContext) => Promise<void>;
5
+ ResponsePhase: (context: import("../../Interfaces").IContext) => Promise<void>;
6
6
  };
7
7
  export default _default;
@@ -1,3 +1,3 @@
1
- import { IRequestPack } from "../../Interfaces";
2
- declare const _default: (context: IRequestPack) => Promise<void>;
1
+ import { IContext } from "../../Interfaces";
2
+ declare const _default: (context: IContext) => Promise<void>;
3
3
  export default _default;
@@ -9,8 +9,15 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
+ const Services_1 = require("../../Services");
12
13
  exports.default = (context) => __awaiter(void 0, void 0, void 0, function* () {
14
+ const { model } = context;
13
15
  if (context.query) {
14
16
  yield context.query.delete();
17
+ // Updat the index values
18
+ if (model.instance.search) {
19
+ const elastic = yield Services_1.IoCService.use("Elastic");
20
+ yield elastic.delete(model.name, context.item[model.instance.primaryKey]);
21
+ }
15
22
  }
16
23
  });
@@ -1,3 +1,3 @@
1
- import { IRequestPack } from "../../Interfaces";
2
- declare const _default: (context: IRequestPack) => Promise<void>;
1
+ import { IContext } from "../../Interfaces";
2
+ declare const _default: (context: IContext) => Promise<void>;
3
3
  export default _default;
@@ -1,3 +1,3 @@
1
- import { IRequestPack } from "../../Interfaces";
2
- declare const _default: (context: IRequestPack) => Promise<void>;
1
+ import { IContext } from "../../Interfaces";
2
+ declare const _default: (context: IContext) => Promise<void>;
3
3
  export default _default;
@@ -1,6 +1,6 @@
1
1
  declare const _default: {
2
- ActionPhase: (context: import("../../Interfaces").IRequestPack) => Promise<void>;
3
- PreparePhase: (context: import("../../Interfaces").IRequestPack) => Promise<void>;
4
- QueryPhase: (context: import("../../Interfaces").IRequestPack) => Promise<void>;
2
+ ActionPhase: (context: import("../../Interfaces").IContext) => Promise<void>;
3
+ PreparePhase: (context: import("../../Interfaces").IContext) => Promise<void>;
4
+ QueryPhase: (context: import("../../Interfaces").IContext) => Promise<void>;
5
5
  };
6
6
  export default _default;
@@ -0,0 +1,3 @@
1
+ import { IContext } from "../Interfaces";
2
+ declare const _default: (context: IContext) => Promise<void>;
3
+ export default _default;
@@ -0,0 +1,39 @@
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
+ const Helpers_1 = require("../Handlers/Helpers");
14
+ exports.default = (context) => __awaiter(void 0, void 0, void 0, function* () {
15
+ // Getting the correct configuration
16
+ const { model, handlerType } = context;
17
+ const config = model.getCacheConfiguration(handlerType);
18
+ // Check if the cache enable for this handler
19
+ if (config === null || config === void 0 ? void 0 : config.enable) {
20
+ // Getting the redis service
21
+ const redis = yield Services_1.IoCService.use("Redis");
22
+ // Generating the cache key
23
+ const key = (0, Helpers_1.toCacheKey)(context);
24
+ // Try to fetch the value via Redis
25
+ const value = yield redis.get(key);
26
+ // Check if there is a value
27
+ if (value) {
28
+ // Parse and respond the value
29
+ const result = JSON.parse(value);
30
+ const { res } = context;
31
+ if (config.responseHeader) {
32
+ res.header(config.responseHeader, "Hit");
33
+ }
34
+ res.json(result);
35
+ // Logging
36
+ Services_1.LogService.debug(`\t🔄 redis.get(${key})`);
37
+ }
38
+ }
39
+ });
@@ -1,3 +1,3 @@
1
- import { IRequestPack } from "../../Interfaces";
2
- declare const _default: (context: IRequestPack) => Promise<void>;
1
+ import { IContext } from "../../Interfaces";
2
+ declare const _default: (context: IContext) => Promise<void>;
3
3
  export default _default;
@@ -1,3 +1,3 @@
1
- import { IRequestPack } from "../../Interfaces";
2
- declare const _default: (context: IRequestPack) => Promise<void>;
1
+ import { IContext } from "../../Interfaces";
2
+ declare const _default: (context: IContext) => Promise<void>;
3
3
  export default _default;
@@ -9,6 +9,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
+ const Helpers_1 = require("../../Handlers/Helpers");
12
13
  exports.default = (context) => __awaiter(void 0, void 0, void 0, function* () {
13
- context.res.json(context.result);
14
+ const { result, res, model, handlerType } = context;
15
+ // Adding cache tags
16
+ const { primaryKey } = model.instance;
17
+ const config = model.getCacheConfiguration(handlerType);
18
+ context.req.original.tags.push(...result.data.map((i) => (0, Helpers_1.toCacheTagKey)(model, i[primaryKey], config)));
19
+ // Caching the results
20
+ yield (0, Helpers_1.putCache)(context, result);
21
+ res.json(result);
14
22
  });
@@ -1,3 +1,3 @@
1
- import { IRequestPack } from "../../Interfaces";
2
- declare const _default: (context: IRequestPack) => Promise<void>;
1
+ import { IContext } from "../../Interfaces";
2
+ declare const _default: (context: IContext) => Promise<void>;
3
3
  export default _default;
@@ -1,6 +1,6 @@
1
1
  declare const _default: {
2
- RelationalPhase: (context: import("../../Interfaces").IRequestPack) => Promise<void>;
3
- ResultPhase: (context: import("../../Interfaces").IRequestPack) => Promise<void>;
4
- SerializePhase: (context: import("../../Interfaces").IRequestPack) => Promise<void>;
2
+ RelationalPhase: (context: import("../../Interfaces").IContext) => Promise<void>;
3
+ ResultPhase: (context: import("../../Interfaces").IContext) => Promise<void>;
4
+ SerializePhase: (context: import("../../Interfaces").IContext) => Promise<void>;
5
5
  };
6
6
  export default _default;
@@ -1,3 +1,3 @@
1
- import { IRequestPack } from "../../Interfaces";
2
- declare const _default: (context: IRequestPack) => Promise<void>;
1
+ import { IContext } from "../../Interfaces";
2
+ declare const _default: (context: IContext) => Promise<void>;
3
3
  export default _default;
@@ -1,3 +1,3 @@
1
- import { IRequestPack } from "../../Interfaces";
2
- declare const _default: (context: IRequestPack) => Promise<void>;
1
+ import { IContext } from "../../Interfaces";
2
+ declare const _default: (context: IContext) => Promise<void>;
3
3
  export default _default;
@@ -1,5 +1,5 @@
1
1
  declare const _default: {
2
- PreparePhase: (context: import("../../Interfaces").IRequestPack) => Promise<void>;
3
- FetchPhase: (context: import("../../Interfaces").IRequestPack) => Promise<void>;
2
+ PreparePhase: (context: import("../../Interfaces").IContext) => Promise<void>;
3
+ FetchPhase: (context: import("../../Interfaces").IContext) => Promise<void>;
4
4
  };
5
5
  export default _default;
@@ -1,3 +1,3 @@
1
- import { IRequestPack } from "../../Interfaces";
2
- declare const _default: (context: IRequestPack) => Promise<void>;
1
+ import { IContext } from "../../Interfaces";
2
+ declare const _default: (context: IContext) => Promise<void>;
3
3
  export default _default;
@@ -16,22 +16,25 @@ const validatorjs_1 = __importDefault(require("validatorjs"));
16
16
  const Enums_1 = require("../../Enums");
17
17
  const Helpers_1 = require("../../Handlers/Helpers");
18
18
  exports.default = (context) => __awaiter(void 0, void 0, void 0, function* () {
19
- const requestMethod = context.req
20
- .method;
21
- const fillables = context.model.instance.getFillableFields(requestMethod);
22
- context.formData = Object.assign(Object.assign({}, context.item), (0, Helpers_1.getMergedFormData)(context.req, fillables));
23
- const validationRules = context.model.instance.getValidationRules(requestMethod);
19
+ const { req, res, model } = context;
20
+ const requestMethod = req.method;
21
+ const fillables = model.instance.getFillableFields(requestMethod);
22
+ context.formData = Object.assign(Object.assign({}, context.item), (0, Helpers_1.getMergedFormData)(req, fillables));
23
+ const validationRules = model.instance.getValidationRules(requestMethod);
24
24
  if (validationRules) {
25
25
  // The validation language should be set
26
- validatorjs_1.default.useLang(context.req.currentLanguage.language);
26
+ validatorjs_1.default.useLang(req.currentLanguage.language);
27
27
  // Validate the data
28
28
  const validation = new validatorjs_1.default(context.formData, validationRules);
29
29
  if (validation.fails()) {
30
- return context.res.status(400).json(validation.errors);
30
+ return res.status(Enums_1.StatusCodes.BAD_REQUEST).json(validation.errors);
31
31
  }
32
32
  }
33
+ // Checking the foreign key values if there is any
34
+ const errors = yield (0, Helpers_1.getForeignKeyValueErrors)(context);
35
+ if (errors.length > 0) {
36
+ return res.status(Enums_1.StatusCodes.BAD_REQUEST).json({ errors });
37
+ }
33
38
  // We should bind the timestamp values
34
- (0, Helpers_1.bindTimestampValues)(context.formData, context.model, [
35
- Enums_1.TimestampColumns.UPDATED_AT,
36
- ]);
39
+ (0, Helpers_1.bindTimestampValues)(context.formData, model, [Enums_1.TimestampColumns.UPDATED_AT]);
37
40
  });
@@ -1,4 +1,4 @@
1
1
  declare const _default: {
2
- PrepareActionPhase: (context: import("../../Interfaces").IRequestPack) => Promise<void>;
2
+ PrepareActionPhase: (context: import("../../Interfaces").IContext) => Promise<void>;
3
3
  };
4
4
  export default _default;
@@ -0,0 +1,3 @@
1
+ import { IContext } from "../../Interfaces";
2
+ declare const _default: (context: IContext) => Promise<void>;
3
+ export default _default;
@@ -0,0 +1,66 @@
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
+ const Enums_1 = require("../../Enums");
14
+ exports.default = (context) => __awaiter(void 0, void 0, void 0, function* () {
15
+ var _a;
16
+ const { req, res, model, database, relation, parentModel } = context;
17
+ if (!context.query || !context.queryParser || !context.conditions) {
18
+ return res.status(500).json({ error: "Query is not parsed!" });
19
+ }
20
+ const { page, per_page, text } = context.conditions;
21
+ // The text parameter is required
22
+ if (!text || text.trim().length === 0) {
23
+ return res
24
+ .status(Enums_1.StatusCodes.BAD_REQUEST)
25
+ .json({ error: "`text` parameter is required" });
26
+ }
27
+ const elastic = yield Services_1.IoCService.use("Elastic");
28
+ // We are using the default query prepare strategy. But developers are able to
29
+ // create their own custom logic if they want.
30
+ const esQuery = model.instance.getSearchQuery({
31
+ req,
32
+ model,
33
+ relation,
34
+ parentModel,
35
+ text: text || "",
36
+ });
37
+ // Getting the data from Elastic Search
38
+ const result = yield elastic.search(model.name, page, per_page, esQuery);
39
+ const ids = result.hits.hits.map((item) => item._id);
40
+ // Preparing the query to fetch the items via database
41
+ context.query = database
42
+ .from(context.model.instance.table)
43
+ .whereIn(model.instance.primaryKey, ids);
44
+ // Users should be able to select some fields to show.
45
+ context.queryParser.applyFields(context.query, context.conditions.fields);
46
+ // Fetching the data
47
+ const data = yield context.query;
48
+ // Calculating the pagination values
49
+ const from = (page - 1) * per_page;
50
+ const to = from + per_page;
51
+ const total = result.hits.total
52
+ ? (_a = result.hits.total) === null || _a === void 0 ? void 0 : _a.value
53
+ : 1;
54
+ // Creates the reesponses
55
+ context.result = {
56
+ data,
57
+ pagination: {
58
+ total,
59
+ lastPage: Math.ceil(total / per_page),
60
+ per_page,
61
+ currentPage: page,
62
+ from,
63
+ to,
64
+ },
65
+ };
66
+ });
@@ -0,0 +1,3 @@
1
+ import { IContext } from "../../Interfaces";
2
+ declare const _default: (context: IContext) => Promise<void>;
3
+ export default _default;
@@ -0,0 +1,19 @@
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 = (context) => __awaiter(void 0, void 0, void 0, function* () {
14
+ context.queryParser = new Services_1.QueryService(context.model, context.version.modelList.get(), context.version.config);
15
+ // We should parse URL query string to use as condition in Lucid query
16
+ context.conditions = context.queryParser.get(context.req.query);
17
+ // Creating a new database query
18
+ context.query = context.database.from(context.model.instance.table);
19
+ });
@@ -0,0 +1,5 @@
1
+ declare const _default: {
2
+ PreparePhase: (context: import("../../Interfaces").IContext) => Promise<void>;
3
+ FetchPhase: (context: import("../../Interfaces").IContext) => Promise<void>;
4
+ };
5
+ export default _default;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const PreparePhase_1 = __importDefault(require("./PreparePhase"));
7
+ const FetchPhase_1 = __importDefault(require("./FetchPhase"));
8
+ exports.default = {
9
+ PreparePhase: PreparePhase_1.default,
10
+ FetchPhase: FetchPhase_1.default,
11
+ };
@@ -1,3 +1,3 @@
1
- import { IRequestPack } from "../../Interfaces";
2
- declare const _default: (context: IRequestPack) => Promise<void>;
1
+ import { IContext } from "../../Interfaces";
2
+ declare const _default: (context: IContext) => Promise<void>;
3
3
  export default _default;
@@ -10,11 +10,21 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  const Enums_1 = require("../../Enums");
13
+ const Helpers_1 = require("../../Handlers/Helpers");
13
14
  exports.default = (context) => __awaiter(void 0, void 0, void 0, function* () {
14
15
  var _a;
15
- if (context.queryParser && context.query) {
16
+ if (context.queryParser && context.query && context.conditions) {
16
17
  // Users should be able to filter records
17
18
  context.queryParser.applyWheres(context.query, ((_a = context.conditions) === null || _a === void 0 ? void 0 : _a.q) || []);
19
+ // Users should be able to select some fields to show.
20
+ context.queryParser.applyFields(context.query, context.conditions.fields);
21
+ // If there is a relation, we should bind it
22
+ (0, Helpers_1.addForeignKeyQuery)(context.req, context.query, context.relation, context.parentModel);
23
+ // We should check the parameter type
24
+ const value = context.params[context.model.instance.primaryKey];
25
+ (0, Helpers_1.checkPrimaryKeyValueType)(context.model, value);
26
+ // Adding the main query
27
+ context.query.where(context.model.instance.primaryKey, value);
18
28
  context.item = yield context.query.first();
19
29
  if (!context.item) {
20
30
  context.res
@@ -1,3 +1,3 @@
1
- import { IRequestPack } from "../../Interfaces";
2
- declare const _default: (context: IRequestPack) => Promise<void>;
1
+ import { IContext } from "../../Interfaces";
2
+ declare const _default: (context: IContext) => Promise<void>;
3
3
  export default _default;
@@ -12,20 +12,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  const Services_1 = require("../../Services");
13
13
  const Helpers_1 = require("../../Handlers/Helpers");
14
14
  exports.default = (context) => __awaiter(void 0, void 0, void 0, function* () {
15
- context.queryParser = new Services_1.QueryService(context.model, context.version.modelList.get(), context.version.config);
15
+ const { req, model, version, database } = context;
16
+ context.queryParser = new Services_1.QueryService(model, version.modelList.get(), version.config);
16
17
  // We should parse URL query string to use as condition in Lucid query
17
- context.conditions = context.queryParser.get(context.req.query);
18
+ context.conditions = context.queryParser.get(req.query);
18
19
  // Fetching item
19
- context.query = context.database.from(context.model.instance.table);
20
+ context.query = database.from(model.instance.table);
20
21
  // If there is a deletedAtColumn, it means that this table support soft-delete
21
- (0, Helpers_1.addSoftDeleteQuery)(context.model, context.conditions, context.query);
22
- // Users should be able to select some fields to show.
23
- context.queryParser.applyFields(context.query, context.conditions.fields);
24
- // If there is a relation, we should bind it
25
- (0, Helpers_1.addForeignKeyQuery)(context.req, context.query, context.relation, context.parentModel);
26
- // We should check the parameter type
27
- const value = context.params[context.model.instance.primaryKey];
28
- (0, Helpers_1.checkPrimaryKeyValueType)(context.model, value);
29
- // Adding the main query
30
- context.query.where(context.model.instance.primaryKey, value);
22
+ (0, Helpers_1.addSoftDeleteQuery)(model, context.conditions, context.query);
31
23
  });
@@ -1,5 +1,5 @@
1
1
  declare const _default: {
2
- PreparePhase: (context: import("../../Interfaces").IRequestPack) => Promise<void>;
3
- FetchPhase: (context: import("../../Interfaces").IRequestPack) => Promise<void>;
2
+ PreparePhase: (context: import("../../Interfaces").IContext) => Promise<void>;
3
+ FetchPhase: (context: import("../../Interfaces").IContext) => Promise<void>;
4
4
  };
5
5
  export default _default;
@@ -1,3 +1,3 @@
1
- import { IRequestPack } from "../../Interfaces";
2
- declare const _default: (context: IRequestPack) => Promise<void>;
1
+ import { IContext } from "../../Interfaces";
2
+ declare const _default: (context: IContext) => Promise<void>;
3
3
  export default _default;
@@ -1,3 +1,3 @@
1
- import { IRequestPack } from "../../Interfaces";
2
- declare const _default: (context: IRequestPack) => Promise<void>;
1
+ import { IContext } from "../../Interfaces";
2
+ declare const _default: (context: IContext) => Promise<void>;
3
3
  export default _default;
@@ -1,3 +1,3 @@
1
- import { IRequestPack } from "../../Interfaces";
2
- declare const _default: (context: IRequestPack) => Promise<void>;
1
+ import { IContext } from "../../Interfaces";
2
+ declare const _default: (context: IContext) => Promise<void>;
3
3
  export default _default;
@@ -1,3 +1,3 @@
1
- import { IRequestPack } from "../../Interfaces";
2
- declare const _default: (context: IRequestPack) => Promise<void>;
1
+ import { IContext } from "../../Interfaces";
2
+ declare const _default: (context: IContext) => Promise<void>;
3
3
  export default _default;
@@ -9,6 +9,14 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
+ const Helpers_1 = require("../../Handlers/Helpers");
12
13
  exports.default = (context) => __awaiter(void 0, void 0, void 0, function* () {
13
- context.res.json(context.item);
14
+ const { item, res, model, handlerType } = context;
15
+ // Adding cache tags
16
+ const { primaryKey } = model.instance;
17
+ const config = model.getCacheConfiguration(handlerType);
18
+ context.req.original.tags.push((0, Helpers_1.toCacheTagKey)(model, item[primaryKey], config));
19
+ // Caching the results
20
+ yield (0, Helpers_1.putCache)(context, item);
21
+ res.json(item);
14
22
  });
@@ -1,3 +1,3 @@
1
- import { IRequestPack } from "../../Interfaces";
2
- declare const _default: (context: IRequestPack) => Promise<void>;
1
+ import { IContext } from "../../Interfaces";
2
+ declare const _default: (context: IContext) => Promise<void>;
3
3
  export default _default;