@flusys/nestjs-event-manager 7.0.2 → 8.0.0-beta.1
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/adapters/event-manager.adapter.d.ts +2 -2
- package/adapters/index.d.ts +1 -1
- package/config/index.d.ts +3 -3
- package/controllers/event.controller.d.ts +3 -3
- package/controllers/index.d.ts +1 -1
- package/docs/event-manager-swagger.config.d.ts +2 -2
- package/docs/index.d.ts +1 -1
- package/dtos/calendar-query.dto.d.ts +1 -1
- package/dtos/event.dto.d.ts +1 -1
- package/dtos/index.d.ts +3 -3
- package/entities/event-with-company.entity.d.ts +1 -1
- package/entities/index.d.ts +8 -8
- package/fesm/477.js +1798 -0
- package/fesm/833.js +840 -0
- package/fesm/adapters/index.js +884 -1
- package/fesm/config/index.js +87 -3
- package/fesm/controllers/index.js +365 -1
- package/fesm/docs/index.js +155 -2
- package/fesm/dtos/index.js +720 -3
- package/fesm/entities/index.js +350 -11
- package/fesm/index.js +121 -9
- package/fesm/interfaces/index.js +16 -2
- package/fesm/modules/index.js +13 -1
- package/fesm/runtime.js +85 -0
- package/fesm/services/index.js +272 -4
- package/index.d.ts +9 -9
- package/interfaces/event-manager-module.interface.d.ts +3 -3
- package/interfaces/event.interface.d.ts +1 -1
- package/interfaces/index.d.ts +2 -2
- package/modules/event-manager.module.d.ts +2 -2
- package/modules/index.d.ts +1 -1
- package/package.json +29 -39
- package/services/event-manager-config.service.d.ts +3 -3
- package/services/event-manager-datasource.provider.d.ts +3 -3
- package/services/event-manager-helper.service.d.ts +3 -3
- package/services/event.service.d.ts +7 -7
- package/services/index.d.ts +4 -4
- package/cjs/adapters/event-manager.adapter.js +0 -65
- package/cjs/adapters/event-manager.adapter.spec.js +0 -104
- package/cjs/adapters/index.js +0 -18
- package/cjs/config/event-actions.js +0 -31
- package/cjs/config/event-manager.constants.js +0 -13
- package/cjs/config/index.js +0 -20
- package/cjs/config/message-keys.js +0 -27
- package/cjs/controllers/event.controller.js +0 -190
- package/cjs/controllers/event.controller.spec.js +0 -156
- package/cjs/controllers/index.js +0 -18
- package/cjs/docs/event-manager-swagger.config.js +0 -125
- package/cjs/docs/event-manager-swagger.config.spec.js +0 -65
- package/cjs/docs/index.js +0 -21
- package/cjs/dtos/calendar-query.dto.js +0 -212
- package/cjs/dtos/event-participant.dto.js +0 -181
- package/cjs/dtos/event.dto.js +0 -343
- package/cjs/dtos/index.js +0 -20
- package/cjs/entities/event-participant.entity.js +0 -89
- package/cjs/entities/event-with-company.entity.js +0 -56
- package/cjs/entities/event.entity.js +0 -156
- package/cjs/entities/index.js +0 -55
- package/cjs/entities/index.spec.js +0 -18
- package/cjs/index.js +0 -27
- package/cjs/interfaces/event-manager-module.interface.js +0 -4
- package/cjs/interfaces/event.interface.js +0 -4
- package/cjs/interfaces/index.js +0 -19
- package/cjs/modules/event-manager.module.js +0 -132
- package/cjs/modules/event-manager.module.spec.js +0 -146
- package/cjs/modules/index.js +0 -18
- package/cjs/services/event-manager-config.service.js +0 -76
- package/cjs/services/event-manager-config.service.spec.js +0 -111
- package/cjs/services/event-manager-datasource.provider.js +0 -84
- package/cjs/services/event-manager-datasource.provider.spec.js +0 -198
- package/cjs/services/event-manager-helper.service.js +0 -235
- package/cjs/services/event-manager-helper.service.spec.js +0 -327
- package/cjs/services/event.service.js +0 -481
- package/cjs/services/event.service.spec.js +0 -929
- package/cjs/services/index.js +0 -21
- package/fesm/adapters/event-manager.adapter.js +0 -55
- package/fesm/adapters/event-manager.adapter.spec.js +0 -100
- package/fesm/config/event-actions.js +0 -10
- package/fesm/config/event-manager.constants.js +0 -3
- package/fesm/config/message-keys.js +0 -9
- package/fesm/controllers/event.controller.js +0 -180
- package/fesm/controllers/event.controller.spec.js +0 -152
- package/fesm/docs/event-manager-swagger.config.js +0 -118
- package/fesm/docs/event-manager-swagger.config.spec.js +0 -61
- package/fesm/dtos/calendar-query.dto.js +0 -194
- package/fesm/dtos/event-participant.dto.js +0 -157
- package/fesm/dtos/event.dto.js +0 -322
- package/fesm/entities/event-participant.entity.js +0 -79
- package/fesm/entities/event-with-company.entity.js +0 -46
- package/fesm/entities/event.entity.js +0 -146
- package/fesm/entities/index.spec.js +0 -14
- package/fesm/interfaces/event-manager-module.interface.js +0 -3
- package/fesm/interfaces/event.interface.js +0 -1
- package/fesm/modules/event-manager.module.js +0 -122
- package/fesm/modules/event-manager.module.spec.js +0 -142
- package/fesm/services/event-manager-config.service.js +0 -66
- package/fesm/services/event-manager-config.service.spec.js +0 -107
- package/fesm/services/event-manager-datasource.provider.js +0 -74
- package/fesm/services/event-manager-datasource.provider.spec.js +0 -194
- package/fesm/services/event-manager-helper.service.js +0 -225
- package/fesm/services/event-manager-helper.service.spec.js +0 -323
- package/fesm/services/event.service.js +0 -471
- package/fesm/services/event.service.spec.js +0 -925
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
function _ts_decorate(decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
}
|
|
7
|
-
import { CacheModule, UtilsModule, createModuleEventsProvider } from '@flusys/nestjs-shared/modules';
|
|
8
|
-
import { EVENT_MANAGER_ADAPTER } from '@flusys/nestjs-shared/interfaces';
|
|
9
|
-
import { Module } from '@nestjs/common';
|
|
10
|
-
import { EVENT_MANAGER_MODULE_OPTIONS } from '../config/event-manager.constants';
|
|
11
|
-
import { EventController } from '../controllers';
|
|
12
|
-
import { EventManagerAdapter } from '../adapters';
|
|
13
|
-
import { EventManagerConfigService, EventManagerDataSourceProvider, EventManagerHelperService, EventService } from '../services';
|
|
14
|
-
const CONTROLLERS = [
|
|
15
|
-
EventController
|
|
16
|
-
];
|
|
17
|
-
const EXPORTED_SERVICES = [
|
|
18
|
-
EventManagerConfigService,
|
|
19
|
-
EventManagerDataSourceProvider,
|
|
20
|
-
EventManagerHelperService,
|
|
21
|
-
EventService
|
|
22
|
-
];
|
|
23
|
-
const ADAPTER_PROVIDER = {
|
|
24
|
-
provide: EVENT_MANAGER_ADAPTER,
|
|
25
|
-
useClass: EventManagerAdapter
|
|
26
|
-
};
|
|
27
|
-
export class EventManagerModule {
|
|
28
|
-
static forRoot(options) {
|
|
29
|
-
return {
|
|
30
|
-
module: EventManagerModule,
|
|
31
|
-
global: options.global ?? false,
|
|
32
|
-
imports: [
|
|
33
|
-
CacheModule,
|
|
34
|
-
UtilsModule
|
|
35
|
-
],
|
|
36
|
-
controllers: options.includeController !== false ? CONTROLLERS : [],
|
|
37
|
-
providers: [
|
|
38
|
-
...this.buildProviders(options),
|
|
39
|
-
EventManagerAdapter,
|
|
40
|
-
ADAPTER_PROVIDER
|
|
41
|
-
],
|
|
42
|
-
exports: [
|
|
43
|
-
...EXPORTED_SERVICES,
|
|
44
|
-
EVENT_MANAGER_ADAPTER
|
|
45
|
-
]
|
|
46
|
-
};
|
|
47
|
-
}
|
|
48
|
-
static forRootAsync(options) {
|
|
49
|
-
return {
|
|
50
|
-
module: EventManagerModule,
|
|
51
|
-
global: options.global ?? false,
|
|
52
|
-
imports: [
|
|
53
|
-
...options.imports || [],
|
|
54
|
-
CacheModule,
|
|
55
|
-
UtilsModule
|
|
56
|
-
],
|
|
57
|
-
controllers: options.includeController !== false ? CONTROLLERS : [],
|
|
58
|
-
providers: [
|
|
59
|
-
...this.createAsyncProviders(options),
|
|
60
|
-
...this.buildProviders(),
|
|
61
|
-
EventManagerAdapter,
|
|
62
|
-
ADAPTER_PROVIDER
|
|
63
|
-
],
|
|
64
|
-
exports: [
|
|
65
|
-
...EXPORTED_SERVICES,
|
|
66
|
-
EVENT_MANAGER_ADAPTER
|
|
67
|
-
]
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
|
-
// Private Helpers
|
|
71
|
-
static buildProviders(options) {
|
|
72
|
-
const providers = [
|
|
73
|
-
...EXPORTED_SERVICES
|
|
74
|
-
];
|
|
75
|
-
if (options) {
|
|
76
|
-
providers.unshift({
|
|
77
|
-
provide: EVENT_MANAGER_MODULE_OPTIONS,
|
|
78
|
-
useValue: options
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
providers.push(createModuleEventsProvider('event-manager', EVENT_MANAGER_MODULE_OPTIONS));
|
|
82
|
-
return providers;
|
|
83
|
-
}
|
|
84
|
-
static createAsyncProviders(options) {
|
|
85
|
-
if (options.useFactory) {
|
|
86
|
-
return [
|
|
87
|
-
{
|
|
88
|
-
provide: EVENT_MANAGER_MODULE_OPTIONS,
|
|
89
|
-
useFactory: async (...args)=>({
|
|
90
|
-
...options,
|
|
91
|
-
config: await options.useFactory(...args)
|
|
92
|
-
}),
|
|
93
|
-
inject: options.inject || []
|
|
94
|
-
}
|
|
95
|
-
];
|
|
96
|
-
}
|
|
97
|
-
const factoryClass = options.useClass || options.useExisting;
|
|
98
|
-
if (!factoryClass) return [];
|
|
99
|
-
const providers = [
|
|
100
|
-
{
|
|
101
|
-
provide: EVENT_MANAGER_MODULE_OPTIONS,
|
|
102
|
-
useFactory: async (factory)=>({
|
|
103
|
-
...options,
|
|
104
|
-
config: await factory.createEventManagerOptions()
|
|
105
|
-
}),
|
|
106
|
-
inject: [
|
|
107
|
-
factoryClass
|
|
108
|
-
]
|
|
109
|
-
}
|
|
110
|
-
];
|
|
111
|
-
if (options.useClass) {
|
|
112
|
-
providers.push({
|
|
113
|
-
provide: options.useClass,
|
|
114
|
-
useClass: options.useClass
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
return providers;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
EventManagerModule = _ts_decorate([
|
|
121
|
-
Module({})
|
|
122
|
-
], EventManagerModule);
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
function _define_property(obj, key, value) {
|
|
2
|
-
if (key in obj) {
|
|
3
|
-
Object.defineProperty(obj, key, {
|
|
4
|
-
value: value,
|
|
5
|
-
enumerable: true,
|
|
6
|
-
configurable: true,
|
|
7
|
-
writable: true
|
|
8
|
-
});
|
|
9
|
-
} else {
|
|
10
|
-
obj[key] = value;
|
|
11
|
-
}
|
|
12
|
-
return obj;
|
|
13
|
-
}
|
|
14
|
-
import { EVENT_MANAGER_ADAPTER } from '@flusys/nestjs-shared/interfaces';
|
|
15
|
-
import { EventManagerModule } from './event-manager.module';
|
|
16
|
-
import { EVENT_MANAGER_MODULE_OPTIONS } from '../config/event-manager.constants';
|
|
17
|
-
import { EventController } from '../controllers';
|
|
18
|
-
import { EventManagerAdapter } from '../adapters';
|
|
19
|
-
function providerTokens(providers) {
|
|
20
|
-
return providers.map((p)=>typeof p === 'function' ? p : p.provide);
|
|
21
|
-
}
|
|
22
|
-
describe('EventManagerModule', ()=>{
|
|
23
|
-
describe('forRoot', ()=>{
|
|
24
|
-
it('should default to a non-global module with the event controller registered', ()=>{
|
|
25
|
-
const dynamicModule = EventManagerModule.forRoot({});
|
|
26
|
-
expect(dynamicModule.module).toBe(EventManagerModule);
|
|
27
|
-
expect(dynamicModule.global).toBe(false);
|
|
28
|
-
expect(dynamicModule.controllers).toEqual([
|
|
29
|
-
EventController
|
|
30
|
-
]);
|
|
31
|
-
});
|
|
32
|
-
it('should respect global: true', ()=>{
|
|
33
|
-
expect(EventManagerModule.forRoot({
|
|
34
|
-
global: true
|
|
35
|
-
}).global).toBe(true);
|
|
36
|
-
});
|
|
37
|
-
it('should register no controllers when includeController is false', ()=>{
|
|
38
|
-
expect(EventManagerModule.forRoot({
|
|
39
|
-
includeController: false
|
|
40
|
-
}).controllers).toEqual([]);
|
|
41
|
-
});
|
|
42
|
-
it('should register the EVENT_MANAGER_ADAPTER provider backed by EventManagerAdapter', ()=>{
|
|
43
|
-
const dynamicModule = EventManagerModule.forRoot({});
|
|
44
|
-
const adapterProvider = dynamicModule.providers.find((p)=>p.provide === EVENT_MANAGER_ADAPTER);
|
|
45
|
-
expect(adapterProvider.useClass).toBe(EventManagerAdapter);
|
|
46
|
-
});
|
|
47
|
-
it('should export EVENT_MANAGER_ADAPTER alongside the base services', ()=>{
|
|
48
|
-
expect(EventManagerModule.forRoot({}).exports).toContain(EVENT_MANAGER_ADAPTER);
|
|
49
|
-
});
|
|
50
|
-
it('should register an EVENT_MANAGER_MODULE_OPTIONS provider carrying the given options', ()=>{
|
|
51
|
-
const options = {
|
|
52
|
-
bootstrapAppConfig: {
|
|
53
|
-
enableCompanyFeature: true
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
const dynamicModule = EventManagerModule.forRoot(options);
|
|
57
|
-
const provider = dynamicModule.providers.find((p)=>p.provide === EVENT_MANAGER_MODULE_OPTIONS);
|
|
58
|
-
expect(provider.useValue).toBe(options);
|
|
59
|
-
});
|
|
60
|
-
});
|
|
61
|
-
describe('forRootAsync', ()=>{
|
|
62
|
-
it('should forward external imports alongside CacheModule/UtilsModule', ()=>{
|
|
63
|
-
let FakeImportedModule = class FakeImportedModule {
|
|
64
|
-
};
|
|
65
|
-
const dynamicModule = EventManagerModule.forRootAsync({
|
|
66
|
-
imports: [
|
|
67
|
-
FakeImportedModule
|
|
68
|
-
]
|
|
69
|
-
});
|
|
70
|
-
expect(dynamicModule.imports).toEqual(expect.arrayContaining([
|
|
71
|
-
FakeImportedModule
|
|
72
|
-
]));
|
|
73
|
-
});
|
|
74
|
-
it('should still wire the adapter provider when using async registration', ()=>{
|
|
75
|
-
const dynamicModule = EventManagerModule.forRootAsync({
|
|
76
|
-
useFactory: jest.fn()
|
|
77
|
-
});
|
|
78
|
-
const adapterProvider = dynamicModule.providers.find((p)=>p.provide === EVENT_MANAGER_ADAPTER);
|
|
79
|
-
expect(adapterProvider.useClass).toBe(EventManagerAdapter);
|
|
80
|
-
});
|
|
81
|
-
it('useFactory: builds an EVENT_MANAGER_MODULE_OPTIONS provider merging resolved config', async ()=>{
|
|
82
|
-
const useFactory = jest.fn().mockResolvedValue({
|
|
83
|
-
foo: 'bar'
|
|
84
|
-
});
|
|
85
|
-
const dynamicModule = EventManagerModule.forRootAsync({
|
|
86
|
-
useFactory,
|
|
87
|
-
inject: [
|
|
88
|
-
'SOME_TOKEN'
|
|
89
|
-
]
|
|
90
|
-
});
|
|
91
|
-
const provider = dynamicModule.providers.find((p)=>p.provide === EVENT_MANAGER_MODULE_OPTIONS);
|
|
92
|
-
expect(provider.inject).toEqual([
|
|
93
|
-
'SOME_TOKEN'
|
|
94
|
-
]);
|
|
95
|
-
const resolved = await provider.useFactory('injected');
|
|
96
|
-
expect(useFactory).toHaveBeenCalledWith('injected');
|
|
97
|
-
expect(resolved.config).toEqual({
|
|
98
|
-
foo: 'bar'
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
it('useClass: registers both the class provider and an options provider calling createEventManagerOptions()', async ()=>{
|
|
102
|
-
let MyOptionsFactory = class MyOptionsFactory {
|
|
103
|
-
constructor(){
|
|
104
|
-
_define_property(this, "createEventManagerOptions", jest.fn().mockResolvedValue({
|
|
105
|
-
foo: 'from-class'
|
|
106
|
-
}));
|
|
107
|
-
}
|
|
108
|
-
};
|
|
109
|
-
const dynamicModule = EventManagerModule.forRootAsync({
|
|
110
|
-
useClass: MyOptionsFactory
|
|
111
|
-
});
|
|
112
|
-
const classProvider = dynamicModule.providers.find((p)=>p.provide === MyOptionsFactory);
|
|
113
|
-
expect(classProvider.useClass).toBe(MyOptionsFactory);
|
|
114
|
-
const optionsProvider = dynamicModule.providers.find((p)=>p.provide === EVENT_MANAGER_MODULE_OPTIONS);
|
|
115
|
-
const instance = new MyOptionsFactory();
|
|
116
|
-
const resolved = await optionsProvider.useFactory(instance);
|
|
117
|
-
expect(instance.createEventManagerOptions).toHaveBeenCalled();
|
|
118
|
-
expect(resolved.config).toEqual({
|
|
119
|
-
foo: 'from-class'
|
|
120
|
-
});
|
|
121
|
-
});
|
|
122
|
-
it('useExisting: registers a single options provider without a duplicate class registration', ()=>{
|
|
123
|
-
let MyOptionsFactory = class MyOptionsFactory {
|
|
124
|
-
constructor(){
|
|
125
|
-
_define_property(this, "createEventManagerOptions", jest.fn());
|
|
126
|
-
}
|
|
127
|
-
};
|
|
128
|
-
const dynamicModule = EventManagerModule.forRootAsync({
|
|
129
|
-
useExisting: MyOptionsFactory
|
|
130
|
-
});
|
|
131
|
-
expect(dynamicModule.providers.filter((p)=>p.provide === MyOptionsFactory)).toHaveLength(0);
|
|
132
|
-
const optionsProvider = dynamicModule.providers.find((p)=>p.provide === EVENT_MANAGER_MODULE_OPTIONS);
|
|
133
|
-
expect(optionsProvider.inject).toEqual([
|
|
134
|
-
MyOptionsFactory
|
|
135
|
-
]);
|
|
136
|
-
});
|
|
137
|
-
it('should register no EVENT_MANAGER_MODULE_OPTIONS provider when neither useFactory, useClass, nor useExisting is given', ()=>{
|
|
138
|
-
const dynamicModule = EventManagerModule.forRootAsync({});
|
|
139
|
-
expect(providerTokens(dynamicModule.providers)).not.toContain(EVENT_MANAGER_MODULE_OPTIONS);
|
|
140
|
-
});
|
|
141
|
-
});
|
|
142
|
-
});
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
function _define_property(obj, key, value) {
|
|
2
|
-
if (key in obj) {
|
|
3
|
-
Object.defineProperty(obj, key, {
|
|
4
|
-
value: value,
|
|
5
|
-
enumerable: true,
|
|
6
|
-
configurable: true,
|
|
7
|
-
writable: true
|
|
8
|
-
});
|
|
9
|
-
} else {
|
|
10
|
-
obj[key] = value;
|
|
11
|
-
}
|
|
12
|
-
return obj;
|
|
13
|
-
}
|
|
14
|
-
function _ts_decorate(decorators, target, key, desc) {
|
|
15
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
16
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
17
|
-
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
18
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
19
|
-
}
|
|
20
|
-
function _ts_metadata(k, v) {
|
|
21
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
22
|
-
}
|
|
23
|
-
function _ts_param(paramIndex, decorator) {
|
|
24
|
-
return function(target, key) {
|
|
25
|
-
decorator(target, key, paramIndex);
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
import { Inject, Injectable } from '@nestjs/common';
|
|
29
|
-
import { EventManagerModuleOptions } from '../interfaces';
|
|
30
|
-
import { EVENT_MANAGER_MODULE_OPTIONS } from '../config/event-manager.constants';
|
|
31
|
-
const DEFAULT_COLOR = '#3B82F6';
|
|
32
|
-
const DEFAULT_MAX_RECURRENCE_OCCURRENCES = 365;
|
|
33
|
-
export class EventManagerConfigService {
|
|
34
|
-
// IModuleConfigService Implementation
|
|
35
|
-
isCompanyFeatureEnabled() {
|
|
36
|
-
return this.options.bootstrapAppConfig?.enableCompanyFeature ?? false;
|
|
37
|
-
}
|
|
38
|
-
getDatabaseMode() {
|
|
39
|
-
return this.options.bootstrapAppConfig?.databaseMode ?? 'single';
|
|
40
|
-
}
|
|
41
|
-
isMultiTenant() {
|
|
42
|
-
return this.getDatabaseMode() === 'multi-tenant';
|
|
43
|
-
}
|
|
44
|
-
// Config Getters
|
|
45
|
-
getDefaultColor() {
|
|
46
|
-
return this.options.config?.defaultColor ?? DEFAULT_COLOR;
|
|
47
|
-
}
|
|
48
|
-
getMaxRecurrenceOccurrences() {
|
|
49
|
-
return this.options.config?.maxRecurrenceOccurrences ?? DEFAULT_MAX_RECURRENCE_OCCURRENCES;
|
|
50
|
-
}
|
|
51
|
-
getOptions() {
|
|
52
|
-
return this.options;
|
|
53
|
-
}
|
|
54
|
-
constructor(options){
|
|
55
|
-
_define_property(this, "options", void 0);
|
|
56
|
-
this.options = options;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
EventManagerConfigService = _ts_decorate([
|
|
60
|
-
Injectable(),
|
|
61
|
-
_ts_param(0, Inject(EVENT_MANAGER_MODULE_OPTIONS)),
|
|
62
|
-
_ts_metadata("design:type", Function),
|
|
63
|
-
_ts_metadata("design:paramtypes", [
|
|
64
|
-
typeof EventManagerModuleOptions === "undefined" ? Object : EventManagerModuleOptions
|
|
65
|
-
])
|
|
66
|
-
], EventManagerConfigService);
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import { EventManagerConfigService } from './event-manager-config.service';
|
|
2
|
-
function buildOptions(overrides = {}) {
|
|
3
|
-
return {
|
|
4
|
-
bootstrapAppConfig: undefined,
|
|
5
|
-
config: undefined,
|
|
6
|
-
...overrides
|
|
7
|
-
};
|
|
8
|
-
}
|
|
9
|
-
describe('EventManagerConfigService', ()=>{
|
|
10
|
-
describe('isCompanyFeatureEnabled', ()=>{
|
|
11
|
-
it('returns true when bootstrap config enables the company feature', ()=>{
|
|
12
|
-
const service = new EventManagerConfigService(buildOptions({
|
|
13
|
-
bootstrapAppConfig: {
|
|
14
|
-
enableCompanyFeature: true
|
|
15
|
-
}
|
|
16
|
-
}));
|
|
17
|
-
expect(service.isCompanyFeatureEnabled()).toBe(true);
|
|
18
|
-
});
|
|
19
|
-
it('returns false when bootstrap config disables the company feature', ()=>{
|
|
20
|
-
const service = new EventManagerConfigService(buildOptions({
|
|
21
|
-
bootstrapAppConfig: {
|
|
22
|
-
enableCompanyFeature: false
|
|
23
|
-
}
|
|
24
|
-
}));
|
|
25
|
-
expect(service.isCompanyFeatureEnabled()).toBe(false);
|
|
26
|
-
});
|
|
27
|
-
it('defaults to false when bootstrapAppConfig is missing', ()=>{
|
|
28
|
-
const service = new EventManagerConfigService(buildOptions());
|
|
29
|
-
expect(service.isCompanyFeatureEnabled()).toBe(false);
|
|
30
|
-
});
|
|
31
|
-
});
|
|
32
|
-
describe('getDatabaseMode', ()=>{
|
|
33
|
-
it('returns the configured database mode', ()=>{
|
|
34
|
-
const service = new EventManagerConfigService(buildOptions({
|
|
35
|
-
bootstrapAppConfig: {
|
|
36
|
-
databaseMode: 'multi-tenant'
|
|
37
|
-
}
|
|
38
|
-
}));
|
|
39
|
-
expect(service.getDatabaseMode()).toBe('multi-tenant');
|
|
40
|
-
});
|
|
41
|
-
it('defaults to "single" when not configured', ()=>{
|
|
42
|
-
const service = new EventManagerConfigService(buildOptions());
|
|
43
|
-
expect(service.getDatabaseMode()).toBe('single');
|
|
44
|
-
});
|
|
45
|
-
});
|
|
46
|
-
describe('isMultiTenant', ()=>{
|
|
47
|
-
it('returns true when database mode is multi-tenant', ()=>{
|
|
48
|
-
const service = new EventManagerConfigService(buildOptions({
|
|
49
|
-
bootstrapAppConfig: {
|
|
50
|
-
databaseMode: 'multi-tenant'
|
|
51
|
-
}
|
|
52
|
-
}));
|
|
53
|
-
expect(service.isMultiTenant()).toBe(true);
|
|
54
|
-
});
|
|
55
|
-
it('returns false when database mode is single', ()=>{
|
|
56
|
-
const service = new EventManagerConfigService(buildOptions({
|
|
57
|
-
bootstrapAppConfig: {
|
|
58
|
-
databaseMode: 'single'
|
|
59
|
-
}
|
|
60
|
-
}));
|
|
61
|
-
expect(service.isMultiTenant()).toBe(false);
|
|
62
|
-
});
|
|
63
|
-
it('returns false when database mode is not configured', ()=>{
|
|
64
|
-
const service = new EventManagerConfigService(buildOptions());
|
|
65
|
-
expect(service.isMultiTenant()).toBe(false);
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
describe('getDefaultColor', ()=>{
|
|
69
|
-
it('returns the configured default color', ()=>{
|
|
70
|
-
const service = new EventManagerConfigService(buildOptions({
|
|
71
|
-
config: {
|
|
72
|
-
defaultColor: '#FF0000'
|
|
73
|
-
}
|
|
74
|
-
}));
|
|
75
|
-
expect(service.getDefaultColor()).toBe('#FF0000');
|
|
76
|
-
});
|
|
77
|
-
it('falls back to the built-in default color', ()=>{
|
|
78
|
-
const service = new EventManagerConfigService(buildOptions());
|
|
79
|
-
expect(service.getDefaultColor()).toBe('#3B82F6');
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
describe('getMaxRecurrenceOccurrences', ()=>{
|
|
83
|
-
it('returns the configured max occurrences', ()=>{
|
|
84
|
-
const service = new EventManagerConfigService(buildOptions({
|
|
85
|
-
config: {
|
|
86
|
-
maxRecurrenceOccurrences: 50
|
|
87
|
-
}
|
|
88
|
-
}));
|
|
89
|
-
expect(service.getMaxRecurrenceOccurrences()).toBe(50);
|
|
90
|
-
});
|
|
91
|
-
it('falls back to the built-in default of 365', ()=>{
|
|
92
|
-
const service = new EventManagerConfigService(buildOptions());
|
|
93
|
-
expect(service.getMaxRecurrenceOccurrences()).toBe(365);
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
describe('getOptions', ()=>{
|
|
97
|
-
it('returns the raw options object as-is', ()=>{
|
|
98
|
-
const options = buildOptions({
|
|
99
|
-
config: {
|
|
100
|
-
defaultColor: '#ABCDEF'
|
|
101
|
-
}
|
|
102
|
-
});
|
|
103
|
-
const service = new EventManagerConfigService(options);
|
|
104
|
-
expect(service.getOptions()).toBe(options);
|
|
105
|
-
});
|
|
106
|
-
});
|
|
107
|
-
});
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
function _define_property(obj, key, value) {
|
|
2
|
-
if (key in obj) {
|
|
3
|
-
Object.defineProperty(obj, key, {
|
|
4
|
-
value: value,
|
|
5
|
-
enumerable: true,
|
|
6
|
-
configurable: true,
|
|
7
|
-
writable: true
|
|
8
|
-
});
|
|
9
|
-
} else {
|
|
10
|
-
obj[key] = value;
|
|
11
|
-
}
|
|
12
|
-
return obj;
|
|
13
|
-
}
|
|
14
|
-
function _ts_decorate(decorators, target, key, desc) {
|
|
15
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
16
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
17
|
-
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
18
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
19
|
-
}
|
|
20
|
-
function _ts_metadata(k, v) {
|
|
21
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
22
|
-
}
|
|
23
|
-
function _ts_param(paramIndex, decorator) {
|
|
24
|
-
return function(target, key) {
|
|
25
|
-
decorator(target, key, paramIndex);
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
import { MultiTenantDataSourceService } from '@flusys/nestjs-shared/modules';
|
|
29
|
-
import { Inject, Injectable, Optional, Scope } from '@nestjs/common';
|
|
30
|
-
import { REQUEST } from '@nestjs/core';
|
|
31
|
-
import { Request } from 'express';
|
|
32
|
-
import { getEventManagerEntitiesByConfig } from '../entities';
|
|
33
|
-
import { EventManagerConfigService } from './event-manager-config.service';
|
|
34
|
-
export class EventManagerDataSourceProvider extends MultiTenantDataSourceService {
|
|
35
|
-
static buildParentOptions(options) {
|
|
36
|
-
return {
|
|
37
|
-
bootstrapAppConfig: options.bootstrapAppConfig,
|
|
38
|
-
defaultDatabaseConfig: options.config?.defaultDatabaseConfig,
|
|
39
|
-
tenantDefaultDatabaseConfig: options.config?.tenantDefaultDatabaseConfig,
|
|
40
|
-
tenants: options.config?.tenants
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
getEnableCompanyFeatureForTenant(tenant) {
|
|
44
|
-
return tenant?.enableCompanyFeature ?? this.configService.isCompanyFeatureEnabled();
|
|
45
|
-
}
|
|
46
|
-
async createDataSourceFromConfig(config) {
|
|
47
|
-
const currentTenant = this.getCurrentTenant();
|
|
48
|
-
const enableCompanyFeature = this.getEnableCompanyFeatureForTenant(currentTenant ?? undefined);
|
|
49
|
-
const entities = getEventManagerEntitiesByConfig(enableCompanyFeature);
|
|
50
|
-
return super.createDataSourceFromConfig(config, entities);
|
|
51
|
-
}
|
|
52
|
-
constructor(configService, request){
|
|
53
|
-
super(EventManagerDataSourceProvider.buildParentOptions(configService.getOptions()), request), _define_property(this, "configService", void 0), this.configService = configService;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
_define_property(EventManagerDataSourceProvider, "tenantConnections", new Map());
|
|
57
|
-
_define_property(EventManagerDataSourceProvider, "singleDataSource", null);
|
|
58
|
-
_define_property(EventManagerDataSourceProvider, "tenantsRegistry", new Map());
|
|
59
|
-
_define_property(EventManagerDataSourceProvider, "initialized", false);
|
|
60
|
-
_define_property(EventManagerDataSourceProvider, "connectionLocks", new Map());
|
|
61
|
-
_define_property(EventManagerDataSourceProvider, "singleConnectionLock", null);
|
|
62
|
-
EventManagerDataSourceProvider = _ts_decorate([
|
|
63
|
-
Injectable({
|
|
64
|
-
scope: Scope.REQUEST
|
|
65
|
-
}),
|
|
66
|
-
_ts_param(0, Inject(EventManagerConfigService)),
|
|
67
|
-
_ts_param(1, Optional()),
|
|
68
|
-
_ts_param(1, Inject(REQUEST)),
|
|
69
|
-
_ts_metadata("design:type", Function),
|
|
70
|
-
_ts_metadata("design:paramtypes", [
|
|
71
|
-
typeof EventManagerConfigService === "undefined" ? Object : EventManagerConfigService,
|
|
72
|
-
typeof Request === "undefined" ? Object : Request
|
|
73
|
-
])
|
|
74
|
-
], EventManagerDataSourceProvider);
|