@decaf-ts/for-nest 0.1.7 → 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.
- package/README.md +1 -1
- package/dist/for-nest.cjs +1 -1
- package/dist/for-nest.cjs.map +1 -1
- package/dist/for-nest.js +1 -1
- package/dist/for-nest.js.map +1 -1
- package/lib/decaf-model/DecafModelModule.cjs +9 -4
- package/lib/decaf-model/DecafModelModule.d.ts +3 -3
- package/lib/decaf-model/DecafModelModule.js.map +1 -1
- package/lib/decaf-model/FromModelController.cjs +355 -53
- package/lib/decaf-model/FromModelController.d.ts +6 -2
- package/lib/decaf-model/FromModelController.js.map +1 -1
- package/lib/decaf-model/decorators/ApiOperationFromModel.cjs +22 -0
- package/lib/decaf-model/decorators/ApiOperationFromModel.d.ts +9 -0
- package/lib/decaf-model/decorators/ApiOperationFromModel.js.map +1 -1
- package/lib/decaf-model/decorators/ApiParamsFromModel.d.ts +2 -2
- package/lib/decaf-model/decorators/ApiParamsFromModel.js.map +1 -1
- package/lib/decaf-model/decorators/DecafParams.cjs +9 -1
- package/lib/decaf-model/decorators/DecafParams.d.ts +2 -2
- package/lib/decaf-model/decorators/DecafParams.js.map +1 -1
- package/lib/decaf-model/decorators/index.cjs +1 -0
- package/lib/decaf-model/decorators/index.d.ts +1 -0
- package/lib/decaf-model/decorators/index.js.map +1 -1
- package/lib/decaf-model/decorators/types.d.ts +5 -5
- package/lib/decaf-model/types.cjs +15 -0
- package/lib/decaf-model/types.d.ts +18 -0
- package/lib/decaf-model/types.js.map +1 -0
- package/lib/decaf-model/utils.cjs +67 -0
- package/lib/decaf-model/utils.d.ts +7 -0
- package/lib/decaf-model/utils.js.map +1 -0
- package/lib/esm/decaf-model/DecafModelModule.d.ts +3 -3
- package/lib/esm/decaf-model/DecafModelModule.js +9 -4
- package/lib/esm/decaf-model/DecafModelModule.js.map +1 -1
- package/lib/esm/decaf-model/FromModelController.d.ts +6 -2
- package/lib/esm/decaf-model/FromModelController.js +359 -57
- package/lib/esm/decaf-model/FromModelController.js.map +1 -1
- package/lib/esm/decaf-model/decorators/ApiOperationFromModel.d.ts +9 -0
- package/lib/esm/decaf-model/decorators/ApiOperationFromModel.js +22 -1
- package/lib/esm/decaf-model/decorators/ApiOperationFromModel.js.map +1 -1
- package/lib/esm/decaf-model/decorators/ApiParamsFromModel.d.ts +2 -2
- package/lib/esm/decaf-model/decorators/ApiParamsFromModel.js.map +1 -1
- package/lib/esm/decaf-model/decorators/DecafParams.d.ts +2 -2
- package/lib/esm/decaf-model/decorators/DecafParams.js +9 -1
- package/lib/esm/decaf-model/decorators/DecafParams.js.map +1 -1
- package/lib/esm/decaf-model/decorators/index.d.ts +1 -0
- package/lib/esm/decaf-model/decorators/index.js +1 -0
- package/lib/esm/decaf-model/decorators/index.js.map +1 -1
- package/lib/esm/decaf-model/decorators/types.d.ts +5 -5
- package/lib/esm/decaf-model/types.d.ts +18 -0
- package/lib/esm/decaf-model/types.js +11 -0
- package/lib/esm/decaf-model/types.js.map +1 -0
- package/lib/esm/decaf-model/utils.d.ts +7 -0
- package/lib/esm/decaf-model/utils.js +61 -0
- package/lib/esm/decaf-model/utils.js.map +1 -0
- package/lib/esm/factory/NestBootstraper.js +2 -10
- package/lib/esm/factory/NestBootstraper.js.map +1 -1
- package/lib/esm/factory/context.d.ts +0 -0
- package/lib/esm/factory/context.js +2 -0
- package/lib/esm/factory/context.js.map +1 -0
- package/lib/esm/factory/exceptions/DecafErrorFilter.d.ts +4 -0
- package/lib/esm/factory/exceptions/DecafErrorFilter.js +32 -0
- package/lib/esm/factory/exceptions/DecafErrorFilter.js.map +1 -0
- package/lib/esm/factory/exceptions/decorators.d.ts +1 -0
- package/lib/esm/factory/exceptions/decorators.js +6 -0
- package/lib/esm/factory/exceptions/decorators.js.map +1 -0
- package/lib/esm/factory/exceptions/index.d.ts +2 -7
- package/lib/esm/factory/exceptions/index.js +2 -7
- package/lib/esm/factory/exceptions/index.js.map +1 -1
- package/lib/esm/index.d.ts +1 -1
- package/lib/esm/index.js +1 -1
- package/lib/esm/interceptors/index.d.ts +1 -0
- package/lib/esm/interceptors/index.js +1 -0
- package/lib/esm/interceptors/index.js.map +1 -1
- package/lib/esm/module.js +5 -2
- package/lib/esm/module.js.map +1 -1
- package/lib/esm/types.d.ts +1 -0
- package/lib/factory/NestBootstraper.cjs +1 -9
- package/lib/factory/NestBootstraper.js.map +1 -1
- package/lib/factory/context.cjs +2 -0
- package/lib/factory/context.d.ts +0 -0
- package/lib/factory/context.js.map +1 -0
- package/lib/factory/exceptions/DecafErrorFilter.cjs +35 -0
- package/lib/factory/exceptions/DecafErrorFilter.d.ts +4 -0
- package/lib/factory/exceptions/DecafErrorFilter.js.map +1 -0
- package/lib/factory/exceptions/decorators.cjs +9 -0
- package/lib/factory/exceptions/decorators.d.ts +1 -0
- package/lib/factory/exceptions/decorators.js.map +1 -0
- package/lib/factory/exceptions/index.cjs +2 -7
- package/lib/factory/exceptions/index.d.ts +2 -7
- package/lib/factory/exceptions/index.js.map +1 -1
- package/lib/index.cjs +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/interceptors/index.cjs +1 -0
- package/lib/interceptors/index.d.ts +1 -0
- package/lib/interceptors/index.js.map +1 -1
- package/lib/module.cjs +5 -2
- package/lib/module.js.map +1 -1
- package/lib/types.d.ts +1 -0
- package/package.json +3 -3
- package/lib/esm/factory/exceptions/AuthorizationExceptionFilter.d.ts +0 -9
- package/lib/esm/factory/exceptions/AuthorizationExceptionFilter.js +0 -35
- package/lib/esm/factory/exceptions/AuthorizationExceptionFilter.js.map +0 -1
- package/lib/esm/factory/exceptions/ConflictExceptionFilter.d.ts +0 -9
- package/lib/esm/factory/exceptions/ConflictExceptionFilter.js +0 -35
- package/lib/esm/factory/exceptions/ConflictExceptionFilter.js.map +0 -1
- package/lib/esm/factory/exceptions/GlobalExceptionFilter.d.ts +0 -4
- package/lib/esm/factory/exceptions/GlobalExceptionFilter.js +0 -39
- package/lib/esm/factory/exceptions/GlobalExceptionFilter.js.map +0 -1
- package/lib/esm/factory/exceptions/HttpExceptionFilter.d.ts +0 -4
- package/lib/esm/factory/exceptions/HttpExceptionFilter.js +0 -27
- package/lib/esm/factory/exceptions/HttpExceptionFilter.js.map +0 -1
- package/lib/esm/factory/exceptions/HttpResponseError.d.ts +0 -13
- package/lib/esm/factory/exceptions/HttpResponseError.js +0 -21
- package/lib/esm/factory/exceptions/HttpResponseError.js.map +0 -1
- package/lib/esm/factory/exceptions/NotFoundExceptionFilter.d.ts +0 -9
- package/lib/esm/factory/exceptions/NotFoundExceptionFilter.js +0 -35
- package/lib/esm/factory/exceptions/NotFoundExceptionFilter.js.map +0 -1
- package/lib/esm/factory/exceptions/ValidationExceptionFilter.d.ts +0 -9
- package/lib/esm/factory/exceptions/ValidationExceptionFilter.js +0 -35
- package/lib/esm/factory/exceptions/ValidationExceptionFilter.js.map +0 -1
- package/lib/factory/exceptions/AuthorizationExceptionFilter.cjs +0 -39
- package/lib/factory/exceptions/AuthorizationExceptionFilter.d.ts +0 -9
- package/lib/factory/exceptions/AuthorizationExceptionFilter.js.map +0 -1
- package/lib/factory/exceptions/ConflictExceptionFilter.cjs +0 -39
- package/lib/factory/exceptions/ConflictExceptionFilter.d.ts +0 -9
- package/lib/factory/exceptions/ConflictExceptionFilter.js.map +0 -1
- package/lib/factory/exceptions/GlobalExceptionFilter.cjs +0 -42
- package/lib/factory/exceptions/GlobalExceptionFilter.d.ts +0 -4
- package/lib/factory/exceptions/GlobalExceptionFilter.js.map +0 -1
- package/lib/factory/exceptions/HttpExceptionFilter.cjs +0 -30
- package/lib/factory/exceptions/HttpExceptionFilter.d.ts +0 -4
- package/lib/factory/exceptions/HttpExceptionFilter.js.map +0 -1
- package/lib/factory/exceptions/HttpResponseError.cjs +0 -25
- package/lib/factory/exceptions/HttpResponseError.d.ts +0 -13
- package/lib/factory/exceptions/HttpResponseError.js.map +0 -1
- package/lib/factory/exceptions/NotFoundExceptionFilter.cjs +0 -39
- package/lib/factory/exceptions/NotFoundExceptionFilter.d.ts +0 -9
- package/lib/factory/exceptions/NotFoundExceptionFilter.js.map +0 -1
- package/lib/factory/exceptions/ValidationExceptionFilter.cjs +0 -39
- package/lib/factory/exceptions/ValidationExceptionFilter.d.ts +0 -9
- 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 {
|
|
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
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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.
|
|
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.
|
|
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
|
|
132
|
-
const log = this.log.for(this.
|
|
133
|
-
let
|
|
239
|
+
async updateAll(body) {
|
|
240
|
+
const log = this.log.for(this.updateAll);
|
|
241
|
+
let updated;
|
|
134
242
|
try {
|
|
135
|
-
log.
|
|
136
|
-
|
|
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(
|
|
247
|
+
log.error(e);
|
|
141
248
|
throw e;
|
|
142
249
|
}
|
|
143
|
-
|
|
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.
|
|
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
|
|
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.
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
219
|
-
|
|
220
|
-
|
|
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: `${
|
|
508
|
+
description: `${ModelConstr} record replaced successfully.`,
|
|
223
509
|
}),
|
|
224
510
|
ApiNotFoundResponse({
|
|
225
|
-
description: `No ${modelClazzName}
|
|
511
|
+
description: `No ${modelClazzName} record matches the provided identifier.`,
|
|
226
512
|
}),
|
|
227
|
-
|
|
513
|
+
ApiBadRequestResponse({ description: "Payload validation failed." }),
|
|
514
|
+
__param(0, Body()),
|
|
228
515
|
__metadata("design:type", Function),
|
|
229
|
-
__metadata("design:paramtypes", [
|
|
516
|
+
__metadata("design:paramtypes", [Array]),
|
|
230
517
|
__metadata("design:returntype", Promise)
|
|
231
|
-
], DynamicModelController.prototype, "
|
|
518
|
+
], DynamicModelController.prototype, "updateAll", null);
|
|
232
519
|
__decorate([
|
|
233
|
-
ApiOperationFromModel(
|
|
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(
|
|
527
|
+
schema: { $ref: getSchemaPath(ModelConstr) },
|
|
241
528
|
}),
|
|
242
529
|
ApiOkResponse({
|
|
243
|
-
description: `${
|
|
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(
|
|
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(
|
|
274
|
-
Auth(
|
|
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.
|
|
289
|
-
|
|
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
|