rez_core 2.2.258 → 2.2.259
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/dist/app.module.js +2 -2
- package/dist/app.module.js.map +1 -1
- package/dist/module/integration/controller/calender-event.controller.js.map +1 -0
- package/dist/module/integration/controller/integration.controller.d.ts +113 -0
- package/dist/module/{communication/controller/communication.controller.js → integration/controller/integration.controller.js} +197 -75
- package/dist/module/integration/controller/integration.controller.js.map +1 -0
- package/dist/module/{communication → integration}/controller/wrapper.controller.d.ts +1 -1
- package/dist/module/integration/controller/wrapper.controller.js.map +1 -0
- package/dist/module/{communication → integration}/dto/create-config.dto.d.ts +48 -4
- package/dist/module/{communication → integration}/dto/create-config.dto.js +96 -18
- package/dist/module/integration/dto/create-config.dto.js.map +1 -0
- package/dist/module/{communication/entity/communication-config.entity.d.ts → integration/entity/integration-config.entity.d.ts} +11 -1
- package/dist/module/integration/entity/integration-config.entity.js +78 -0
- package/dist/module/integration/entity/integration-config.entity.js.map +1 -0
- package/dist/module/{communication → integration}/entity/integration-source.entity.d.ts +1 -1
- package/dist/module/{communication → integration}/entity/integration-source.entity.js +8 -8
- package/dist/module/integration/entity/integration-source.entity.js.map +1 -0
- package/dist/module/integration/entity/user-integration.entity.d.ts +23 -0
- package/dist/module/integration/entity/user-integration.entity.js +70 -0
- package/dist/module/integration/entity/user-integration.entity.js.map +1 -0
- package/dist/module/integration/examples/usage.example.d.ts +16 -0
- package/dist/module/integration/examples/usage.example.js +217 -0
- package/dist/module/integration/examples/usage.example.js.map +1 -0
- package/dist/module/{communication → integration}/factories/base.factory.d.ts +2 -2
- package/dist/module/integration/factories/base.factory.js.map +1 -0
- package/dist/module/{communication → integration}/factories/email.factory.d.ts +3 -7
- package/dist/module/{communication → integration}/factories/email.factory.js +1 -13
- package/dist/module/integration/factories/email.factory.js.map +1 -0
- package/dist/module/{communication/factories/communication.factory.d.ts → integration/factories/integration.factory.d.ts} +4 -4
- package/dist/module/{communication/factories/communication.factory.js → integration/factories/integration.factory.js} +26 -26
- package/dist/module/integration/factories/integration.factory.js.map +1 -0
- package/dist/module/integration/factories/sms.factory.d.ts +9 -0
- package/dist/module/integration/factories/sms.factory.js +26 -0
- package/dist/module/integration/factories/sms.factory.js.map +1 -0
- package/dist/module/{communication → integration}/factories/telephone.factory.d.ts +3 -5
- package/dist/module/{communication → integration}/factories/telephone.factory.js +11 -17
- package/dist/module/integration/factories/telephone.factory.js.map +1 -0
- package/dist/module/{communication → integration}/factories/whatsapp.factory.d.ts +2 -2
- package/dist/module/integration/factories/whatsapp.factory.js.map +1 -0
- package/dist/module/integration/integration.module.d.ts +2 -0
- package/dist/module/{communication/communication.module.js → integration/integration.module.js} +22 -42
- package/dist/module/integration/integration.module.js.map +1 -0
- package/dist/module/integration/service/calendar-event.service.js.map +1 -0
- package/dist/module/{communication/service/communication-queue.service.d.ts → integration/service/integration-queue.service.d.ts} +1 -1
- package/dist/module/{communication/service/communication-queue.service.js → integration/service/integration-queue.service.js} +8 -8
- package/dist/module/integration/service/integration-queue.service.js.map +1 -0
- package/dist/module/integration/service/integration.service.d.ts +155 -0
- package/dist/module/{communication/service/communication.service.js → integration/service/integration.service.js} +391 -307
- package/dist/module/integration/service/integration.service.js.map +1 -0
- package/dist/module/{communication → integration}/service/oauth.service.js +1 -1
- package/dist/module/integration/service/oauth.service.js.map +1 -0
- package/dist/module/{communication → integration}/service/wrapper.service.d.ts +4 -4
- package/dist/module/{communication → integration}/service/wrapper.service.js +25 -26
- package/dist/module/integration/service/wrapper.service.js.map +1 -0
- package/dist/module/{communication → integration}/strategies/email/gmail-api.strategy.d.ts +3 -3
- package/dist/module/{communication → integration}/strategies/email/gmail-api.strategy.js +2 -6
- package/dist/module/integration/strategies/email/gmail-api.strategy.js.map +1 -0
- package/dist/module/integration/strategies/email/outlook-api.strategy.d.ts +5 -0
- package/dist/module/integration/strategies/email/outlook-api.strategy.js.map +1 -0
- package/dist/module/integration/strategies/email/outlook.strategy.d.ts +5 -0
- package/dist/module/integration/strategies/email/outlook.strategy.js.map +1 -0
- package/dist/module/{communication → integration}/strategies/email/sendgrid-api.strategy.d.ts +3 -3
- package/dist/module/integration/strategies/email/sendgrid-api.strategy.js.map +1 -0
- package/dist/module/{communication/strategies/communication.strategy.d.ts → integration/strategies/integration.strategy.d.ts} +4 -3
- package/dist/module/{communication/strategies/communication.strategy.js → integration/strategies/integration.strategy.js} +1 -1
- package/dist/module/integration/strategies/integration.strategy.js.map +1 -0
- package/dist/module/integration/strategies/telephone/ozonetel-voice.strategy.d.ts +17 -0
- package/dist/module/{communication → integration}/strategies/telephone/ozonetel-voice.strategy.js +13 -5
- package/dist/module/integration/strategies/telephone/ozonetel-voice.strategy.js.map +1 -0
- package/dist/module/{communication → integration}/strategies/telephone/tubelight-voice.strategy.d.ts +6 -4
- package/dist/module/{communication → integration}/strategies/telephone/tubelight-voice.strategy.js +3 -7
- package/dist/module/integration/strategies/telephone/tubelight-voice.strategy.js.map +1 -0
- package/dist/module/{communication → integration}/strategies/whatsapp/whatsapp-cloud.strategy.d.ts +3 -3
- package/dist/module/integration/strategies/whatsapp/whatsapp-cloud.strategy.js.map +1 -0
- package/dist/module/integration/strategies/whatsapp/whatsapp.strategy.d.ts +5 -0
- package/dist/module/integration/strategies/whatsapp/whatsapp.strategy.js.map +1 -0
- package/dist/module/meta/entity/entity-master.entity.d.ts +1 -1
- package/dist/module/meta/entity/entity-master.entity.js +2 -2
- package/dist/module/meta/entity/entity-master.entity.js.map +1 -1
- package/dist/module/meta/service/entity-dynamic.service.js +47 -27
- package/dist/module/meta/service/entity-dynamic.service.js.map +1 -1
- package/dist/module/user/controller/login.controller.d.ts +3 -3
- package/dist/module/user/controller/login.controller.js +5 -5
- package/dist/module/user/controller/login.controller.js.map +1 -1
- package/dist/module/user/user.module.js +2 -2
- package/dist/module/user/user.module.js.map +1 -1
- package/dist/module/workflow-automation/entity/workflow-automation-action.entity.d.ts +1 -0
- package/dist/module/workflow-automation/entity/workflow-automation-action.entity.js +4 -0
- package/dist/module/workflow-automation/entity/workflow-automation-action.entity.js.map +1 -1
- package/dist/module/workflow-automation/service/workflow-automation.service.d.ts +2 -1
- package/dist/module/workflow-automation/service/workflow-automation.service.js +8 -4
- package/dist/module/workflow-automation/service/workflow-automation.service.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/docs/modules/event-driven-integration-design.md +92 -0
- package/docs/modules/integration.md +197 -0
- package/package.json +1 -1
- package/src/app.module.ts +2 -2
- package/src/module/integration/controller/integration.controller.ts +411 -0
- package/src/module/{communication → integration}/dto/create-config.dto.ts +110 -18
- package/src/module/{communication/entity/communication-config.entity.ts → integration/entity/integration-config.entity.ts} +33 -6
- package/src/module/{communication → integration}/entity/integration-source.entity.ts +1 -1
- package/src/module/integration/entity/user-integration.entity.ts +71 -0
- package/src/module/integration/examples/usage.example.ts +338 -0
- package/src/module/{communication → integration}/factories/base.factory.ts +2 -2
- package/src/module/{communication → integration}/factories/email.factory.ts +2 -12
- package/src/module/{communication/factories/communication.factory.ts → integration/factories/integration.factory.ts} +18 -18
- package/src/module/integration/factories/sms.factory.ts +19 -0
- package/src/module/integration/factories/telephone.factory.ts +41 -0
- package/src/module/{communication → integration}/factories/whatsapp.factory.ts +2 -2
- package/src/module/integration/integration.module.ts +86 -0
- package/src/module/{communication/service/communication-queue.service.ts → integration/service/integration-queue.service.ts} +2 -2
- package/src/module/{communication/service/communication.service.ts → integration/service/integration.service.ts} +598 -448
- package/src/module/{communication → integration}/service/oauth.service.ts +1 -1
- package/src/module/{communication → integration}/service/wrapper.service.ts +24 -25
- package/src/module/{communication → integration}/strategies/email/gmail-api.strategy.ts +6 -18
- package/src/module/{communication → integration}/strategies/email/outlook-api.strategy.ts +5 -5
- package/src/module/{communication → integration}/strategies/email/outlook.strategy.ts +5 -5
- package/src/module/{communication → integration}/strategies/email/sendgrid-api.strategy.ts +5 -5
- package/src/module/{communication/strategies/communication.strategy.ts → integration/strategies/integration.strategy.ts} +7 -3
- package/src/module/{communication → integration}/strategies/telephone/ozonetel-voice.strategy.ts +40 -12
- package/src/module/{communication → integration}/strategies/telephone/tubelight-voice.strategy.ts +24 -17
- package/src/module/{communication → integration}/strategies/whatsapp/whatsapp-cloud.strategy.ts +5 -5
- package/src/module/{communication → integration}/strategies/whatsapp/whatsapp.strategy.ts +5 -5
- package/src/module/meta/entity/entity-master.entity.ts +2 -2
- package/src/module/meta/service/entity-dynamic.service.ts +55 -28
- package/src/module/user/controller/login.controller.ts +3 -3
- package/src/module/user/user.module.ts +2 -2
- package/src/module/workflow-automation/entity/workflow-automation-action.entity.ts +3 -0
- package/src/module/workflow-automation/service/workflow-automation.service.ts +8 -4
- package/src/resources/dev.properties.yaml +3 -3
- package/.vscode/extensions.json +0 -5
- package/dist/module/communication/communication.module.d.ts +0 -2
- package/dist/module/communication/communication.module.js.map +0 -1
- package/dist/module/communication/controller/calender-event.controller.js.map +0 -1
- package/dist/module/communication/controller/communication.controller.d.ts +0 -99
- package/dist/module/communication/controller/communication.controller.js.map +0 -1
- package/dist/module/communication/controller/wrapper.controller.js.map +0 -1
- package/dist/module/communication/dto/create-config.dto.js.map +0 -1
- package/dist/module/communication/entity/communication-config.entity.js +0 -45
- package/dist/module/communication/entity/communication-config.entity.js.map +0 -1
- package/dist/module/communication/entity/communication-hub.entity.d.ts +0 -20
- package/dist/module/communication/entity/communication-hub.entity.js +0 -115
- package/dist/module/communication/entity/communication-hub.entity.js.map +0 -1
- package/dist/module/communication/entity/integration-source.entity.js.map +0 -1
- package/dist/module/communication/examples/usage.example.d.ts +0 -11
- package/dist/module/communication/examples/usage.example.js +0 -89
- package/dist/module/communication/examples/usage.example.js.map +0 -1
- package/dist/module/communication/factories/base.factory.js.map +0 -1
- package/dist/module/communication/factories/communication.factory.js.map +0 -1
- package/dist/module/communication/factories/email.factory.js.map +0 -1
- package/dist/module/communication/factories/sms.factory.d.ts +0 -15
- package/dist/module/communication/factories/sms.factory.js +0 -49
- package/dist/module/communication/factories/sms.factory.js.map +0 -1
- package/dist/module/communication/factories/telephone.factory.js.map +0 -1
- package/dist/module/communication/factories/whatsapp.factory.js.map +0 -1
- package/dist/module/communication/service/calendar-event.service.js.map +0 -1
- package/dist/module/communication/service/communication-queue.service.js.map +0 -1
- package/dist/module/communication/service/communication.service.d.ts +0 -155
- package/dist/module/communication/service/communication.service.js.map +0 -1
- package/dist/module/communication/service/oauth.service.js.map +0 -1
- package/dist/module/communication/service/wrapper.service.js.map +0 -1
- package/dist/module/communication/strategies/communication.strategy.js.map +0 -1
- package/dist/module/communication/strategies/email/gmail-api.strategy.js.map +0 -1
- package/dist/module/communication/strategies/email/gmail-smtp-v2.strategy.d.ts +0 -5
- package/dist/module/communication/strategies/email/gmail-smtp-v2.strategy.js +0 -60
- package/dist/module/communication/strategies/email/gmail-smtp-v2.strategy.js.map +0 -1
- package/dist/module/communication/strategies/email/gmail-smtp.strategy.d.ts +0 -5
- package/dist/module/communication/strategies/email/gmail-smtp.strategy.js +0 -49
- package/dist/module/communication/strategies/email/gmail-smtp.strategy.js.map +0 -1
- package/dist/module/communication/strategies/email/outlook-api.strategy.d.ts +0 -5
- package/dist/module/communication/strategies/email/outlook-api.strategy.js.map +0 -1
- package/dist/module/communication/strategies/email/outlook-smtp.strategy.d.ts +0 -5
- package/dist/module/communication/strategies/email/outlook-smtp.strategy.js +0 -65
- package/dist/module/communication/strategies/email/outlook-smtp.strategy.js.map +0 -1
- package/dist/module/communication/strategies/email/outlook.strategy.d.ts +0 -5
- package/dist/module/communication/strategies/email/outlook.strategy.js.map +0 -1
- package/dist/module/communication/strategies/email/sendgrid-api.strategy.js.map +0 -1
- package/dist/module/communication/strategies/sms/knowlarity-multi.strategy.d.ts +0 -6
- package/dist/module/communication/strategies/sms/knowlarity-multi.strategy.js +0 -121
- package/dist/module/communication/strategies/sms/knowlarity-multi.strategy.js.map +0 -1
- package/dist/module/communication/strategies/sms/knowlarity.strategy.d.ts +0 -5
- package/dist/module/communication/strategies/sms/knowlarity.strategy.js +0 -44
- package/dist/module/communication/strategies/sms/knowlarity.strategy.js.map +0 -1
- package/dist/module/communication/strategies/sms/twilio-v2.strategy.d.ts +0 -5
- package/dist/module/communication/strategies/sms/twilio-v2.strategy.js +0 -48
- package/dist/module/communication/strategies/sms/twilio-v2.strategy.js.map +0 -1
- package/dist/module/communication/strategies/sms/twilio.strategy.d.ts +0 -5
- package/dist/module/communication/strategies/sms/twilio.strategy.js +0 -44
- package/dist/module/communication/strategies/sms/twilio.strategy.js.map +0 -1
- package/dist/module/communication/strategies/telephone/knowlarity-multi.strategy.d.ts +0 -6
- package/dist/module/communication/strategies/telephone/knowlarity-multi.strategy.js +0 -121
- package/dist/module/communication/strategies/telephone/knowlarity-multi.strategy.js.map +0 -1
- package/dist/module/communication/strategies/telephone/knowlarity-voice.strategy.d.ts +0 -5
- package/dist/module/communication/strategies/telephone/knowlarity-voice.strategy.js +0 -44
- package/dist/module/communication/strategies/telephone/knowlarity-voice.strategy.js.map +0 -1
- package/dist/module/communication/strategies/telephone/ozonetel-voice.strategy.d.ts +0 -15
- package/dist/module/communication/strategies/telephone/ozonetel-voice.strategy.js.map +0 -1
- package/dist/module/communication/strategies/telephone/tubelight-voice.strategy.js.map +0 -1
- package/dist/module/communication/strategies/whatsapp/whatsapp-cloud.strategy.js.map +0 -1
- package/dist/module/communication/strategies/whatsapp/whatsapp.strategy.d.ts +0 -5
- package/dist/module/communication/strategies/whatsapp/whatsapp.strategy.js.map +0 -1
- package/docs/modules/communication.md +0 -177
- package/src/module/communication/communication.module.ts +0 -106
- package/src/module/communication/controller/communication.controller.ts +0 -293
- package/src/module/communication/entity/communication-hub.entity.ts +0 -103
- package/src/module/communication/examples/usage.example.ts +0 -170
- package/src/module/communication/factories/sms.factory.ts +0 -44
- package/src/module/communication/factories/telephone.factory.ts +0 -49
- package/src/module/communication/strategies/email/gmail-smtp-v2.strategy.ts +0 -68
- package/src/module/communication/strategies/email/gmail-smtp.strategy.ts +0 -51
- package/src/module/communication/strategies/email/outlook-smtp.strategy.ts +0 -73
- package/src/module/communication/strategies/sms/knowlarity-multi.strategy.ts +0 -158
- package/src/module/communication/strategies/sms/knowlarity.strategy.ts +0 -44
- package/src/module/communication/strategies/sms/twilio-v2.strategy.ts +0 -47
- package/src/module/communication/strategies/sms/twilio.strategy.ts +0 -44
- package/src/module/communication/strategies/telephone/knowlarity-multi.strategy.ts +0 -158
- package/src/module/communication/strategies/telephone/knowlarity-voice.strategy.ts +0 -44
- /package/dist/module/{communication → integration}/controller/calender-event.controller.d.ts +0 -0
- /package/dist/module/{communication → integration}/controller/calender-event.controller.js +0 -0
- /package/dist/module/{communication → integration}/controller/wrapper.controller.js +0 -0
- /package/dist/module/{communication → integration}/factories/base.factory.js +0 -0
- /package/dist/module/{communication → integration}/factories/whatsapp.factory.js +0 -0
- /package/dist/module/{communication → integration}/service/calendar-event.service.d.ts +0 -0
- /package/dist/module/{communication → integration}/service/calendar-event.service.js +0 -0
- /package/dist/module/{communication → integration}/service/oauth.service.d.ts +0 -0
- /package/dist/module/{communication → integration}/strategies/email/outlook-api.strategy.js +0 -0
- /package/dist/module/{communication → integration}/strategies/email/outlook.strategy.js +0 -0
- /package/dist/module/{communication → integration}/strategies/email/sendgrid-api.strategy.js +0 -0
- /package/dist/module/{communication → integration}/strategies/whatsapp/whatsapp-cloud.strategy.js +0 -0
- /package/dist/module/{communication → integration}/strategies/whatsapp/whatsapp.strategy.js +0 -0
- /package/src/module/{communication → integration}/controller/calender-event.controller.ts +0 -0
- /package/src/module/{communication → integration}/controller/wrapper.controller.ts +0 -0
- /package/src/module/{communication → integration}/service/calendar-event.service.ts +0 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# Event-Driven Integration Module Design (NestJS)
|
|
2
|
+
|
|
3
|
+
## 1. Goal
|
|
4
|
+
Introduce **Event-Driven Architecture (EDA)** into the integration module to:
|
|
5
|
+
- Decouple producers (e.g., order service, user service) from message delivery logic.
|
|
6
|
+
- Support asynchronous message processing, retries, and multi-level fallback.
|
|
7
|
+
- Allow smooth transition from in-memory events to external brokers like Kafka or RabbitMQ.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 2. Current State
|
|
12
|
+
- **Database Tables**:
|
|
13
|
+
- `cr_integration_config` (stores provider configuration JSON and level mapping)
|
|
14
|
+
- **Factory Pattern**:
|
|
15
|
+
- Uses `IntegrationFactory` to select strategies (e.g., Gmail API, Twilio SMS, WhatsApp Cloud).
|
|
16
|
+
- **Service Layer**:
|
|
17
|
+
- Provides methods for sending messages (generic and type-specific).
|
|
18
|
+
- Currently invoked directly by producers.
|
|
19
|
+
- **Fallback Hierarchy**:
|
|
20
|
+
- Resolution order: user → team → project → department → organization.
|
|
21
|
+
|
|
22
|
+
### Limitation
|
|
23
|
+
- Tight coupling between producers and `IntegrationService`.
|
|
24
|
+
- Direct synchronous calls, no retry or async pipeline.
|
|
25
|
+
- Fallback handled procedurally inside service.
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 3. Event-Driven Proposal
|
|
30
|
+
|
|
31
|
+
### Core Events
|
|
32
|
+
- **IntegrationRequestedEvent** → emitted whenever any module requests integration.
|
|
33
|
+
- **IntegrationSuccessEvent** → emitted when delivery succeeds.
|
|
34
|
+
- **IntegrationFailedEvent** → emitted when delivery fails.
|
|
35
|
+
- **FallbackRequestedEvent** → emitted when a level-specific config fails, triggering retry with the next fallback level.
|
|
36
|
+
|
|
37
|
+
### Event Flow
|
|
38
|
+
1. A producer (e.g., order service) emits a `IntegrationRequestedEvent`.
|
|
39
|
+
2. The integration module listens for this event.
|
|
40
|
+
3. Delivery attempt is made using the factory and service layer.
|
|
41
|
+
4. Depending on outcome:
|
|
42
|
+
- Success → emit `IntegrationSuccessEvent`.
|
|
43
|
+
- Failure → emit `IntegrationFailedEvent`.
|
|
44
|
+
5. If failure is due to invalid or unavailable provider, emit `FallbackRequestedEvent` and retry at the next level in hierarchy.
|
|
45
|
+
6. Outcome events (`success`/`failed`) can be consumed by analytics, logging, monitoring, or retry queues.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## 4. Components
|
|
50
|
+
|
|
51
|
+
### Event Producers
|
|
52
|
+
- Any module in the system (order, billing, onboarding, etc.) can raise integration requests without depending on the integration module.
|
|
53
|
+
|
|
54
|
+
### Event Handlers
|
|
55
|
+
- Dedicated handlers inside the integration module react to request events, coordinate with the factory and service layer, and trigger outcome events.
|
|
56
|
+
|
|
57
|
+
### Subscribers
|
|
58
|
+
- Separate subscribers for success/failure events handle logging, retries, notifications, and analytics.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## 5. Multi-Level Fallback
|
|
63
|
+
- Instead of handling fallback inside the service, use chained events.
|
|
64
|
+
- When one provider fails, emit a `FallbackRequestedEvent` with the next priority level.
|
|
65
|
+
- A fallback handler retries delivery using the new configuration.
|
|
66
|
+
- This continues until a provider succeeds or the lowest-level configuration (organization) fails.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## 6. Module Wiring
|
|
71
|
+
- Use NestJS `EventEmitterModule` or `@nestjs/cqrs` for in-memory event handling.
|
|
72
|
+
- Define event classes and handlers within the integration module.
|
|
73
|
+
- Export the integration module to make it available across the application.
|
|
74
|
+
- Future enhancement: swap in-memory event emitter with Kafka, RabbitMQ, or Redis for distributed systems.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## 7. Benefits
|
|
79
|
+
- **Loose coupling**: Producers only emit events, no dependency on the integration module.
|
|
80
|
+
- **Resilience**: Fallback and retries managed via events rather than procedural logic.
|
|
81
|
+
- **Scalability**: Easy to extend with new providers or migrate to distributed event brokers.
|
|
82
|
+
- **Observability**: Success and failure events provide clear audit trails.
|
|
83
|
+
- **Future-proof**: In-memory implementation today, external broker tomorrow without major refactor.
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## 8. Next Steps
|
|
88
|
+
1. Define event classes and event bus integration.
|
|
89
|
+
2. Implement core handlers for request, success, failure, and fallback.
|
|
90
|
+
3. Add subscribers for logging and monitoring.
|
|
91
|
+
4. Extend fallback logic into event-driven retry mechanism.
|
|
92
|
+
5. Plan for integration with Kafka/RabbitMQ for production scalability.
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
# Integration Module Documentation
|
|
2
|
+
|
|
3
|
+
## Database Schema
|
|
4
|
+
|
|
5
|
+
### Tables: cr_integration_config
|
|
6
|
+
```sql
|
|
7
|
+
-- Integration configuration storage (merged from cr_communication_config, communication_config_type & communication_hub)
|
|
8
|
+
CREATE TABLE cr_integration_config (
|
|
9
|
+
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
10
|
+
app_code VARCHAR(100) NOT NULL,
|
|
11
|
+
integration_type VARCHAR(20) NOT NULL, -- EMAIL, SMS, WA, TELEPHONE
|
|
12
|
+
integration_provider VARCHAR(100) NOT NULL, -- gmail, outlook, twilio, whatsapp, etc.
|
|
13
|
+
integration_source_id INT NOT NULL, -- Integration source identifier
|
|
14
|
+
level_id INT NOT NULL, -- Level to which this config applies
|
|
15
|
+
level_type VARCHAR(100) NOT NULL, -- 'organization', 'department', 'user', 'project'
|
|
16
|
+
status TINYINT DEFAULT 1, -- 1=active, 0=inactive
|
|
17
|
+
priority INT DEFAULT 1, -- Lower number = higher priority
|
|
18
|
+
is_default BOOLEAN DEFAULT FALSE, -- Whether this is the default config for this level+type
|
|
19
|
+
config_json JSON NOT NULL,
|
|
20
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
21
|
+
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
22
|
+
INDEX idx_level_status (level_id, level_type, status),
|
|
23
|
+
INDEX idx_type_provider (integration_type, integration_provider)
|
|
24
|
+
);
|
|
25
|
+
|
|
26
|
+
-- Integration source master table (existing)
|
|
27
|
+
CREATE TABLE cr_integration_master (
|
|
28
|
+
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
29
|
+
name VARCHAR(100),
|
|
30
|
+
logo VARCHAR(100),
|
|
31
|
+
base_url VARCHAR(100),
|
|
32
|
+
integration_type VARCHAR(20),
|
|
33
|
+
status VARCHAR(100),
|
|
34
|
+
-- ... other BaseEntity fields
|
|
35
|
+
);
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Architecture: Hierarchical Factory Pattern
|
|
39
|
+
|
|
40
|
+
### Strategy Interface
|
|
41
|
+
```ts
|
|
42
|
+
export interface IntegrationStrategy {
|
|
43
|
+
sendMessage(to: string, message: string, config: any): Promise<any>;
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Factory Structure (Integration Type → Provider)
|
|
48
|
+
- **EMAIL**: gmail, outlook, aws-ses, sendgrid, generic
|
|
49
|
+
- **SMS**: twilio, knowlarity
|
|
50
|
+
- **WA**: whatsapp
|
|
51
|
+
- **TELEPHONE**: knowlarity
|
|
52
|
+
|
|
53
|
+
### Main Factory
|
|
54
|
+
```ts
|
|
55
|
+
@Injectable()
|
|
56
|
+
export class IntegrationFactory {
|
|
57
|
+
create(integration_type: string, integration_provider: string): IntegrationStrategy {
|
|
58
|
+
// Returns appropriate strategy instance
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
getAllSupportedCombinations(): Array<{integration_type, integration_provider}> {}
|
|
62
|
+
getSupportedCombinationsForType(integration_type: string): Array<{integration_provider}> {}
|
|
63
|
+
validateCombination(integration_type: string, integration_provider: string): boolean {}
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Service Layer
|
|
68
|
+
```ts
|
|
69
|
+
@Injectable()
|
|
70
|
+
export class IntegrationService {
|
|
71
|
+
// Main send with fallback
|
|
72
|
+
async send(orgId: number, to: string, message: string, type?: string, options: any = {}) {}
|
|
73
|
+
|
|
74
|
+
// Type-specific methods
|
|
75
|
+
async sendEmail(orgId: number, to: string, subject: string, body: string, attachments?: any[]) {}
|
|
76
|
+
async sendSMS(orgId: number, to: string, message: string) {}
|
|
77
|
+
async sendWhatsApp(orgId: number, to: string, message: string, mediaUrl?: string) {}
|
|
78
|
+
|
|
79
|
+
// Bulk & template support
|
|
80
|
+
async sendBulk(orgId: number, recipients: string[], message: string, type?: string) {}
|
|
81
|
+
async sendWithTemplate(orgId: number, to: string, templateId: string, variables: any) {}
|
|
82
|
+
|
|
83
|
+
// Configuration management
|
|
84
|
+
async createConfiguration(orgId: number, configData: any) {}
|
|
85
|
+
async updateConfiguration(hubId: number, configData: any) {}
|
|
86
|
+
async setDefaultProvider(hubId: number) {}
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Provider Configuration Examples
|
|
91
|
+
|
|
92
|
+
### Gmail API
|
|
93
|
+
```json
|
|
94
|
+
{
|
|
95
|
+
"app_code": "MYAPP",
|
|
96
|
+
"integration_type": "EMAIL",
|
|
97
|
+
"integration_provider": "gmail",
|
|
98
|
+
"integration_source_id": 1,
|
|
99
|
+
"config_json": {
|
|
100
|
+
"clientId": "your-client-id.apps.googleusercontent.com",
|
|
101
|
+
"clientSecret": "your-client-secret",
|
|
102
|
+
"refreshToken": "your-refresh-token",
|
|
103
|
+
"accessToken": "your-access-token"
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Gmail SMTP
|
|
109
|
+
```json
|
|
110
|
+
{
|
|
111
|
+
"app_code": "MYAPP",
|
|
112
|
+
"integration_type": "EMAIL",
|
|
113
|
+
"integration_provider": "gmail",
|
|
114
|
+
"integration_source_id": 1,
|
|
115
|
+
"config_json": {
|
|
116
|
+
"email": "your-email@gmail.com",
|
|
117
|
+
"password": "your-app-password",
|
|
118
|
+
"subject": "Default Subject"
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Twilio SMS
|
|
124
|
+
```json
|
|
125
|
+
{
|
|
126
|
+
"app_code": "MYAPP",
|
|
127
|
+
"integration_type": "SMS",
|
|
128
|
+
"integration_provider": "twilio",
|
|
129
|
+
"integration_source_id": 2,
|
|
130
|
+
"config_json": {
|
|
131
|
+
"accountSid": "your-twilio-account-sid",
|
|
132
|
+
"authToken": "your-twilio-auth-token",
|
|
133
|
+
"fromNumber": "+1234567890"
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### WhatsApp Cloud API
|
|
139
|
+
```json
|
|
140
|
+
{
|
|
141
|
+
"app_code": "MYAPP",
|
|
142
|
+
"integration_type": "WA",
|
|
143
|
+
"integration_provider": "whatsapp",
|
|
144
|
+
"integration_source_id": 3,
|
|
145
|
+
"config_json": {
|
|
146
|
+
"accessToken": "your-whatsapp-access-token",
|
|
147
|
+
"phoneNumberId": "your-phone-number-id",
|
|
148
|
+
"apiVersion": "v17.0"
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Knowlarity Voice
|
|
154
|
+
```json
|
|
155
|
+
{
|
|
156
|
+
"app_code": "MYAPP",
|
|
157
|
+
"integration_type": "TELEPHONE",
|
|
158
|
+
"integration_provider": "knowlarity",
|
|
159
|
+
"integration_source_id": 4,
|
|
160
|
+
"config_json": {
|
|
161
|
+
"apiKey": "your-knowlarity-api-key",
|
|
162
|
+
"apiSecret": "your-knowlarity-api-secret",
|
|
163
|
+
"callerNumber": "your-knowlarity-number",
|
|
164
|
+
"callType": "voice",
|
|
165
|
+
"language": "en"
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## API Endpoints
|
|
171
|
+
|
|
172
|
+
```
|
|
173
|
+
POST /integration/send
|
|
174
|
+
POST /integration/config
|
|
175
|
+
GET /integration/level/:id/:type/configs
|
|
176
|
+
POST /integration/gmail/oauth/init
|
|
177
|
+
POST /integration/oauth/callback/gmail
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## Module Structure
|
|
181
|
+
```
|
|
182
|
+
src/module/integration/
|
|
183
|
+
├── controller/integration.controller.ts
|
|
184
|
+
├── entity/integration-config.entity.ts
|
|
185
|
+
├── entity/integration-source.entity.ts
|
|
186
|
+
├── service/integration.service.ts
|
|
187
|
+
├── factories/integration.factory.ts
|
|
188
|
+
├── strategies/gmail.strategy.ts (and others)
|
|
189
|
+
└── integration.module.ts
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## Level Hierarchy (fallback order)
|
|
193
|
+
1. **user** (highest priority)
|
|
194
|
+
2. **team**
|
|
195
|
+
3. **project**
|
|
196
|
+
4. **department**
|
|
197
|
+
5. **organization** (lowest priority)
|
package/package.json
CHANGED
package/src/app.module.ts
CHANGED
|
@@ -16,7 +16,7 @@ import { LayoutPreferenceModule } from './module/layout_preference/layout_prefer
|
|
|
16
16
|
import { WorkflowModule } from './module/workflow/workflow.module';
|
|
17
17
|
import { IcsMeetingModule } from './module/ics/ics.module';
|
|
18
18
|
import { DashboardModule } from './module/dashboard/dashboard.module';
|
|
19
|
-
import {
|
|
19
|
+
import { IntegrationModule } from './module/integration/integration.module';
|
|
20
20
|
import { ScheduleModule } from '@nestjs/schedule';
|
|
21
21
|
import { AuthModule } from './module/auth/auth.module';
|
|
22
22
|
import { WorkflowAutomationModule } from './module/workflow-automation/workflow-automation.module';
|
|
@@ -40,7 +40,7 @@ import { WorkflowAutomationModule } from './module/workflow-automation/workflow-
|
|
|
40
40
|
WorkflowModule,
|
|
41
41
|
IcsMeetingModule,
|
|
42
42
|
DashboardModule,
|
|
43
|
-
|
|
43
|
+
IntegrationModule,
|
|
44
44
|
AuthModule,
|
|
45
45
|
ScheduleModule.forRoot(),
|
|
46
46
|
],
|