mongodb-dynamic-api 2.1.10 → 2.2.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.
- package/CHANGELOG.md +18 -0
- package/package.json +1 -1
- package/src/decorators/index.d.ts +1 -0
- package/src/decorators/index.js +1 -0
- package/src/decorators/validator-pipe.decorator.d.ts +3 -0
- package/src/decorators/validator-pipe.decorator.js +8 -0
- package/src/dynamic-api.module.d.ts +2 -2
- package/src/dynamic-api.module.js +26 -32
- package/src/helpers/schema.helper.js +2 -3
- package/src/interfaces/dynamic-api-controller-options.interface.d.ts +2 -0
- package/src/interfaces/dynamic-api-global-state.interface.d.ts +35 -3
- package/src/interfaces/dynamic-api-options.interface.d.ts +4 -2
- package/src/interfaces/dynamic-api-route-config.interface.d.ts +2 -0
- package/src/interfaces/dynamic-api-service-callback.interface.d.ts +28 -0
- package/src/interfaces/dynamic-api-service-callback.interface.js +2 -0
- package/src/interfaces/index.d.ts +1 -0
- package/src/interfaces/index.js +1 -0
- package/src/modules/auth/auth.helper.d.ts +4 -4
- package/src/modules/auth/auth.helper.js +6 -5
- package/src/modules/auth/auth.module.d.ts +1 -1
- package/src/modules/auth/auth.module.js +3 -3
- package/src/modules/auth/interfaces/auth-options.interface.d.ts +22 -14
- package/src/modules/auth/services/base-auth.service.d.ts +4 -3
- package/src/modules/auth/services/base-auth.service.js +16 -5
- package/src/routes/create-many/base-create-many.service.d.ts +2 -0
- package/src/routes/create-many/base-create-many.service.js +7 -2
- package/src/routes/create-many/create-many.helper.d.ts +2 -2
- package/src/routes/create-many/create-many.helper.js +3 -2
- package/src/routes/create-many/create-many.module.js +1 -1
- package/src/routes/create-one/base-create-one.service.d.ts +2 -0
- package/src/routes/create-one/base-create-one.service.js +3 -1
- package/src/routes/create-one/create-one.helper.d.ts +2 -2
- package/src/routes/create-one/create-one.helper.js +3 -2
- package/src/routes/create-one/create-one.module.js +1 -1
- package/src/routes/delete-many/delete-many.helper.js +2 -1
- package/src/routes/delete-one/delete-one.helper.js +2 -1
- package/src/routes/duplicate-many/base-duplicate-many.service.d.ts +2 -0
- package/src/routes/duplicate-many/base-duplicate-many.service.js +3 -1
- package/src/routes/duplicate-many/duplicate-many.helper.d.ts +2 -2
- package/src/routes/duplicate-many/duplicate-many.helper.js +4 -2
- package/src/routes/duplicate-many/duplicate-many.module.js +1 -1
- package/src/routes/duplicate-one/base-duplicate-one.service.d.ts +2 -0
- package/src/routes/duplicate-one/base-duplicate-one.service.js +3 -1
- package/src/routes/duplicate-one/duplicate-one.helper.d.ts +2 -2
- package/src/routes/duplicate-one/duplicate-one.helper.js +4 -2
- package/src/routes/duplicate-one/duplicate-one.module.js +1 -1
- package/src/routes/get-many/base-get-many.service.d.ts +2 -0
- package/src/routes/get-many/base-get-many.service.js +3 -0
- package/src/routes/get-many/get-many.helper.d.ts +2 -2
- package/src/routes/get-many/get-many.helper.js +4 -2
- package/src/routes/get-many/get-many.module.js +1 -1
- package/src/routes/get-one/base-get-one.service.d.ts +2 -0
- package/src/routes/get-one/base-get-one.service.js +3 -0
- package/src/routes/get-one/get-one.helper.d.ts +2 -2
- package/src/routes/get-one/get-one.helper.js +4 -2
- package/src/routes/get-one/get-one.module.js +1 -1
- package/src/routes/replace-one/base-replace-one.service.d.ts +2 -0
- package/src/routes/replace-one/base-replace-one.service.js +3 -1
- package/src/routes/replace-one/replace-one.helper.d.ts +2 -2
- package/src/routes/replace-one/replace-one.helper.js +4 -2
- package/src/routes/replace-one/replace-one.module.js +1 -1
- package/src/routes/update-many/base-update-many.service.d.ts +2 -0
- package/src/routes/update-many/base-update-many.service.js +3 -1
- package/src/routes/update-many/update-many.helper.d.ts +2 -2
- package/src/routes/update-many/update-many.helper.js +4 -2
- package/src/routes/update-many/update-many.module.js +1 -1
- package/src/routes/update-one/base-update-one.service.d.ts +2 -0
- package/src/routes/update-one/base-update-one.service.js +3 -1
- package/src/routes/update-one/update-one.helper.d.ts +2 -2
- package/src/routes/update-one/update-one.helper.js +4 -2
- package/src/routes/update-one/update-one.module.js +1 -1
- package/src/services/base/base.service.js +3 -1
- package/src/services/dynamic-api-global-state/dynamic-api-global-state.service.d.ts +30 -1
- package/src/services/dynamic-api-global-state/dynamic-api-global-state.service.js +37 -4
- package/src/version.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -17,6 +17,7 @@ const common_1 = require("@nestjs/common");
|
|
|
17
17
|
const mongoose_1 = require("@nestjs/mongoose");
|
|
18
18
|
const swagger_1 = require("@nestjs/swagger");
|
|
19
19
|
const mongoose_2 = require("mongoose");
|
|
20
|
+
const decorators_1 = require("../../decorators");
|
|
20
21
|
const dynamic_api_module_1 = require("../../dynamic-api.module");
|
|
21
22
|
const helpers_1 = require("../../helpers");
|
|
22
23
|
const base_update_many_service_1 = require("./base-update-many.service");
|
|
@@ -24,12 +25,13 @@ const update_many_controller_mixin_1 = require("./update-many-controller.mixin")
|
|
|
24
25
|
function provideServiceName(entityName, version) {
|
|
25
26
|
return `${(0, helpers_1.getNamePrefix)('UpdateMany', entityName, version)}Service`;
|
|
26
27
|
}
|
|
27
|
-
function createUpdateManyServiceProvider(entity, version) {
|
|
28
|
+
function createUpdateManyServiceProvider(entity, version, callback) {
|
|
28
29
|
let UpdateManyService = class UpdateManyService extends base_update_many_service_1.BaseUpdateManyService {
|
|
29
30
|
constructor(model) {
|
|
30
31
|
super(model);
|
|
31
32
|
this.model = model;
|
|
32
33
|
this.entity = entity;
|
|
34
|
+
this.callback = callback;
|
|
33
35
|
}
|
|
34
36
|
};
|
|
35
37
|
UpdateManyService = __decorate([
|
|
@@ -57,7 +59,7 @@ function createUpdateManyController(entity, controllerOptions, routeConfig, vers
|
|
|
57
59
|
UpdateManyController = __decorate([
|
|
58
60
|
(0, common_1.Controller)({ path, version }),
|
|
59
61
|
(0, swagger_1.ApiTags)(apiTag || entity.name),
|
|
60
|
-
(0,
|
|
62
|
+
(0, decorators_1.ValidatorPipe)(validationPipeOptions),
|
|
61
63
|
(0, common_1.UseInterceptors)(common_1.ClassSerializerInterceptor),
|
|
62
64
|
__param(0, (0, common_1.Inject)(provideServiceName(entity.name, version))),
|
|
63
65
|
__metadata("design:paramtypes", [Object])
|
|
@@ -13,7 +13,7 @@ const update_many_helper_1 = require("./update-many.helper");
|
|
|
13
13
|
let UpdateManyModule = UpdateManyModule_1 = class UpdateManyModule {
|
|
14
14
|
static forFeature(databaseModule, entity, controllerOptions, routeConfig, version, validationPipeOptions, extraProviders) {
|
|
15
15
|
const controller = (0, update_many_helper_1.createUpdateManyController)(entity, controllerOptions, routeConfig, version, validationPipeOptions);
|
|
16
|
-
const ServiceProvider = (0, update_many_helper_1.createUpdateManyServiceProvider)(entity, version);
|
|
16
|
+
const ServiceProvider = (0, update_many_helper_1.createUpdateManyServiceProvider)(entity, version, routeConfig.callback);
|
|
17
17
|
return {
|
|
18
18
|
module: UpdateManyModule_1,
|
|
19
19
|
imports: [databaseModule],
|
|
@@ -23,11 +23,13 @@
|
|
|
23
23
|
/// <reference types="mongoose/types/virtuals" />
|
|
24
24
|
/// <reference types="mongoose/types/inferschematype" />
|
|
25
25
|
import { Model } from 'mongoose';
|
|
26
|
+
import { DynamicApiServiceCallback } from '../../interfaces';
|
|
26
27
|
import { BaseEntity } from '../../models';
|
|
27
28
|
import { BaseService } from '../../services';
|
|
28
29
|
import { UpdateOneService } from './update-one-service.interface';
|
|
29
30
|
export declare abstract class BaseUpdateOneService<Entity extends BaseEntity> extends BaseService<Entity> implements UpdateOneService<Entity> {
|
|
30
31
|
protected readonly model: Model<Entity>;
|
|
32
|
+
protected readonly callback: DynamicApiServiceCallback<Entity> | undefined;
|
|
31
33
|
protected constructor(model: Model<Entity>);
|
|
32
34
|
updateOne(id: string, partial: Partial<Entity>): Promise<Entity>;
|
|
33
35
|
}
|
|
@@ -19,11 +19,13 @@ class BaseUpdateOneService extends services_1.BaseService {
|
|
|
19
19
|
if (!document) {
|
|
20
20
|
this.handleDocumentNotFound();
|
|
21
21
|
}
|
|
22
|
+
if (this.callback) {
|
|
23
|
+
await this.callback(document, this.model);
|
|
24
|
+
}
|
|
22
25
|
return this.buildInstance(document);
|
|
23
26
|
}
|
|
24
27
|
catch (error) {
|
|
25
28
|
this.handleDuplicateKeyError(error);
|
|
26
|
-
throw error;
|
|
27
29
|
}
|
|
28
30
|
}
|
|
29
31
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Type, ValidationPipeOptions } from '@nestjs/common';
|
|
2
|
-
import { DynamicApiControllerOptions, DynamicAPIRouteConfig, DynamicAPIServiceProvider } from '../../interfaces';
|
|
2
|
+
import { DynamicApiControllerOptions, DynamicAPIRouteConfig, DynamicApiServiceCallback, DynamicAPIServiceProvider } from '../../interfaces';
|
|
3
3
|
import { BaseEntity } from '../../models';
|
|
4
4
|
import { UpdateOneControllerConstructor } from './update-one-controller.interface';
|
|
5
|
-
declare function createUpdateOneServiceProvider<Entity extends BaseEntity>(entity: Type<Entity>, version: string | undefined): DynamicAPIServiceProvider;
|
|
5
|
+
declare function createUpdateOneServiceProvider<Entity extends BaseEntity>(entity: Type<Entity>, version: string | undefined, callback: DynamicApiServiceCallback<Entity> | undefined): DynamicAPIServiceProvider;
|
|
6
6
|
declare function createUpdateOneController<Entity extends BaseEntity>(entity: Type<Entity>, controllerOptions: DynamicApiControllerOptions<Entity>, routeConfig: DynamicAPIRouteConfig<Entity>, version?: string, validationPipeOptions?: ValidationPipeOptions): UpdateOneControllerConstructor<Entity>;
|
|
7
7
|
export { createUpdateOneController, createUpdateOneServiceProvider };
|
|
@@ -17,6 +17,7 @@ const common_1 = require("@nestjs/common");
|
|
|
17
17
|
const mongoose_1 = require("@nestjs/mongoose");
|
|
18
18
|
const swagger_1 = require("@nestjs/swagger");
|
|
19
19
|
const mongoose_2 = require("mongoose");
|
|
20
|
+
const decorators_1 = require("../../decorators");
|
|
20
21
|
const dynamic_api_module_1 = require("../../dynamic-api.module");
|
|
21
22
|
const helpers_1 = require("../../helpers");
|
|
22
23
|
const base_update_one_service_1 = require("./base-update-one.service");
|
|
@@ -24,12 +25,13 @@ const update_one_controller_mixin_1 = require("./update-one-controller.mixin");
|
|
|
24
25
|
function provideServiceName(entityName, version) {
|
|
25
26
|
return `${(0, helpers_1.getNamePrefix)('UpdateOne', entityName, version)}Service`;
|
|
26
27
|
}
|
|
27
|
-
function createUpdateOneServiceProvider(entity, version) {
|
|
28
|
+
function createUpdateOneServiceProvider(entity, version, callback) {
|
|
28
29
|
let UpdateOneService = class UpdateOneService extends base_update_one_service_1.BaseUpdateOneService {
|
|
29
30
|
constructor(model) {
|
|
30
31
|
super(model);
|
|
31
32
|
this.model = model;
|
|
32
33
|
this.entity = entity;
|
|
34
|
+
this.callback = callback;
|
|
33
35
|
}
|
|
34
36
|
};
|
|
35
37
|
UpdateOneService = __decorate([
|
|
@@ -57,7 +59,7 @@ function createUpdateOneController(entity, controllerOptions, routeConfig, versi
|
|
|
57
59
|
UpdateOneController = __decorate([
|
|
58
60
|
(0, common_1.Controller)({ path, version }),
|
|
59
61
|
(0, swagger_1.ApiTags)(apiTag || entity.name),
|
|
60
|
-
(0,
|
|
62
|
+
(0, decorators_1.ValidatorPipe)(validationPipeOptions),
|
|
61
63
|
(0, common_1.UseInterceptors)(common_1.ClassSerializerInterceptor),
|
|
62
64
|
__param(0, (0, common_1.Inject)(provideServiceName(entity.name, version))),
|
|
63
65
|
__metadata("design:paramtypes", [Object])
|
|
@@ -13,7 +13,7 @@ const update_one_helper_1 = require("./update-one.helper");
|
|
|
13
13
|
let UpdateOneModule = UpdateOneModule_1 = class UpdateOneModule {
|
|
14
14
|
static forFeature(databaseModule, entity, controllerOptions, routeConfig, version, validationPipeOptions, extraProviders) {
|
|
15
15
|
const controller = (0, update_one_helper_1.createUpdateOneController)(entity, controllerOptions, routeConfig, version, validationPipeOptions);
|
|
16
|
-
const ServiceProvider = (0, update_one_helper_1.createUpdateOneServiceProvider)(entity, version);
|
|
16
|
+
const ServiceProvider = (0, update_one_helper_1.createUpdateOneServiceProvider)(entity, version, routeConfig.callback);
|
|
17
17
|
return {
|
|
18
18
|
module: UpdateOneModule_1,
|
|
19
19
|
imports: [databaseModule],
|
|
@@ -8,7 +8,8 @@ class BaseService {
|
|
|
8
8
|
this.model = model;
|
|
9
9
|
}
|
|
10
10
|
get isSoftDeletable() {
|
|
11
|
-
|
|
11
|
+
const paths = Object.getOwnPropertyNames(this.model.schema.paths);
|
|
12
|
+
return paths.includes('deletedAt') && paths.includes('isDeleted');
|
|
12
13
|
}
|
|
13
14
|
async findManyDocuments(conditions = {}) {
|
|
14
15
|
const documents = await this.model
|
|
@@ -57,6 +58,7 @@ class BaseService {
|
|
|
57
58
|
? `${properties[0]} is already used`
|
|
58
59
|
: `The combination of ${properties.join(', ')} already exists`);
|
|
59
60
|
}
|
|
61
|
+
throw new common_1.ServiceUnavailableException(error.message);
|
|
60
62
|
}
|
|
61
63
|
handleDocumentNotFound() {
|
|
62
64
|
throw new common_1.NotFoundException('Document not found');
|
|
@@ -1,10 +1,39 @@
|
|
|
1
|
+
/// <reference types="mongoose/types/aggregate" />
|
|
2
|
+
/// <reference types="mongoose/types/callback" />
|
|
3
|
+
/// <reference types="mongoose/types/collection" />
|
|
4
|
+
/// <reference types="mongoose/types/connection" />
|
|
5
|
+
/// <reference types="mongoose/types/cursor" />
|
|
6
|
+
/// <reference types="mongoose/types/document" />
|
|
7
|
+
/// <reference types="mongoose/types/error" />
|
|
8
|
+
/// <reference types="mongoose/types/expressions" />
|
|
9
|
+
/// <reference types="mongoose/types/helpers" />
|
|
10
|
+
/// <reference types="mongoose/types/middlewares" />
|
|
11
|
+
/// <reference types="mongoose/types/indexes" />
|
|
12
|
+
/// <reference types="mongoose/types/models" />
|
|
13
|
+
/// <reference types="mongoose/types/mongooseoptions" />
|
|
14
|
+
/// <reference types="mongoose/types/pipelinestage" />
|
|
15
|
+
/// <reference types="mongoose/types/populate" />
|
|
16
|
+
/// <reference types="mongoose/types/query" />
|
|
17
|
+
/// <reference types="mongoose/types/schemaoptions" />
|
|
18
|
+
/// <reference types="mongoose/types/schematypes" />
|
|
19
|
+
/// <reference types="mongoose/types/session" />
|
|
20
|
+
/// <reference types="mongoose/types/types" />
|
|
21
|
+
/// <reference types="mongoose/types/utility" />
|
|
22
|
+
/// <reference types="mongoose/types/validation" />
|
|
23
|
+
/// <reference types="mongoose/types/virtuals" />
|
|
24
|
+
/// <reference types="mongoose/types/inferschematype" />
|
|
25
|
+
import { Schema } from 'mongoose';
|
|
1
26
|
import { BehaviorSubject } from 'rxjs';
|
|
2
27
|
import { DynamicApiGlobalState } from '../../interfaces';
|
|
3
28
|
export declare class DynamicApiGlobalStateService {
|
|
4
|
-
private static initialized$;
|
|
29
|
+
private static readonly initialized$;
|
|
30
|
+
private static readonly entitySchemas$;
|
|
5
31
|
private _;
|
|
32
|
+
private readonly defaultGlobalState;
|
|
6
33
|
constructor(initialGlobalState?: Partial<DynamicApiGlobalState>);
|
|
7
34
|
static onInitialized(): BehaviorSubject<boolean>;
|
|
35
|
+
static addEntitySchema<T = any>(name: string, schema: Schema<T>): void;
|
|
36
|
+
static getEntitySchema<T = any>(name: string): Schema<T, import("mongoose").Model<T, any, any, any, import("mongoose").IfAny<T, any, import("mongoose").Document<unknown, any, T> & import("mongoose").Require_id<T>>, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, import("mongoose").ObtainDocumentType<any, T, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>>, import("mongoose").IfAny<import("mongoose").FlatRecord<import("mongoose").ObtainDocumentType<any, T, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>>>, any, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<import("mongoose").ObtainDocumentType<any, T, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>>>> & import("mongoose").Require_id<import("mongoose").FlatRecord<import("mongoose").ObtainDocumentType<any, T, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>>>>>>;
|
|
8
37
|
set<V>([target, value]: ([keyof DynamicApiGlobalState, value: V] | ['partial', Partial<DynamicApiGlobalState>])): void;
|
|
9
38
|
get<T = DynamicApiGlobalState>(key?: keyof DynamicApiGlobalState): T;
|
|
10
39
|
private updateState;
|
|
@@ -4,16 +4,48 @@ exports.DynamicApiGlobalStateService = void 0;
|
|
|
4
4
|
const rxjs_1 = require("rxjs");
|
|
5
5
|
class DynamicApiGlobalStateService {
|
|
6
6
|
constructor(initialGlobalState) {
|
|
7
|
-
this._ = {
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
this._ = {};
|
|
8
|
+
this.defaultGlobalState = {
|
|
9
|
+
connectionName: 'dynamic-api-connection',
|
|
10
|
+
isGlobalCacheEnabled: true,
|
|
11
|
+
isAuthEnabled: false,
|
|
12
|
+
credentials: null,
|
|
13
|
+
jwtSecret: undefined,
|
|
14
|
+
cacheExcludedPaths: [],
|
|
15
|
+
routesConfig: {
|
|
16
|
+
excluded: [],
|
|
17
|
+
defaults: [
|
|
18
|
+
'GetMany',
|
|
19
|
+
'GetOne',
|
|
20
|
+
'CreateMany',
|
|
21
|
+
'CreateOne',
|
|
22
|
+
'UpdateMany',
|
|
23
|
+
'UpdateOne',
|
|
24
|
+
'ReplaceOne',
|
|
25
|
+
'DuplicateMany',
|
|
26
|
+
'DuplicateOne',
|
|
27
|
+
'DeleteMany',
|
|
28
|
+
'DeleteOne',
|
|
29
|
+
],
|
|
10
30
|
},
|
|
11
31
|
};
|
|
12
|
-
Object.assign(this._, initialGlobalState);
|
|
32
|
+
Object.assign(this._, this.defaultGlobalState, initialGlobalState);
|
|
13
33
|
}
|
|
14
34
|
static onInitialized() {
|
|
15
35
|
return this.initialized$;
|
|
16
36
|
}
|
|
37
|
+
static addEntitySchema(name, schema) {
|
|
38
|
+
const entitySchemas = this.entitySchemas$.value;
|
|
39
|
+
entitySchemas[name] = schema;
|
|
40
|
+
this.entitySchemas$.next(entitySchemas);
|
|
41
|
+
}
|
|
42
|
+
static getEntitySchema(name) {
|
|
43
|
+
const schema = this.entitySchemas$.value[name];
|
|
44
|
+
if (!schema) {
|
|
45
|
+
throw new Error(`Entity schema for "${name}" not found`);
|
|
46
|
+
}
|
|
47
|
+
return schema;
|
|
48
|
+
}
|
|
17
49
|
set([target, value]) {
|
|
18
50
|
if (target === 'partial') {
|
|
19
51
|
Object.assign(this._, value);
|
|
@@ -34,3 +66,4 @@ class DynamicApiGlobalStateService {
|
|
|
34
66
|
}
|
|
35
67
|
exports.DynamicApiGlobalStateService = DynamicApiGlobalStateService;
|
|
36
68
|
DynamicApiGlobalStateService.initialized$ = new rxjs_1.BehaviorSubject(false);
|
|
69
|
+
DynamicApiGlobalStateService.entitySchemas$ = new rxjs_1.BehaviorSubject({});
|
package/src/version.json
CHANGED