@decaf-ts/for-nest 0.1.8 → 0.1.9

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 (124) hide show
  1. package/README.md +1 -1
  2. package/dist/for-nest.cjs +1 -1
  3. package/dist/for-nest.cjs.map +1 -1
  4. package/dist/for-nest.js +1 -1
  5. package/dist/for-nest.js.map +1 -1
  6. package/lib/decaf-model/DecafModelModule.cjs +9 -4
  7. package/lib/decaf-model/DecafModelModule.d.ts +3 -3
  8. package/lib/decaf-model/DecafModelModule.js.map +1 -1
  9. package/lib/decaf-model/FromModelController.cjs +355 -53
  10. package/lib/decaf-model/FromModelController.d.ts +6 -2
  11. package/lib/decaf-model/FromModelController.js.map +1 -1
  12. package/lib/decaf-model/decorators/ApiOperationFromModel.cjs +22 -0
  13. package/lib/decaf-model/decorators/ApiOperationFromModel.d.ts +9 -0
  14. package/lib/decaf-model/decorators/ApiOperationFromModel.js.map +1 -1
  15. package/lib/decaf-model/decorators/ApiParamsFromModel.d.ts +2 -2
  16. package/lib/decaf-model/decorators/ApiParamsFromModel.js.map +1 -1
  17. package/lib/decaf-model/decorators/DecafParams.cjs +9 -1
  18. package/lib/decaf-model/decorators/DecafParams.d.ts +2 -2
  19. package/lib/decaf-model/decorators/DecafParams.js.map +1 -1
  20. package/lib/decaf-model/decorators/types.d.ts +5 -5
  21. package/lib/decaf-model/types.cjs +15 -0
  22. package/lib/decaf-model/types.d.ts +18 -0
  23. package/lib/decaf-model/types.js.map +1 -0
  24. package/lib/decaf-model/utils.cjs +67 -0
  25. package/lib/decaf-model/utils.d.ts +7 -0
  26. package/lib/decaf-model/utils.js.map +1 -0
  27. package/lib/esm/decaf-model/DecafModelModule.d.ts +3 -3
  28. package/lib/esm/decaf-model/DecafModelModule.js +9 -4
  29. package/lib/esm/decaf-model/DecafModelModule.js.map +1 -1
  30. package/lib/esm/decaf-model/FromModelController.d.ts +6 -2
  31. package/lib/esm/decaf-model/FromModelController.js +359 -57
  32. package/lib/esm/decaf-model/FromModelController.js.map +1 -1
  33. package/lib/esm/decaf-model/decorators/ApiOperationFromModel.d.ts +9 -0
  34. package/lib/esm/decaf-model/decorators/ApiOperationFromModel.js +22 -1
  35. package/lib/esm/decaf-model/decorators/ApiOperationFromModel.js.map +1 -1
  36. package/lib/esm/decaf-model/decorators/ApiParamsFromModel.d.ts +2 -2
  37. package/lib/esm/decaf-model/decorators/ApiParamsFromModel.js.map +1 -1
  38. package/lib/esm/decaf-model/decorators/DecafParams.d.ts +2 -2
  39. package/lib/esm/decaf-model/decorators/DecafParams.js +9 -1
  40. package/lib/esm/decaf-model/decorators/DecafParams.js.map +1 -1
  41. package/lib/esm/decaf-model/decorators/types.d.ts +5 -5
  42. package/lib/esm/decaf-model/types.d.ts +18 -0
  43. package/lib/esm/decaf-model/types.js +11 -0
  44. package/lib/esm/decaf-model/types.js.map +1 -0
  45. package/lib/esm/decaf-model/utils.d.ts +7 -0
  46. package/lib/esm/decaf-model/utils.js +61 -0
  47. package/lib/esm/decaf-model/utils.js.map +1 -0
  48. package/lib/esm/factory/NestBootstraper.js +2 -10
  49. package/lib/esm/factory/NestBootstraper.js.map +1 -1
  50. package/lib/esm/factory/context.d.ts +0 -0
  51. package/lib/esm/factory/context.js +2 -0
  52. package/lib/esm/factory/context.js.map +1 -0
  53. package/lib/esm/factory/exceptions/DecafErrorFilter.d.ts +4 -0
  54. package/lib/esm/factory/exceptions/DecafErrorFilter.js +32 -0
  55. package/lib/esm/factory/exceptions/DecafErrorFilter.js.map +1 -0
  56. package/lib/esm/factory/exceptions/decorators.d.ts +1 -0
  57. package/lib/esm/factory/exceptions/decorators.js +6 -0
  58. package/lib/esm/factory/exceptions/decorators.js.map +1 -0
  59. package/lib/esm/factory/exceptions/index.d.ts +2 -7
  60. package/lib/esm/factory/exceptions/index.js +2 -7
  61. package/lib/esm/factory/exceptions/index.js.map +1 -1
  62. package/lib/esm/module.js +5 -2
  63. package/lib/esm/module.js.map +1 -1
  64. package/lib/esm/types.d.ts +1 -0
  65. package/lib/factory/NestBootstraper.cjs +1 -9
  66. package/lib/factory/NestBootstraper.js.map +1 -1
  67. package/lib/factory/context.cjs +2 -0
  68. package/lib/factory/context.d.ts +0 -0
  69. package/lib/factory/context.js.map +1 -0
  70. package/lib/factory/exceptions/DecafErrorFilter.cjs +35 -0
  71. package/lib/factory/exceptions/DecafErrorFilter.d.ts +4 -0
  72. package/lib/factory/exceptions/DecafErrorFilter.js.map +1 -0
  73. package/lib/factory/exceptions/decorators.cjs +9 -0
  74. package/lib/factory/exceptions/decorators.d.ts +1 -0
  75. package/lib/factory/exceptions/decorators.js.map +1 -0
  76. package/lib/factory/exceptions/index.cjs +2 -7
  77. package/lib/factory/exceptions/index.d.ts +2 -7
  78. package/lib/factory/exceptions/index.js.map +1 -1
  79. package/lib/module.cjs +5 -2
  80. package/lib/module.js.map +1 -1
  81. package/lib/types.d.ts +1 -0
  82. package/package.json +3 -3
  83. package/lib/esm/factory/exceptions/AuthorizationExceptionFilter.d.ts +0 -9
  84. package/lib/esm/factory/exceptions/AuthorizationExceptionFilter.js +0 -35
  85. package/lib/esm/factory/exceptions/AuthorizationExceptionFilter.js.map +0 -1
  86. package/lib/esm/factory/exceptions/ConflictExceptionFilter.d.ts +0 -9
  87. package/lib/esm/factory/exceptions/ConflictExceptionFilter.js +0 -35
  88. package/lib/esm/factory/exceptions/ConflictExceptionFilter.js.map +0 -1
  89. package/lib/esm/factory/exceptions/GlobalExceptionFilter.d.ts +0 -4
  90. package/lib/esm/factory/exceptions/GlobalExceptionFilter.js +0 -39
  91. package/lib/esm/factory/exceptions/GlobalExceptionFilter.js.map +0 -1
  92. package/lib/esm/factory/exceptions/HttpExceptionFilter.d.ts +0 -4
  93. package/lib/esm/factory/exceptions/HttpExceptionFilter.js +0 -27
  94. package/lib/esm/factory/exceptions/HttpExceptionFilter.js.map +0 -1
  95. package/lib/esm/factory/exceptions/HttpResponseError.d.ts +0 -13
  96. package/lib/esm/factory/exceptions/HttpResponseError.js +0 -21
  97. package/lib/esm/factory/exceptions/HttpResponseError.js.map +0 -1
  98. package/lib/esm/factory/exceptions/NotFoundExceptionFilter.d.ts +0 -9
  99. package/lib/esm/factory/exceptions/NotFoundExceptionFilter.js +0 -35
  100. package/lib/esm/factory/exceptions/NotFoundExceptionFilter.js.map +0 -1
  101. package/lib/esm/factory/exceptions/ValidationExceptionFilter.d.ts +0 -9
  102. package/lib/esm/factory/exceptions/ValidationExceptionFilter.js +0 -35
  103. package/lib/esm/factory/exceptions/ValidationExceptionFilter.js.map +0 -1
  104. package/lib/factory/exceptions/AuthorizationExceptionFilter.cjs +0 -39
  105. package/lib/factory/exceptions/AuthorizationExceptionFilter.d.ts +0 -9
  106. package/lib/factory/exceptions/AuthorizationExceptionFilter.js.map +0 -1
  107. package/lib/factory/exceptions/ConflictExceptionFilter.cjs +0 -39
  108. package/lib/factory/exceptions/ConflictExceptionFilter.d.ts +0 -9
  109. package/lib/factory/exceptions/ConflictExceptionFilter.js.map +0 -1
  110. package/lib/factory/exceptions/GlobalExceptionFilter.cjs +0 -42
  111. package/lib/factory/exceptions/GlobalExceptionFilter.d.ts +0 -4
  112. package/lib/factory/exceptions/GlobalExceptionFilter.js.map +0 -1
  113. package/lib/factory/exceptions/HttpExceptionFilter.cjs +0 -30
  114. package/lib/factory/exceptions/HttpExceptionFilter.d.ts +0 -4
  115. package/lib/factory/exceptions/HttpExceptionFilter.js.map +0 -1
  116. package/lib/factory/exceptions/HttpResponseError.cjs +0 -25
  117. package/lib/factory/exceptions/HttpResponseError.d.ts +0 -13
  118. package/lib/factory/exceptions/HttpResponseError.js.map +0 -1
  119. package/lib/factory/exceptions/NotFoundExceptionFilter.cjs +0 -39
  120. package/lib/factory/exceptions/NotFoundExceptionFilter.d.ts +0 -9
  121. package/lib/factory/exceptions/NotFoundExceptionFilter.js.map +0 -1
  122. package/lib/factory/exceptions/ValidationExceptionFilter.cjs +0 -39
  123. package/lib/factory/exceptions/ValidationExceptionFilter.d.ts +0 -9
  124. package/lib/factory/exceptions/ValidationExceptionFilter.js.map +0 -1
@@ -10,17 +10,19 @@ var __metadata = (this && this.__metadata) || function (k, v) {
10
10
  var __param = (this && this.__param) || function (paramIndex, decorator) {
11
11
  return function (target, key) { decorator(target, key, paramIndex); }
12
12
  };
13
- import { Body, Controller, Param } from "@nestjs/common";
14
- import { ApiBadRequestResponse, ApiBody, ApiCreatedResponse, ApiExtraModels, ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiParam, ApiTags, ApiUnprocessableEntityResponse, getSchemaPath, } from "@nestjs/swagger";
15
- import { ModelService, Repository } from "@decaf-ts/core";
13
+ import { Body, Controller, Param, Query } from "@nestjs/common";
14
+ import { ApiBadRequestResponse, ApiBody, ApiCreatedResponse, ApiExtraModels, ApiNotFoundResponse, ApiOkResponse, ApiOperation, ApiParam, ApiQuery, ApiTags, ApiUnprocessableEntityResponse, getSchemaPath, } from "@nestjs/swagger";
15
+ import { ModelService, Repository, OrderDirection, PersistenceKeys, PreparedStatementKeys, } from "@decaf-ts/core";
16
16
  import { Model } from "@decaf-ts/decorator-validation";
17
- import { LoggedClass, Logging, toKebabCase } from "@decaf-ts/logging";
17
+ import { Logging, toKebabCase } from "@decaf-ts/logging";
18
18
  import { DBKeys, ValidationError } from "@decaf-ts/db-decorators";
19
19
  import { Metadata } from "@decaf-ts/decoration";
20
20
  import { ApiOperationFromModel, ApiParamsFromModel, DecafParams, } from "./decorators/index.js";
21
21
  import { DecafRequestContext } from "./../request/index.js";
22
22
  import { DECAF_ADAPTER_OPTIONS } from "./../constants.js";
23
+ import { applyApiDecorators, getApiDecorators, createRouteHandler, defineRouteMethod, } from "./utils.js";
23
24
  import { Auth } from "./decorators/decorators.js";
25
+ import { AbstractQueryController } from "./types.js";
24
26
  /**
25
27
  * @description
26
28
  * Factory and utilities for generating dynamic NestJS controllers from Decaf {@link Model} definitions.
@@ -72,31 +74,123 @@ import { Auth } from "./decorators/decorators.js";
72
74
  */
73
75
  export class FromModelController {
74
76
  static { this.log = Logging.for(FromModelController.name); }
75
- static create(ModelClazz) {
76
- const log = FromModelController.log.for(FromModelController.create);
77
- const tableName = Model.tableName(ModelClazz);
78
- const routePath = toKebabCase(tableName);
79
- const modelClazzName = ModelClazz.name;
80
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
81
- const { description, getPK, apiProperties, path } = FromModelController.getRouteParametersFromModel(ModelClazz);
82
- log.debug(`Creating controller for model: ${modelClazzName}`);
83
- let DynamicModelController = class DynamicModelController extends LoggedClass {
77
+ static getPersistence(ModelClazz) {
78
+ try {
79
+ return ModelService.forModel(ModelClazz);
80
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
81
+ }
82
+ catch (e) {
83
+ return Repository.forModel(ModelClazz);
84
+ }
85
+ }
86
+ static createQueryRoutesFromRepository(persistence, prefix = PersistenceKeys.STATEMENT) {
87
+ const ModelConstr = persistence.class;
88
+ const methodQueries = Metadata.get(persistence.constructor, Metadata.key(PersistenceKeys.QUERY)) ?? {};
89
+ // create base class
90
+ class QueryController extends AbstractQueryController {
84
91
  constructor(clientContext) {
85
- super();
86
- this.clientContext = clientContext;
87
- this.pk = Model.pk(ModelClazz);
88
- log.info(`Registering dynamic controller for model: ${modelClazzName} route: /${routePath}`);
92
+ super(clientContext);
93
+ this._persistence = FromModelController.getPersistence(ModelConstr);
89
94
  }
90
95
  get persistence() {
91
- if (!this._persistence)
92
- this._persistence =
93
- ModelService.getService(ModelClazz) ||
94
- Repository.forModel(ModelClazz);
95
96
  const adapterOptions = this.clientContext.get(DECAF_ADAPTER_OPTIONS);
96
97
  if (adapterOptions)
97
98
  return this._persistence.for(adapterOptions);
98
99
  return this._persistence;
99
100
  }
101
+ }
102
+ for (const [methodName, objValues] of Object.entries(methodQueries)) {
103
+ const fields = objValues.fields ?? [];
104
+ const routePath = [prefix, methodName, ...fields.map((f) => `:${f}`)]
105
+ .filter((segment) => segment && segment.trim())
106
+ .join("/");
107
+ const handler = createRouteHandler(methodName);
108
+ const descriptor = defineRouteMethod(QueryController, methodName, handler);
109
+ if (descriptor) {
110
+ const decorators = getApiDecorators(methodName, routePath);
111
+ applyApiDecorators(QueryController, methodName, descriptor, decorators);
112
+ }
113
+ }
114
+ return QueryController;
115
+ }
116
+ static create(ModelConstr) {
117
+ const log = FromModelController.log.for(FromModelController.create);
118
+ const tableName = Model.tableName(ModelConstr);
119
+ const routePath = toKebabCase(tableName);
120
+ const modelClazzName = ModelConstr.name;
121
+ const persistence = FromModelController.getPersistence(ModelConstr);
122
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
123
+ const { description, getPK, apiProperties, path } = FromModelController.getRouteParametersFromModel(ModelConstr);
124
+ log.debug(`Creating controller for model: ${modelClazzName}`);
125
+ const BaseController = FromModelController.createQueryRoutesFromRepository(persistence);
126
+ let DynamicModelController = class DynamicModelController extends BaseController {
127
+ constructor(clientContext) {
128
+ super(clientContext);
129
+ this.pk = Model.pk(ModelConstr);
130
+ log.info(`Registering dynamic controller for model: ${modelClazzName} route: /${routePath}`);
131
+ }
132
+ //
133
+ // @ApiOperationFromModel(ModelClazz, "GET", "query/:condition/:orderBy")
134
+ // @ApiOperation({ summary: `Retrieve ${modelClazzName} records by query.` })
135
+ // @ApiParam({ name: "method", description: "Query method to be called" })
136
+ // @ApiOkResponse({
137
+ // description: `${modelClazzName} retrieved successfully.`,
138
+ // })
139
+ // @ApiNotFoundResponse({
140
+ // description: `No ${modelClazzName} records matches the query.`,
141
+ // })
142
+ // async query(
143
+ // @Param("condition") condition: Condition<any>,
144
+ // @Param("orderBy") orderBy: string,
145
+ // @QueryDetails() details: DirectionLimitOffset,
146
+ // ) {
147
+ // const {direction, limit, offset} = details;
148
+ // return this.persistence.query(condition, orderBy as keyof Model, direction, limit, offset);
149
+ // }
150
+ async listBy(key, details) {
151
+ return this.persistence.listBy(key, details.direction);
152
+ }
153
+ async paginateBy(key, page, details) {
154
+ return this.persistence.paginateBy(key, details.direction, details.limit);
155
+ }
156
+ async findOneBy(key, value) {
157
+ return this.persistence.findOneBy(key, value);
158
+ }
159
+ async findBy(key, value, details) {
160
+ return this.persistence.findBy(key, value);
161
+ }
162
+ async statement(name, args, details) {
163
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
164
+ const { direction, offset, limit } = details;
165
+ args = args.map((a) => (typeof a === "string" ? parseInt(a) : a) || a);
166
+ switch (name) {
167
+ case PreparedStatementKeys.FIND_BY:
168
+ break;
169
+ case PreparedStatementKeys.LIST_BY:
170
+ args.push(direction);
171
+ break;
172
+ case PreparedStatementKeys.PAGE_BY:
173
+ args.push(direction, limit);
174
+ break;
175
+ case PreparedStatementKeys.FIND_ONE_BY:
176
+ break;
177
+ }
178
+ return this.persistence.statement(name, ...args);
179
+ }
180
+ async createAll(data) {
181
+ const log = this.log.for(this.createAll);
182
+ log.verbose(`creating new ${modelClazzName}`);
183
+ let created;
184
+ try {
185
+ created = await this.persistence.createAll(data.map((d) => new ModelConstr(d)));
186
+ }
187
+ catch (e) {
188
+ log.error(`Failed to create new ${modelClazzName}`, e);
189
+ throw e;
190
+ }
191
+ log.info(`created new ${modelClazzName} with id ${created[this.pk]}`);
192
+ return created;
193
+ }
100
194
  async create(data) {
101
195
  const log = this.log.for(this.create);
102
196
  log.verbose(`creating new ${modelClazzName}`);
@@ -111,8 +205,22 @@ export class FromModelController {
111
205
  log.info(`created new ${modelClazzName} with id ${created[this.pk]}`);
112
206
  return created;
113
207
  }
208
+ async readAll(ids) {
209
+ const log = this.log.for(this.readAll);
210
+ let read;
211
+ try {
212
+ log.debug(`reading ${ids.length} ${modelClazzName}: ${ids}`);
213
+ read = await this.persistence.readAll(ids);
214
+ }
215
+ catch (e) {
216
+ log.error(`Failed to ${modelClazzName} with id ${ids}`, e);
217
+ throw e;
218
+ }
219
+ log.info(`read ${read.length} ${modelClazzName}`);
220
+ return read;
221
+ }
114
222
  async read(routeParams) {
115
- const id = getPK(...routeParams.ordered);
223
+ const id = getPK(...routeParams.valuesInOrder);
116
224
  if (typeof id === "undefined")
117
225
  throw new ValidationError(`No ${this.pk} provided`);
118
226
  const log = this.log.for(this.read);
@@ -128,30 +236,28 @@ export class FromModelController {
128
236
  log.info(`read ${modelClazzName} with id ${read[this.pk]}`);
129
237
  return read;
130
238
  }
131
- async query(method) {
132
- const log = this.log.for(this.read);
133
- let results;
239
+ async updateAll(body) {
240
+ const log = this.log.for(this.updateAll);
241
+ let updated;
134
242
  try {
135
- log.debug(`Querying ${modelClazzName} using method "${method}"`);
136
- const args = [method];
137
- results = await this.persistence.query(...args);
243
+ log.info(`updating ${body.length} ${modelClazzName}`);
244
+ updated = await this.persistence.updateAll(body);
138
245
  }
139
246
  catch (e) {
140
- log.error(`Failed to query ${modelClazzName} using method "${method}"`, e);
247
+ log.error(e);
141
248
  throw e;
142
249
  }
143
- log.info(`Successfully queried ${modelClazzName} using method "${method}"`);
144
- return results;
250
+ return updated;
145
251
  }
146
252
  async update(routeParams, body) {
147
253
  const log = this.log.for(this.update);
148
- const id = getPK(...routeParams.ordered);
254
+ const id = getPK(...routeParams.valuesInOrder);
149
255
  if (typeof id === "undefined")
150
256
  throw new ValidationError(`No ${this.pk} provided`);
151
257
  let updated;
152
258
  try {
153
259
  log.info(`updating ${modelClazzName} with ${this.pk} ${id}`);
154
- updated = await this.persistence.update(new ModelClazz({
260
+ updated = await this.persistence.update(new ModelConstr({
155
261
  ...body,
156
262
  [this.pk]: id,
157
263
  }));
@@ -162,9 +268,23 @@ export class FromModelController {
162
268
  }
163
269
  return updated;
164
270
  }
271
+ async deleteAll(ids) {
272
+ const log = this.log.for(this.deleteAll);
273
+ let read;
274
+ try {
275
+ log.debug(`deleting ${ids.length} ${modelClazzName}: ${ids}`);
276
+ read = await this.persistence.deleteAll(ids);
277
+ }
278
+ catch (e) {
279
+ log.error(`Failed to delete ${modelClazzName} with id ${ids}`, e);
280
+ throw e;
281
+ }
282
+ log.info(`deleted ${read.length} ${modelClazzName}`);
283
+ return read;
284
+ }
165
285
  async delete(routeParams) {
166
286
  const log = this.log.for(this.delete);
167
- const id = getPK(...routeParams.ordered);
287
+ const id = getPK(...routeParams.valuesInOrder);
168
288
  if (typeof id === "undefined")
169
289
  throw new ValidationError(`No ${this.pk} provided`);
170
290
  let del;
@@ -181,11 +301,153 @@ export class FromModelController {
181
301
  }
182
302
  };
183
303
  __decorate([
184
- ApiOperationFromModel(ModelClazz, "POST"),
304
+ ApiOperationFromModel(ModelConstr, "GET", "listBy/:key"),
305
+ ApiOperation({ summary: `Retrieve ${modelClazzName} records by query.` }),
306
+ ApiParam({ name: "key", description: "the model key to sort by" }),
307
+ ApiQuery({ name: "direction", required: true, enum: OrderDirection }),
308
+ ApiOkResponse({
309
+ description: `${modelClazzName} listed successfully.`,
310
+ }),
311
+ __param(1, Query()),
312
+ __metadata("design:type", Function),
313
+ __metadata("design:paramtypes", [String, Object]),
314
+ __metadata("design:returntype", Promise)
315
+ ], DynamicModelController.prototype, "listBy", null);
316
+ __decorate([
317
+ ApiOperationFromModel(ModelConstr, "GET", "paginateBy/:key/:page"),
318
+ ApiOperation({ summary: `Retrieve ${modelClazzName} records by query.` }),
319
+ ApiParam({ name: "key", description: "the model key to sort by" }),
320
+ ApiParam({
321
+ name: "page",
322
+ description: "the page to retrieve or the bookmark",
323
+ }),
324
+ ApiQuery({
325
+ name: "direction",
326
+ required: true,
327
+ enum: OrderDirection,
328
+ description: "the sort order",
329
+ }),
330
+ ApiQuery({ name: "limit", required: true, description: "the page size" }),
331
+ ApiOkResponse({
332
+ description: `${modelClazzName} listed paginated.`,
333
+ }),
334
+ __param(0, Param("key")),
335
+ __param(1, Param("page")),
336
+ __param(2, Query()),
337
+ __metadata("design:type", Function),
338
+ __metadata("design:paramtypes", [String, Object, Object]),
339
+ __metadata("design:returntype", Promise)
340
+ ], DynamicModelController.prototype, "paginateBy", null);
341
+ __decorate([
342
+ ApiOperationFromModel(ModelConstr, "GET", "findOneBy/:key"),
343
+ ApiOperation({ summary: `Retrieve ${modelClazzName} records by query.` }),
344
+ ApiParam({ name: "key", description: "the model key to sort by" }),
345
+ ApiOkResponse({
346
+ description: `${modelClazzName} listed found.`,
347
+ }),
348
+ ApiNotFoundResponse({
349
+ description: `No ${modelClazzName} record matches the provided identifier.`,
350
+ }),
351
+ __param(0, Param("key")),
352
+ __param(1, Param("value")),
353
+ __metadata("design:type", Function),
354
+ __metadata("design:paramtypes", [String, Object]),
355
+ __metadata("design:returntype", Promise)
356
+ ], DynamicModelController.prototype, "findOneBy", null);
357
+ __decorate([
358
+ ApiOperationFromModel(ModelConstr, "GET", "findBy/:key/:value"),
359
+ ApiOperation({ summary: `Retrieve ${modelClazzName} records by query.` }),
360
+ ApiParam({ name: "key", description: "the model key to compare" }),
361
+ ApiParam({ name: "value", description: "the value to match" }),
362
+ ApiQuery({
363
+ name: "direction",
364
+ required: true,
365
+ enum: OrderDirection,
366
+ description: "the sort order when applicable",
367
+ }),
368
+ ApiOkResponse({
369
+ description: `${modelClazzName} listed found.`,
370
+ }),
371
+ ApiNotFoundResponse({
372
+ description: `No ${modelClazzName} record matches the provided identifier.`,
373
+ }),
374
+ __param(0, Param("key")),
375
+ __param(1, Param("value")),
376
+ __param(2, Query()),
377
+ __metadata("design:type", Function),
378
+ __metadata("design:paramtypes", [String, Object, Object]),
379
+ __metadata("design:returntype", Promise)
380
+ ], DynamicModelController.prototype, "findBy", null);
381
+ __decorate([
382
+ ApiOperationFromModel(ModelConstr, "GET", "statement/:method/*args"),
383
+ ApiOperation({
384
+ summary: `Executes a prepared statement on ${modelClazzName}.`,
385
+ }),
386
+ ApiParam({
387
+ name: "method",
388
+ description: "the prepared statement to execute",
389
+ }),
390
+ ApiParam({
391
+ name: "args",
392
+ description: "concatenated list of arguments the prepared statement can accept",
393
+ }),
394
+ ApiQuery({
395
+ name: "direction",
396
+ required: true,
397
+ enum: OrderDirection,
398
+ description: "the sort order when applicable",
399
+ }),
400
+ ApiQuery({
401
+ name: "limit",
402
+ required: true,
403
+ description: "limit or page size when applicable",
404
+ }),
405
+ ApiQuery({
406
+ name: "offset",
407
+ required: true,
408
+ description: "offset or bookmark when applicable",
409
+ }),
410
+ ApiOkResponse({
411
+ description: `${modelClazzName} listed found.`,
412
+ }),
413
+ ApiNotFoundResponse({
414
+ description: `No ${modelClazzName} record matches the provided identifier.`,
415
+ }),
416
+ __param(0, Param("method")),
417
+ __param(1, Param("args")),
418
+ __param(2, Query()),
419
+ __metadata("design:type", Function),
420
+ __metadata("design:paramtypes", [String, Array, Object]),
421
+ __metadata("design:returntype", Promise)
422
+ ], DynamicModelController.prototype, "statement", null);
423
+ __decorate([
424
+ ApiOperationFromModel(ModelConstr, "POST", "bulk"),
425
+ ApiOperation({ summary: `Create a new ${modelClazzName}.` }),
426
+ ApiBody({
427
+ description: `Payload for ${modelClazzName}`,
428
+ schema: {
429
+ type: "array",
430
+ items: { $ref: getSchemaPath(ModelConstr) },
431
+ },
432
+ }),
433
+ ApiCreatedResponse({
434
+ description: `x ${modelClazzName} created successfully.`,
435
+ }),
436
+ ApiBadRequestResponse({ description: "Payload validation failed." }),
437
+ ApiUnprocessableEntityResponse({
438
+ description: "Repository rejected the provided payload.",
439
+ }),
440
+ __param(0, Body()),
441
+ __metadata("design:type", Function),
442
+ __metadata("design:paramtypes", [Array]),
443
+ __metadata("design:returntype", Promise)
444
+ ], DynamicModelController.prototype, "createAll", null);
445
+ __decorate([
446
+ ApiOperationFromModel(ModelConstr, "POST"),
185
447
  ApiOperation({ summary: `Create a new ${modelClazzName}.` }),
186
448
  ApiBody({
187
449
  description: `Payload for ${modelClazzName}`,
188
- schema: { $ref: getSchemaPath(ModelClazz) },
450
+ schema: { $ref: getSchemaPath(ModelConstr) },
189
451
  }),
190
452
  ApiCreatedResponse({
191
453
  description: `${modelClazzName} created successfully.`,
@@ -200,7 +462,22 @@ export class FromModelController {
200
462
  __metadata("design:returntype", Promise)
201
463
  ], DynamicModelController.prototype, "create", null);
202
464
  __decorate([
203
- ApiOperationFromModel(ModelClazz, "GET", path),
465
+ ApiOperationFromModel(ModelConstr, "GET", "bulk/:ids"),
466
+ ApiOperation({ summary: `Retrieve a ${modelClazzName} record by id.` }),
467
+ ApiQuery({ name: "ids", required: true, type: "array" }),
468
+ ApiOkResponse({
469
+ description: `${modelClazzName} retrieved successfully.`,
470
+ }),
471
+ ApiNotFoundResponse({
472
+ description: `No ${modelClazzName} record matches the provided identifier.`,
473
+ }),
474
+ __param(0, Query("ids")),
475
+ __metadata("design:type", Function),
476
+ __metadata("design:paramtypes", [Array]),
477
+ __metadata("design:returntype", Promise)
478
+ ], DynamicModelController.prototype, "readAll", null);
479
+ __decorate([
480
+ ApiOperationFromModel(ModelConstr, "GET", path),
204
481
  ApiParamsFromModel(apiProperties),
205
482
  ApiOperation({ summary: `Retrieve a ${modelClazzName} record by id.` }),
206
483
  ApiOkResponse({
@@ -215,32 +492,42 @@ export class FromModelController {
215
492
  __metadata("design:returntype", Promise)
216
493
  ], DynamicModelController.prototype, "read", null);
217
494
  __decorate([
218
- ApiOperationFromModel(ModelClazz, "GET", "query/:method"),
219
- ApiOperation({ summary: `Retrieve ${modelClazzName} records by query.` }),
220
- ApiParam({ name: "method", description: "Query method to be called" }),
495
+ ApiOperationFromModel(ModelConstr, "PUT", `${path}/bulk`),
496
+ ApiParamsFromModel(apiProperties),
497
+ ApiOperation({
498
+ summary: `Replace an existing ${modelClazzName} record with a new payload.`,
499
+ }),
500
+ ApiBody({
501
+ description: `Payload for replace a existing record of ${modelClazzName}`,
502
+ schema: {
503
+ type: "array",
504
+ items: { $ref: getSchemaPath(ModelConstr) },
505
+ },
506
+ }),
221
507
  ApiOkResponse({
222
- description: `${modelClazzName} retrieved successfully.`,
508
+ description: `${ModelConstr} record replaced successfully.`,
223
509
  }),
224
510
  ApiNotFoundResponse({
225
- description: `No ${modelClazzName} records matches the query.`,
511
+ description: `No ${modelClazzName} record matches the provided identifier.`,
226
512
  }),
227
- __param(0, Param("method")),
513
+ ApiBadRequestResponse({ description: "Payload validation failed." }),
514
+ __param(0, Body()),
228
515
  __metadata("design:type", Function),
229
- __metadata("design:paramtypes", [String]),
516
+ __metadata("design:paramtypes", [Array]),
230
517
  __metadata("design:returntype", Promise)
231
- ], DynamicModelController.prototype, "query", null);
518
+ ], DynamicModelController.prototype, "updateAll", null);
232
519
  __decorate([
233
- ApiOperationFromModel(ModelClazz, "PUT", path),
520
+ ApiOperationFromModel(ModelConstr, "PUT", path),
234
521
  ApiParamsFromModel(apiProperties),
235
522
  ApiOperation({
236
523
  summary: `Replace an existing ${modelClazzName} record with a new payload.`,
237
524
  }),
238
525
  ApiBody({
239
526
  description: `Payload for replace a existing record of ${modelClazzName}`,
240
- schema: { $ref: getSchemaPath(ModelClazz) },
527
+ schema: { $ref: getSchemaPath(ModelConstr) },
241
528
  }),
242
529
  ApiOkResponse({
243
- description: `${ModelClazz} record replaced successfully.`,
530
+ description: `${ModelConstr} record replaced successfully.`,
244
531
  }),
245
532
  ApiNotFoundResponse({
246
533
  description: `No ${modelClazzName} record matches the provided identifier.`,
@@ -253,7 +540,23 @@ export class FromModelController {
253
540
  __metadata("design:returntype", Promise)
254
541
  ], DynamicModelController.prototype, "update", null);
255
542
  __decorate([
256
- ApiOperationFromModel(ModelClazz, "DELETE", path),
543
+ ApiOperationFromModel(ModelConstr, "DELETE", "bulk/:ids"),
544
+ ApiParamsFromModel(apiProperties),
545
+ ApiOperation({ summary: `Retrieve a ${modelClazzName} record by id.` }),
546
+ ApiQuery({ name: "ids", required: true, type: "array" }),
547
+ ApiOkResponse({
548
+ description: `${modelClazzName} retrieved successfully.`,
549
+ }),
550
+ ApiNotFoundResponse({
551
+ description: `No ${modelClazzName} record matches the provided identifier.`,
552
+ }),
553
+ __param(0, Query("ids")),
554
+ __metadata("design:type", Function),
555
+ __metadata("design:paramtypes", [Array]),
556
+ __metadata("design:returntype", Promise)
557
+ ], DynamicModelController.prototype, "deleteAll", null);
558
+ __decorate([
559
+ ApiOperationFromModel(ModelConstr, "DELETE", path),
257
560
  ApiParamsFromModel(apiProperties),
258
561
  ApiOperation({ summary: `Delete a ${modelClazzName} record by id.` }),
259
562
  ApiOkResponse({
@@ -270,8 +573,8 @@ export class FromModelController {
270
573
  DynamicModelController = __decorate([
271
574
  Controller(routePath),
272
575
  ApiTags(modelClazzName),
273
- ApiExtraModels(ModelClazz),
274
- Auth(ModelClazz),
576
+ ApiExtraModels(ModelConstr),
577
+ Auth(ModelConstr),
275
578
  __metadata("design:paramtypes", [DecafRequestContext])
276
579
  ], DynamicModelController);
277
580
  return DynamicModelController;
@@ -280,13 +583,12 @@ export class FromModelController {
280
583
  const pk = Model.pk(ModelClazz);
281
584
  const composed = Metadata.get(ModelClazz, Metadata.key(DBKeys.COMPOSED, pk));
282
585
  const composedKeys = composed?.args ?? [];
283
- const keysToReturn = Array.isArray(composedKeys) && composedKeys.length > 0
284
- ? [...composedKeys]
285
- : [pk];
286
- const description = Metadata.description(ModelClazz);
287
586
  // remove duplicates while preserving order
288
- const uniqueKeys = Array.from(new Set(keysToReturn));
289
- const path = uniqueKeys.map((key) => `:${key}`).join("/");
587
+ const uniqueKeys = Array.isArray(composedKeys) && composedKeys.length > 0
588
+ ? Array.from(new Set([...composedKeys]))
589
+ : Array.from(new Set([pk]));
590
+ const description = Metadata.description(ModelClazz);
591
+ const path = `:${uniqueKeys.join("/:")}`;
290
592
  const apiProperties = uniqueKeys.map((key) => {
291
593
  return {
292
594
  name: key,
@@ -1 +1 @@
1
- {"version":3,"file":"FromModelController.js","sourceRoot":"","sources":["../../../src/decaf-model/FromModelController.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FromModelController.js","sourceRoot":"","sources":["../../../src/decaf-model/FromModelController.ts"],"names":[],"mappings":"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"}
@@ -19,3 +19,12 @@ export declare function isOperationBlocked(ModelConstructor: ModelConstructor<an
19
19
  * @return {MethodDecorator} A method decorator that either excludes the endpoint from Swagger (and route registration) or applies the correct HTTP decorator.
20
20
  */
21
21
  export declare function ApiOperationFromModel(ModelConstructor: ModelConstructor<any>, verb: HttpVerbs, path?: string): MethodDecorator;
22
+ /**
23
+ * @description Conditionally applies an HTTP method decorator for a given model and verb, hiding the endpoint in Swagger (and not registering the route) when the model blocks that CRUD operation.
24
+ * @summary Maps an HTTP verb to its corresponding `CrudOperations` key and Nest HTTP decorator (`@Get`, `@Post`, etc.). It checks `isOperationBlocked(ModelConstructor, crudOp)` and, if blocked, applies only `@ApiExcludeEndpoint()` (Swagger-hidden, no Nest route). If permitted, it applies the appropriate HTTP decorator with the optional `path`.
25
+ * @param {ModelConstructor<any>} ModelConstructor - The model constructor used to resolve operation-blocking rules.
26
+ * @param {HttpVerbs} verb - The HTTP verb to map (e.g., `"GET" | "POST" | "PUT" | "PATCH" | "DELETE"`).
27
+ * @param {string} [path] - Optional route path passed through to the corresponding Nest HTTP method decorator.
28
+ * @return {MethodDecorator} A method decorator that either excludes the endpoint from Swagger (and route registration) or applies the correct HTTP decorator.
29
+ */
30
+ export declare function BulkApiOperationFromModel(ModelConstructor: ModelConstructor<any>, verb: HttpVerbs, path?: string): MethodDecorator;
@@ -2,7 +2,7 @@ import { Metadata } from "@decaf-ts/decoration";
2
2
  import { Delete, Get, Patch, Post, Put } from "@nestjs/common";
3
3
  import { ApiExcludeEndpoint } from "@nestjs/swagger";
4
4
  import { apply } from "@decaf-ts/reflection";
5
- import { OperationKeys } from "@decaf-ts/db-decorators";
5
+ import { BulkCrudOperationKeys, OperationKeys, } from "@decaf-ts/db-decorators";
6
6
  /**
7
7
  * @description Determines if a given CRUD operation is blocked for a specific model constructor.
8
8
  * @summary Retrieves the operation-blocking handler metadata stored on the provided model constructor (under `OperationKeys.REFLECT + OperationKeys.BLOCK`), executes it (if present) with its persisted arguments plus the requested operation, and returns whether the operation is blocked. If no handler exists, the operation is considered allowed (returns `false`).
@@ -37,4 +37,25 @@ export function ApiOperationFromModel(ModelConstructor, verb, path) {
37
37
  ? apply(ApiExcludeEndpoint())
38
38
  : apply(HttpMethodDecorator(path));
39
39
  }
40
+ /**
41
+ * @description Conditionally applies an HTTP method decorator for a given model and verb, hiding the endpoint in Swagger (and not registering the route) when the model blocks that CRUD operation.
42
+ * @summary Maps an HTTP verb to its corresponding `CrudOperations` key and Nest HTTP decorator (`@Get`, `@Post`, etc.). It checks `isOperationBlocked(ModelConstructor, crudOp)` and, if blocked, applies only `@ApiExcludeEndpoint()` (Swagger-hidden, no Nest route). If permitted, it applies the appropriate HTTP decorator with the optional `path`.
43
+ * @param {ModelConstructor<any>} ModelConstructor - The model constructor used to resolve operation-blocking rules.
44
+ * @param {HttpVerbs} verb - The HTTP verb to map (e.g., `"GET" | "POST" | "PUT" | "PATCH" | "DELETE"`).
45
+ * @param {string} [path] - Optional route path passed through to the corresponding Nest HTTP method decorator.
46
+ * @return {MethodDecorator} A method decorator that either excludes the endpoint from Swagger (and route registration) or applies the correct HTTP decorator.
47
+ */
48
+ export function BulkApiOperationFromModel(ModelConstructor, verb, path) {
49
+ const httpToCrud = {
50
+ GET: [BulkCrudOperationKeys.READ_ALL, Get],
51
+ POST: [BulkCrudOperationKeys.CREATE_ALL, Post],
52
+ PUT: [BulkCrudOperationKeys.UPDATE_ALL, Put],
53
+ PATCH: [BulkCrudOperationKeys.UPDATE_ALL, Patch],
54
+ DELETE: [BulkCrudOperationKeys.DELETE_ALL, Delete],
55
+ };
56
+ const [crudOp, HttpMethodDecorator] = httpToCrud[verb];
57
+ return isOperationBlocked(ModelConstructor, crudOp)
58
+ ? apply(ApiExcludeEndpoint())
59
+ : apply(HttpMethodDecorator(path));
60
+ }
40
61
  //# sourceMappingURL=ApiOperationFromModel.js.map