@flusys/nestjs-event-manager 3.0.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.
Files changed (89) hide show
  1. package/README.md +1328 -0
  2. package/adapters/event-manager.adapter.d.ts +12 -0
  3. package/adapters/index.d.ts +1 -0
  4. package/cjs/adapters/event-manager.adapter.js +71 -0
  5. package/cjs/adapters/index.js +18 -0
  6. package/cjs/config/event-manager.constants.js +13 -0
  7. package/cjs/config/index.js +18 -0
  8. package/cjs/controllers/event-participant.controller.js +271 -0
  9. package/cjs/controllers/event.controller.js +229 -0
  10. package/cjs/controllers/index.js +19 -0
  11. package/cjs/docs/event-manager-swagger.config.js +135 -0
  12. package/cjs/docs/index.js +24 -0
  13. package/cjs/dtos/calendar-query.dto.js +186 -0
  14. package/cjs/dtos/event-participant.dto.js +226 -0
  15. package/cjs/dtos/event.dto.js +291 -0
  16. package/cjs/dtos/index.js +20 -0
  17. package/cjs/entities/event-participant.entity.js +96 -0
  18. package/cjs/entities/event-with-company.entity.js +56 -0
  19. package/cjs/entities/event.entity.js +143 -0
  20. package/cjs/entities/index.js +55 -0
  21. package/cjs/index.js +27 -0
  22. package/cjs/interfaces/event-manager-module.interface.js +4 -0
  23. package/cjs/interfaces/event.interface.js +4 -0
  24. package/cjs/interfaces/index.js +19 -0
  25. package/cjs/modules/event-manager.module.js +133 -0
  26. package/cjs/modules/index.js +18 -0
  27. package/cjs/services/event-manager-config.service.js +76 -0
  28. package/cjs/services/event-manager-datasource.provider.js +181 -0
  29. package/cjs/services/event-manager-helper.service.js +253 -0
  30. package/cjs/services/event-participant.service.js +164 -0
  31. package/cjs/services/event.service.js +421 -0
  32. package/cjs/services/index.js +22 -0
  33. package/config/event-manager.constants.d.ts +1 -0
  34. package/config/index.d.ts +1 -0
  35. package/controllers/event-participant.controller.d.ts +31 -0
  36. package/controllers/event.controller.d.ts +24 -0
  37. package/controllers/index.d.ts +2 -0
  38. package/docs/event-manager-swagger.config.d.ts +3 -0
  39. package/docs/index.d.ts +2 -0
  40. package/dtos/calendar-query.dto.d.ts +23 -0
  41. package/dtos/event-participant.dto.d.ts +31 -0
  42. package/dtos/event.dto.d.ts +37 -0
  43. package/dtos/index.d.ts +3 -0
  44. package/entities/event-participant.entity.d.ts +8 -0
  45. package/entities/event-with-company.entity.d.ts +4 -0
  46. package/entities/event.entity.d.ts +14 -0
  47. package/entities/index.d.ts +11 -0
  48. package/fesm/adapters/event-manager.adapter.js +61 -0
  49. package/fesm/adapters/index.js +1 -0
  50. package/fesm/config/event-manager.constants.js +3 -0
  51. package/fesm/config/index.js +1 -0
  52. package/fesm/controllers/event-participant.controller.js +261 -0
  53. package/fesm/controllers/event.controller.js +219 -0
  54. package/fesm/controllers/index.js +2 -0
  55. package/fesm/docs/event-manager-swagger.config.js +128 -0
  56. package/fesm/docs/index.js +4 -0
  57. package/fesm/dtos/calendar-query.dto.js +168 -0
  58. package/fesm/dtos/event-participant.dto.js +199 -0
  59. package/fesm/dtos/event.dto.js +270 -0
  60. package/fesm/dtos/index.js +3 -0
  61. package/fesm/entities/event-participant.entity.js +86 -0
  62. package/fesm/entities/event-with-company.entity.js +46 -0
  63. package/fesm/entities/event.entity.js +133 -0
  64. package/fesm/entities/index.js +24 -0
  65. package/fesm/index.js +10 -0
  66. package/fesm/interfaces/event-manager-module.interface.js +3 -0
  67. package/fesm/interfaces/event.interface.js +1 -0
  68. package/fesm/interfaces/index.js +2 -0
  69. package/fesm/modules/event-manager.module.js +123 -0
  70. package/fesm/modules/index.js +1 -0
  71. package/fesm/services/event-manager-config.service.js +66 -0
  72. package/fesm/services/event-manager-datasource.provider.js +130 -0
  73. package/fesm/services/event-manager-helper.service.js +243 -0
  74. package/fesm/services/event-participant.service.js +154 -0
  75. package/fesm/services/event.service.js +411 -0
  76. package/fesm/services/index.js +5 -0
  77. package/index.d.ts +9 -0
  78. package/interfaces/event-manager-module.interface.d.ts +20 -0
  79. package/interfaces/event.interface.d.ts +28 -0
  80. package/interfaces/index.d.ts +2 -0
  81. package/modules/event-manager.module.d.ts +8 -0
  82. package/modules/index.d.ts +1 -0
  83. package/package.json +89 -0
  84. package/services/event-manager-config.service.d.ts +13 -0
  85. package/services/event-manager-datasource.provider.d.ts +23 -0
  86. package/services/event-manager-helper.service.d.ts +27 -0
  87. package/services/event-participant.service.d.ts +27 -0
  88. package/services/event.service.d.ts +49 -0
  89. package/services/index.d.ts +5 -0
@@ -0,0 +1,133 @@
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
+ import { RecurrenceType } from '@flusys/nestjs-shared/enums';
24
+ import { Identity } from '@flusys/nestjs-shared/entities';
25
+ import { Column, Entity, Index } from 'typeorm';
26
+ export class Event extends Identity {
27
+ constructor(...args){
28
+ super(...args), _define_property(this, "title", void 0), _define_property(this, "description", void 0), _define_property(this, "meetingLink", void 0), _define_property(this, "startDateTime", void 0), _define_property(this, "endDateTime", void 0), _define_property(this, "isAllDay", void 0), _define_property(this, "recurrenceType", void 0), _define_property(this, "recurrenceEndDate", void 0), _define_property(this, "color", void 0), _define_property(this, "isActive", void 0), _define_property(this, "metadata", void 0);
29
+ }
30
+ }
31
+ _ts_decorate([
32
+ Column({
33
+ type: 'varchar',
34
+ length: 255,
35
+ nullable: false
36
+ }),
37
+ _ts_metadata("design:type", String)
38
+ ], Event.prototype, "title", void 0);
39
+ _ts_decorate([
40
+ Column({
41
+ type: 'text',
42
+ nullable: true
43
+ }),
44
+ _ts_metadata("design:type", Object)
45
+ ], Event.prototype, "description", void 0);
46
+ _ts_decorate([
47
+ Column({
48
+ type: 'varchar',
49
+ length: 500,
50
+ nullable: true
51
+ }),
52
+ _ts_metadata("design:type", Object)
53
+ ], Event.prototype, "meetingLink", void 0);
54
+ _ts_decorate([
55
+ Column({
56
+ name: 'start_date_time',
57
+ type: 'timestamp',
58
+ nullable: false
59
+ }),
60
+ _ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
61
+ ], Event.prototype, "startDateTime", void 0);
62
+ _ts_decorate([
63
+ Column({
64
+ name: 'end_date_time',
65
+ type: 'timestamp',
66
+ nullable: false
67
+ }),
68
+ _ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
69
+ ], Event.prototype, "endDateTime", void 0);
70
+ _ts_decorate([
71
+ Column({
72
+ name: 'is_all_day',
73
+ type: 'boolean',
74
+ nullable: false,
75
+ default: false
76
+ }),
77
+ _ts_metadata("design:type", Boolean)
78
+ ], Event.prototype, "isAllDay", void 0);
79
+ _ts_decorate([
80
+ Column({
81
+ name: 'recurrence_type',
82
+ type: 'varchar',
83
+ length: 20,
84
+ nullable: false,
85
+ default: RecurrenceType.NONE
86
+ }),
87
+ _ts_metadata("design:type", String)
88
+ ], Event.prototype, "recurrenceType", void 0);
89
+ _ts_decorate([
90
+ Column({
91
+ name: 'recurrence_end_date',
92
+ type: 'timestamp',
93
+ nullable: true
94
+ }),
95
+ _ts_metadata("design:type", Object)
96
+ ], Event.prototype, "recurrenceEndDate", void 0);
97
+ _ts_decorate([
98
+ Column({
99
+ type: 'varchar',
100
+ length: 7,
101
+ nullable: false,
102
+ default: '#3B82F6'
103
+ }),
104
+ _ts_metadata("design:type", String)
105
+ ], Event.prototype, "color", void 0);
106
+ _ts_decorate([
107
+ Column({
108
+ name: 'is_active',
109
+ type: 'boolean',
110
+ nullable: false,
111
+ default: true
112
+ }),
113
+ _ts_metadata("design:type", Boolean)
114
+ ], Event.prototype, "isActive", void 0);
115
+ _ts_decorate([
116
+ Column({
117
+ type: 'simple-json',
118
+ nullable: true
119
+ }),
120
+ _ts_metadata("design:type", Object)
121
+ ], Event.prototype, "metadata", void 0);
122
+ Event = _ts_decorate([
123
+ Entity({
124
+ name: 'event'
125
+ }),
126
+ Index([
127
+ 'startDateTime',
128
+ 'endDateTime'
129
+ ]),
130
+ Index([
131
+ 'isActive'
132
+ ])
133
+ ], Event);
@@ -0,0 +1,24 @@
1
+ // Entities without company feature
2
+ export * from './event.entity';
3
+ export * from './event-participant.entity';
4
+ // Entities with company feature
5
+ export * from './event-with-company.entity';
6
+ import { Event } from './event.entity';
7
+ import { EventParticipant } from './event-participant.entity';
8
+ import { EventWithCompany } from './event-with-company.entity';
9
+ // Core entities (no company feature)
10
+ export const EventManagerCoreEntities = [
11
+ Event,
12
+ EventParticipant
13
+ ];
14
+ // Company-specific entities (EventParticipant is event-scoped, not company-scoped)
15
+ export const EventManagerCompanyEntities = [
16
+ EventWithCompany,
17
+ EventParticipant
18
+ ];
19
+ export function getEventManagerEntitiesByConfig(enableCompanyFeature) {
20
+ return enableCompanyFeature ? EventManagerCompanyEntities : EventManagerCoreEntities;
21
+ }
22
+ // Base type aliases for backwards compatibility with services
23
+ export { Event as EventBase } from './event.entity';
24
+ export { EventParticipant as EventParticipantBase } from './event-participant.entity';
package/fesm/index.js ADDED
@@ -0,0 +1,10 @@
1
+ // Export all event manager module components
2
+ export * from './adapters';
3
+ export * from './controllers';
4
+ export * from './services';
5
+ export * from './entities';
6
+ export * from './modules';
7
+ export * from './config';
8
+ export * from './docs';
9
+ export * from './dtos';
10
+ export * from './interfaces';
@@ -0,0 +1,3 @@
1
+ /**
2
+ * Async options for EventManagerModule registration
3
+ */ export { };
@@ -0,0 +1 @@
1
+ export { };
@@ -0,0 +1,2 @@
1
+ export * from './event.interface';
2
+ export * from './event-manager-module.interface';
@@ -0,0 +1,123 @@
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 } 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, EventParticipantController } from '../controllers';
12
+ import { EventManagerAdapter } from '../adapters';
13
+ import { EventManagerConfigService, EventManagerDataSourceProvider, EventManagerHelperService, EventParticipantService, EventService } from '../services';
14
+ const CONTROLLERS = [
15
+ EventController,
16
+ EventParticipantController
17
+ ];
18
+ const EXPORTED_SERVICES = [
19
+ EventManagerConfigService,
20
+ EventManagerDataSourceProvider,
21
+ EventManagerHelperService,
22
+ EventService,
23
+ EventParticipantService
24
+ ];
25
+ const ADAPTER_PROVIDER = {
26
+ provide: EVENT_MANAGER_ADAPTER,
27
+ useClass: EventManagerAdapter
28
+ };
29
+ export class EventManagerModule {
30
+ static forRoot(options) {
31
+ return {
32
+ module: EventManagerModule,
33
+ global: options.global ?? false,
34
+ imports: [
35
+ CacheModule,
36
+ UtilsModule
37
+ ],
38
+ controllers: options.includeController !== false ? CONTROLLERS : [],
39
+ providers: [
40
+ ...this.buildProviders(options),
41
+ EventManagerAdapter,
42
+ ADAPTER_PROVIDER
43
+ ],
44
+ exports: [
45
+ ...EXPORTED_SERVICES,
46
+ EVENT_MANAGER_ADAPTER
47
+ ]
48
+ };
49
+ }
50
+ static forRootAsync(options) {
51
+ return {
52
+ module: EventManagerModule,
53
+ global: options.global ?? false,
54
+ imports: [
55
+ ...options.imports || [],
56
+ CacheModule,
57
+ UtilsModule
58
+ ],
59
+ controllers: options.includeController !== false ? CONTROLLERS : [],
60
+ providers: [
61
+ ...this.createAsyncProviders(options),
62
+ ...this.buildProviders(),
63
+ EventManagerAdapter,
64
+ ADAPTER_PROVIDER
65
+ ],
66
+ exports: [
67
+ ...EXPORTED_SERVICES,
68
+ EVENT_MANAGER_ADAPTER
69
+ ]
70
+ };
71
+ }
72
+ // Private Helpers
73
+ static buildProviders(options) {
74
+ const providers = [
75
+ ...EXPORTED_SERVICES
76
+ ];
77
+ if (options) {
78
+ providers.unshift({
79
+ provide: EVENT_MANAGER_MODULE_OPTIONS,
80
+ useValue: options
81
+ });
82
+ }
83
+ return providers;
84
+ }
85
+ static createAsyncProviders(options) {
86
+ if (options.useFactory) {
87
+ return [
88
+ {
89
+ provide: EVENT_MANAGER_MODULE_OPTIONS,
90
+ useFactory: async (...args)=>({
91
+ ...options,
92
+ config: await options.useFactory(...args)
93
+ }),
94
+ inject: options.inject || []
95
+ }
96
+ ];
97
+ }
98
+ const factoryClass = options.useClass || options.useExisting;
99
+ if (!factoryClass) return [];
100
+ const providers = [
101
+ {
102
+ provide: EVENT_MANAGER_MODULE_OPTIONS,
103
+ useFactory: async (factory)=>({
104
+ ...options,
105
+ config: await factory.createEventManagerOptions()
106
+ }),
107
+ inject: [
108
+ factoryClass
109
+ ]
110
+ }
111
+ ];
112
+ if (options.useClass) {
113
+ providers.push({
114
+ provide: options.useClass,
115
+ useClass: options.useClass
116
+ });
117
+ }
118
+ return providers;
119
+ }
120
+ }
121
+ EventManagerModule = _ts_decorate([
122
+ Module({})
123
+ ], EventManagerModule);
@@ -0,0 +1 @@
1
+ export * from './event-manager.module';
@@ -0,0 +1,66 @@
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);
@@ -0,0 +1,130 @@
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, InternalServerErrorException, Logger, Optional, Scope } from '@nestjs/common';
30
+ import { REQUEST } from '@nestjs/core';
31
+ import { Request } from 'express';
32
+ import { EventManagerConfigService } from './event-manager-config.service';
33
+ export class EventManagerDataSourceProvider extends MultiTenantDataSourceService {
34
+ // Factory Methods
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
+ // Feature Flags
44
+ getEnableCompanyFeatureForTenant(tenant) {
45
+ return tenant?.enableCompanyFeature ?? this.configService.isCompanyFeatureEnabled();
46
+ }
47
+ // Entity Management
48
+ async getEventManagerEntities(enableCompanyFeature) {
49
+ const enable = enableCompanyFeature ?? this.configService.isCompanyFeatureEnabled();
50
+ const entities = await import('../entities');
51
+ // EventParticipant doesn't need company variant - company context comes from Event
52
+ return enable ? [
53
+ entities.EventWithCompany,
54
+ entities.EventParticipant
55
+ ] : [
56
+ entities.Event,
57
+ entities.EventParticipant
58
+ ];
59
+ }
60
+ // Overrides
61
+ async createDataSourceFromConfig(config) {
62
+ const currentTenant = this.getCurrentTenant();
63
+ const enableCompanyFeature = this.getEnableCompanyFeatureForTenant(currentTenant ?? undefined);
64
+ const entities = await this.getEventManagerEntities(enableCompanyFeature);
65
+ return super.createDataSourceFromConfig(config, entities);
66
+ }
67
+ async getSingleDataSource() {
68
+ if (EventManagerDataSourceProvider.singleDataSource?.isInitialized) {
69
+ return EventManagerDataSourceProvider.singleDataSource;
70
+ }
71
+ if (EventManagerDataSourceProvider.singleConnectionLock) {
72
+ return EventManagerDataSourceProvider.singleConnectionLock;
73
+ }
74
+ const config = this.getDefaultDatabaseConfig();
75
+ if (!config) {
76
+ throw new InternalServerErrorException('No database config available. Provide defaultDatabaseConfig or tenantDefaultDatabaseConfig.');
77
+ }
78
+ const connectionPromise = this.createDataSourceFromConfig(config);
79
+ EventManagerDataSourceProvider.singleConnectionLock = connectionPromise;
80
+ try {
81
+ const dataSource = await connectionPromise;
82
+ EventManagerDataSourceProvider.singleDataSource = dataSource;
83
+ return dataSource;
84
+ } finally{
85
+ EventManagerDataSourceProvider.singleConnectionLock = null;
86
+ }
87
+ }
88
+ async getOrCreateTenantConnection(tenant) {
89
+ const existing = EventManagerDataSourceProvider.tenantConnections.get(tenant.id);
90
+ if (existing?.isInitialized) {
91
+ return existing;
92
+ }
93
+ const pendingConnection = EventManagerDataSourceProvider.connectionLocks.get(tenant.id);
94
+ if (pendingConnection) {
95
+ return pendingConnection;
96
+ }
97
+ const config = this.buildTenantDatabaseConfig(tenant);
98
+ const connectionPromise = this.createDataSourceFromConfig(config);
99
+ EventManagerDataSourceProvider.connectionLocks.set(tenant.id, connectionPromise);
100
+ try {
101
+ const dataSource = await connectionPromise;
102
+ EventManagerDataSourceProvider.tenantConnections.set(tenant.id, dataSource);
103
+ return dataSource;
104
+ } finally{
105
+ EventManagerDataSourceProvider.connectionLocks.delete(tenant.id);
106
+ }
107
+ }
108
+ constructor(configService, request){
109
+ super(EventManagerDataSourceProvider.buildParentOptions(configService.getOptions()), request), _define_property(this, "configService", void 0), _define_property(this, "logger", void 0), this.configService = configService, this.logger = new Logger(EventManagerDataSourceProvider.name);
110
+ }
111
+ }
112
+ _define_property(EventManagerDataSourceProvider, "tenantConnections", new Map());
113
+ _define_property(EventManagerDataSourceProvider, "singleDataSource", null);
114
+ _define_property(EventManagerDataSourceProvider, "tenantsRegistry", new Map());
115
+ _define_property(EventManagerDataSourceProvider, "initialized", false);
116
+ _define_property(EventManagerDataSourceProvider, "connectionLocks", new Map());
117
+ _define_property(EventManagerDataSourceProvider, "singleConnectionLock", null);
118
+ EventManagerDataSourceProvider = _ts_decorate([
119
+ Injectable({
120
+ scope: Scope.REQUEST
121
+ }),
122
+ _ts_param(0, Inject(EventManagerConfigService)),
123
+ _ts_param(1, Optional()),
124
+ _ts_param(1, Inject(REQUEST)),
125
+ _ts_metadata("design:type", Function),
126
+ _ts_metadata("design:paramtypes", [
127
+ typeof EventManagerConfigService === "undefined" ? Object : EventManagerConfigService,
128
+ typeof Request === "undefined" ? Object : Request
129
+ ])
130
+ ], EventManagerDataSourceProvider);