@solidstarters/solid-core 1.2.111 → 1.2.113

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 (209) hide show
  1. package/dist/controllers/model-metadata.controller.d.ts +1 -1
  2. package/dist/controllers/model-metadata.controller.d.ts.map +1 -1
  3. package/dist/controllers/model-metadata.controller.js +1 -1
  4. package/dist/controllers/model-metadata.controller.js.map +1 -1
  5. package/dist/controllers/queues-test.controller.d.ts +5 -3
  6. package/dist/controllers/queues-test.controller.d.ts.map +1 -1
  7. package/dist/controllers/queues-test.controller.js +20 -8
  8. package/dist/controllers/queues-test.controller.js.map +1 -1
  9. package/dist/entities/field-metadata.entity.js +1 -1
  10. package/dist/entities/mq-message.entity.d.ts +1 -0
  11. package/dist/entities/mq-message.entity.d.ts.map +1 -1
  12. package/dist/entities/mq-message.entity.js +5 -1
  13. package/dist/entities/mq-message.entity.js.map +1 -1
  14. package/dist/helpers/module-metadata-helper.service.d.ts +1 -0
  15. package/dist/helpers/module-metadata-helper.service.d.ts.map +1 -1
  16. package/dist/helpers/module-metadata-helper.service.js +9 -4
  17. package/dist/helpers/module-metadata-helper.service.js.map +1 -1
  18. package/dist/index.d.ts +3 -3
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +3 -3
  21. package/dist/index.js.map +1 -1
  22. package/dist/interfaces.d.ts +2 -1
  23. package/dist/interfaces.d.ts.map +1 -1
  24. package/dist/interfaces.js +1 -0
  25. package/dist/interfaces.js.map +1 -1
  26. package/dist/jobs/api-email-publisher.service.d.ts +1 -1
  27. package/dist/jobs/api-email-publisher.service.d.ts.map +1 -1
  28. package/dist/jobs/api-email-publisher.service.js +1 -1
  29. package/dist/jobs/api-email-publisher.service.js.map +1 -1
  30. package/dist/jobs/api-email-subscriber.service.d.ts +1 -1
  31. package/dist/jobs/api-email-subscriber.service.d.ts.map +1 -1
  32. package/dist/jobs/api-email-subscriber.service.js +1 -1
  33. package/dist/jobs/api-email-subscriber.service.js.map +1 -1
  34. package/dist/jobs/database/generate-code-publisher.service.d.ts +11 -0
  35. package/dist/jobs/database/generate-code-publisher.service.d.ts.map +1 -0
  36. package/dist/jobs/database/generate-code-publisher.service.js +39 -0
  37. package/dist/jobs/database/generate-code-publisher.service.js.map +1 -0
  38. package/dist/jobs/database/generate-code-queue-options.d.ts +8 -0
  39. package/dist/jobs/database/generate-code-queue-options.d.ts.map +1 -0
  40. package/dist/jobs/database/generate-code-queue-options.js +10 -0
  41. package/dist/jobs/database/generate-code-queue-options.js.map +1 -0
  42. package/dist/jobs/database/generate-code-subscriber.service.d.ts +16 -0
  43. package/dist/jobs/database/generate-code-subscriber.service.d.ts.map +1 -0
  44. package/dist/jobs/database/generate-code-subscriber.service.js +67 -0
  45. package/dist/jobs/database/generate-code-subscriber.service.js.map +1 -0
  46. package/dist/jobs/database/queue-test-db-publisher.service.d.ts +11 -0
  47. package/dist/jobs/database/queue-test-db-publisher.service.d.ts.map +1 -0
  48. package/dist/jobs/database/queue-test-db-publisher.service.js +39 -0
  49. package/dist/jobs/database/queue-test-db-publisher.service.js.map +1 -0
  50. package/dist/jobs/database/queue-test-db-subscriber.service.d.ts +14 -0
  51. package/dist/jobs/database/queue-test-db-subscriber.service.d.ts.map +1 -0
  52. package/dist/jobs/database/queue-test-db-subscriber.service.js +50 -0
  53. package/dist/jobs/database/queue-test-db-subscriber.service.js.map +1 -0
  54. package/dist/jobs/database/test-queue-db-options.d.ts +8 -0
  55. package/dist/jobs/database/test-queue-db-options.d.ts.map +1 -0
  56. package/dist/jobs/database/test-queue-db-options.js +10 -0
  57. package/dist/jobs/database/test-queue-db-options.js.map +1 -0
  58. package/dist/jobs/email-publisher.service.d.ts +1 -1
  59. package/dist/jobs/email-publisher.service.d.ts.map +1 -1
  60. package/dist/jobs/email-publisher.service.js +1 -1
  61. package/dist/jobs/email-publisher.service.js.map +1 -1
  62. package/dist/jobs/email-subscriber.service.d.ts +1 -1
  63. package/dist/jobs/email-subscriber.service.d.ts.map +1 -1
  64. package/dist/jobs/email-subscriber.service.js +1 -1
  65. package/dist/jobs/email-subscriber.service.js.map +1 -1
  66. package/dist/jobs/otp-publisher.service.d.ts +1 -1
  67. package/dist/jobs/otp-publisher.service.d.ts.map +1 -1
  68. package/dist/jobs/otp-publisher.service.js +1 -1
  69. package/dist/jobs/otp-publisher.service.js.map +1 -1
  70. package/dist/jobs/otp-subscriber.service.d.ts +1 -1
  71. package/dist/jobs/otp-subscriber.service.d.ts.map +1 -1
  72. package/dist/jobs/otp-subscriber.service.js +1 -1
  73. package/dist/jobs/otp-subscriber.service.js.map +1 -1
  74. package/dist/jobs/queue-test-publisher.service.d.ts +1 -1
  75. package/dist/jobs/queue-test-publisher.service.d.ts.map +1 -1
  76. package/dist/jobs/queue-test-publisher.service.js +3 -3
  77. package/dist/jobs/queue-test-publisher.service.js.map +1 -1
  78. package/dist/jobs/queue-test-subscriber.service.d.ts +2 -2
  79. package/dist/jobs/queue-test-subscriber.service.d.ts.map +1 -1
  80. package/dist/jobs/queue-test-subscriber.service.js +9 -3
  81. package/dist/jobs/queue-test-subscriber.service.js.map +1 -1
  82. package/dist/jobs/sms-publisher.service.d.ts +1 -1
  83. package/dist/jobs/sms-publisher.service.d.ts.map +1 -1
  84. package/dist/jobs/sms-publisher.service.js +1 -1
  85. package/dist/jobs/sms-publisher.service.js.map +1 -1
  86. package/dist/jobs/sms-subscriber.service.d.ts +1 -1
  87. package/dist/jobs/sms-subscriber.service.d.ts.map +1 -1
  88. package/dist/jobs/sms-subscriber.service.js +1 -1
  89. package/dist/jobs/sms-subscriber.service.js.map +1 -1
  90. package/dist/jobs/{test-queue.config.d.ts → test-queue-options.d.ts} +1 -1
  91. package/dist/jobs/test-queue-options.d.ts.map +1 -0
  92. package/dist/jobs/{test-queue.config.js → test-queue-options.js} +1 -1
  93. package/dist/jobs/test-queue-options.js.map +1 -0
  94. package/dist/jobs/whatsapp-publisher.service.d.ts +1 -1
  95. package/dist/jobs/whatsapp-publisher.service.d.ts.map +1 -1
  96. package/dist/jobs/whatsapp-publisher.service.js +1 -1
  97. package/dist/jobs/whatsapp-publisher.service.js.map +1 -1
  98. package/dist/jobs/whatsapp-subscriber.service.d.ts +1 -1
  99. package/dist/jobs/whatsapp-subscriber.service.d.ts.map +1 -1
  100. package/dist/jobs/whatsapp-subscriber.service.js +1 -1
  101. package/dist/jobs/whatsapp-subscriber.service.js.map +1 -1
  102. package/dist/seeders/seed-data/solid-core-metadata.json +342 -282
  103. package/dist/services/field-metadata.service.d.ts.map +1 -1
  104. package/dist/services/field-metadata.service.js +4 -1
  105. package/dist/services/field-metadata.service.js.map +1 -1
  106. package/dist/services/import-transaction.service.d.ts +2 -0
  107. package/dist/services/import-transaction.service.d.ts.map +1 -1
  108. package/dist/services/import-transaction.service.js +23 -1
  109. package/dist/services/import-transaction.service.js.map +1 -1
  110. package/dist/services/model-metadata.service.d.ts +11 -4
  111. package/dist/services/model-metadata.service.d.ts.map +1 -1
  112. package/dist/services/model-metadata.service.js +141 -6
  113. package/dist/services/model-metadata.service.js.map +1 -1
  114. package/dist/services/mq-message-queue.service.d.ts.map +1 -1
  115. package/dist/services/mq-message-queue.service.js +1 -0
  116. package/dist/services/mq-message-queue.service.js.map +1 -1
  117. package/dist/services/mq-message.service.d.ts +2 -0
  118. package/dist/services/mq-message.service.d.ts.map +1 -1
  119. package/dist/services/mq-message.service.js +29 -2
  120. package/dist/services/mq-message.service.js.map +1 -1
  121. package/dist/services/queues/database-publisher.service.d.ts +16 -0
  122. package/dist/services/queues/database-publisher.service.d.ts.map +1 -0
  123. package/dist/services/queues/database-publisher.service.js +59 -0
  124. package/dist/services/queues/database-publisher.service.js.map +1 -0
  125. package/dist/services/queues/database-subscriber.service.d.ts +21 -0
  126. package/dist/services/queues/database-subscriber.service.d.ts.map +1 -0
  127. package/dist/services/queues/database-subscriber.service.js +128 -0
  128. package/dist/services/queues/database-subscriber.service.js.map +1 -0
  129. package/dist/services/{rabbitmq-publisher.service.d.ts → queues/rabbitmq-publisher.service.d.ts} +6 -4
  130. package/dist/services/queues/rabbitmq-publisher.service.d.ts.map +1 -0
  131. package/dist/services/{rabbitmq-publisher.service.js → queues/rabbitmq-publisher.service.js} +14 -1
  132. package/dist/services/queues/rabbitmq-publisher.service.js.map +1 -0
  133. package/dist/services/{rabbitmq-subscriber.service.d.ts → queues/rabbitmq-subscriber.service.d.ts} +6 -4
  134. package/dist/services/queues/rabbitmq-subscriber.service.d.ts.map +1 -0
  135. package/dist/services/{rabbitmq-subscriber.service.js → queues/rabbitmq-subscriber.service.js} +14 -10
  136. package/dist/services/queues/rabbitmq-subscriber.service.js.map +1 -0
  137. package/dist/services/queues/redis-publisher.service.d.ts +1 -0
  138. package/dist/services/queues/redis-publisher.service.d.ts.map +1 -0
  139. package/dist/services/queues/redis-publisher.service.js +1 -0
  140. package/dist/services/queues/redis-publisher.service.js.map +1 -0
  141. package/dist/services/queues/redis-subscriber.service.d.ts +1 -0
  142. package/dist/services/queues/redis-subscriber.service.d.ts.map +1 -0
  143. package/dist/services/queues/redis-subscriber.service.js +1 -0
  144. package/dist/services/queues/redis-subscriber.service.js.map +1 -0
  145. package/dist/services/sms/Msg91BaseSMSService.d.ts +1 -1
  146. package/dist/services/sms/Msg91BaseSMSService.d.ts.map +1 -1
  147. package/dist/solid-core.module.d.ts.map +1 -1
  148. package/dist/solid-core.module.js +10 -2
  149. package/dist/solid-core.module.js.map +1 -1
  150. package/dist/subscribers/field-metadata.subscriber.d.ts +10 -0
  151. package/dist/subscribers/field-metadata.subscriber.d.ts.map +1 -0
  152. package/dist/subscribers/field-metadata.subscriber.js +40 -0
  153. package/dist/subscribers/field-metadata.subscriber.js.map +1 -0
  154. package/dist/subscribers/{model.subscriber.d.ts → model-metadata.subscriber.d.ts} +2 -2
  155. package/dist/subscribers/model-metadata.subscriber.d.ts.map +1 -0
  156. package/dist/subscribers/{model.subscriber.js → model-metadata.subscriber.js} +8 -8
  157. package/dist/subscribers/model-metadata.subscriber.js.map +1 -0
  158. package/dist/tsconfig.tsbuildinfo +1 -1
  159. package/package.json +1 -1
  160. package/src/controllers/model-metadata.controller.ts +1 -2
  161. package/src/controllers/queues-test.controller.ts +15 -6
  162. package/src/entities/field-metadata.entity.ts +1 -1
  163. package/src/entities/mq-message.entity.ts +3 -0
  164. package/src/helpers/module-metadata-helper.service.ts +11 -5
  165. package/src/index.ts +3 -3
  166. package/src/interfaces.ts +1 -0
  167. package/src/jobs/api-email-publisher.service.ts +1 -1
  168. package/src/jobs/api-email-subscriber.service.ts +1 -1
  169. package/src/jobs/database/generate-code-publisher.service.ts +23 -0
  170. package/src/jobs/database/generate-code-queue-options.ts +9 -0
  171. package/src/jobs/database/generate-code-subscriber.service.ts +56 -0
  172. package/src/jobs/database/queue-test-db-publisher.service.ts +24 -0
  173. package/src/jobs/database/queue-test-db-subscriber.service.ts +38 -0
  174. package/src/jobs/database/test-queue-db-options.ts +13 -0
  175. package/src/jobs/email-publisher.service.ts +1 -1
  176. package/src/jobs/email-subscriber.service.ts +1 -1
  177. package/src/jobs/otp-publisher.service.ts +1 -1
  178. package/src/jobs/otp-subscriber.service.ts +1 -1
  179. package/src/jobs/queue-test-publisher.service.ts +2 -2
  180. package/src/jobs/queue-test-subscriber.service.ts +10 -2
  181. package/src/jobs/sms-publisher.service.ts +1 -1
  182. package/src/jobs/sms-subscriber.service.ts +1 -1
  183. package/src/jobs/whatsapp-publisher.service.ts +1 -1
  184. package/src/jobs/whatsapp-subscriber.service.ts +1 -1
  185. package/src/seeders/seed-data/solid-core-metadata.json +344 -284
  186. package/src/services/field-metadata.service.ts +5 -5
  187. package/src/services/import-transaction.service.ts +26 -1
  188. package/src/services/model-metadata.service.ts +256 -13
  189. package/src/services/mq-message-queue.service.ts +2 -1
  190. package/src/services/mq-message.service.ts +47 -8
  191. package/src/services/queues/database-publisher.service.ts +79 -0
  192. package/src/services/queues/database-subscriber.service.ts +173 -0
  193. package/src/services/{rabbitmq-publisher.service.ts → queues/rabbitmq-publisher.service.ts} +24 -8
  194. package/src/services/{rabbitmq-subscriber.service.ts → queues/rabbitmq-subscriber.service.ts} +23 -16
  195. package/src/services/queues/redis-publisher.service.ts +0 -0
  196. package/src/services/queues/redis-subscriber.service.ts +0 -0
  197. package/src/services/sms/Msg91BaseSMSService.ts +1 -1
  198. package/src/solid-core.module.ts +10 -2
  199. package/src/subscribers/field-metadata.subscriber.ts +52 -0
  200. package/src/subscribers/{model.subscriber.ts → model-metadata.subscriber.ts} +2 -2
  201. package/dist/jobs/test-queue.config.d.ts.map +0 -1
  202. package/dist/jobs/test-queue.config.js.map +0 -1
  203. package/dist/services/rabbitmq-publisher.service.d.ts.map +0 -1
  204. package/dist/services/rabbitmq-publisher.service.js.map +0 -1
  205. package/dist/services/rabbitmq-subscriber.service.d.ts.map +0 -1
  206. package/dist/services/rabbitmq-subscriber.service.js.map +0 -1
  207. package/dist/subscribers/model.subscriber.d.ts.map +0 -1
  208. package/dist/subscribers/model.subscriber.js.map +0 -1
  209. /package/src/jobs/{test-queue.config.ts → test-queue-options.ts} +0 -0
@@ -0,0 +1,173 @@
1
+ import { Logger, OnModuleInit } from '@nestjs/common';
2
+ import * as amqp from 'amqplib';
3
+ import { QueuesModuleOptions } from "../../interfaces";
4
+ import { QueueMessage, QueueSubscriber } from '../../interfaces/mq';
5
+ import { MqMessageQueueService } from '../mq-message-queue.service';
6
+ import { MqMessageService } from '../mq-message.service';
7
+
8
+
9
+ export abstract class DatabaseSubscriber<T> implements OnModuleInit, QueueSubscriber<T> {
10
+ private readonly logger = new Logger(DatabaseSubscriber.name);
11
+ private readonly url: string;
12
+ private readonly serviceRole: string;
13
+
14
+ constructor(
15
+ protected readonly mqMessageService: MqMessageService,
16
+ protected readonly mqMessageQueueService: MqMessageQueueService,
17
+ ) {
18
+ this.serviceRole = process.env.QUEUES_SERVICE_ROLE;
19
+ if (!this.serviceRole) {
20
+ this.logger.debug('Queue service Role is not defined in the environment variables');
21
+ }
22
+ this.logger.debug(`DatabaseSubscriber instance created with options: ${JSON.stringify(this.options())}`);
23
+ }
24
+
25
+ abstract subscribe(message: QueueMessage<T>);
26
+
27
+ abstract options(): QueuesModuleOptions;
28
+
29
+ private async processNext(queueName: string) {
30
+ // this.logger.debug(`#### DatabaseSubscriber processing next message from queue: ${queueName}`);
31
+ const job = await this.mqMessageService.lockNextPendingMessage(queueName);
32
+ if (!job) {
33
+ return;
34
+ }
35
+
36
+ const messageContentString = job.input.toString();
37
+ // this.logger.debug(`DatabaseSubscriber Received raw message: ${messageContentString}`);
38
+
39
+ let message: QueueMessage<T> = null;
40
+
41
+ try {
42
+ message = JSON.parse(messageContentString) as QueueMessage<T>;
43
+
44
+ // this is the first time we are receiving the message so we set the currentRetry to 0
45
+ if (!message.retryCount) message.retryCount = 0;
46
+ if (!message.retryInterval) message.retryInterval = 1000;
47
+ if (!message.currentRetry) message.currentRetry = 0;
48
+
49
+ await this.processMessage(message);
50
+ }
51
+ catch (error) {
52
+ this.logger.error(`Error processing message: ${error.message}`);
53
+
54
+ // if an error occurs then if retryCount is set we start retrying.
55
+ if (message) {
56
+ if (message.currentRetry < message.retryCount) {
57
+ await this.updateStatusInDatabase('retrying', message);
58
+
59
+ message.currentRetry++;
60
+ this.logger.warn(`Retrying message (${message.currentRetry}/${message.retryCount}) after ${message.retryInterval}ms`);
61
+ setTimeout(() => {
62
+ this.retryMessage(message);
63
+ }, message.retryInterval);
64
+ } else {
65
+ // Discard the message after max retries
66
+ await this.updateStatusInDatabase('failed', message, error.message, '');
67
+ this.logger.error(`Message failed after ${message.retryCount} attempts: ${error.message}`);
68
+ }
69
+ }
70
+ }
71
+ // this.logger.debug(`#### DatabaseSubscriber finished processing message from queue: ${queueName}`);
72
+ }
73
+
74
+ async onModuleInit(): Promise<void> {
75
+ // we will start subscriber only if the current service role is subscriber.
76
+ if (['both', 'subscriber'].includes(this.serviceRole)) {
77
+
78
+ const options = this.options();
79
+
80
+ const queueName = options.queueName;
81
+ // setInterval(() => this.processNext(queueName), 1000);
82
+ const poll = async () => {
83
+ try {
84
+ await this.processNext(queueName);
85
+ } catch (err) {
86
+ this.logger.error(`Polling error: ${err.message}`);
87
+ } finally {
88
+ setTimeout(poll, 1000); // Wait 1s *after* processing finishes
89
+ }
90
+ };
91
+
92
+ // start the loop
93
+ poll();
94
+
95
+ this.logger.debug(`DatabaseSubscriber ready to consume messages: ${JSON.stringify(this.options())}`);
96
+ }
97
+ }
98
+
99
+ /**
100
+ * Abstract method for message processing logic.
101
+ */
102
+ protected async processMessage(message: QueueMessage<T>): Promise<void> {
103
+ await this.updateStatusInDatabase('started', message);
104
+
105
+ // Capture the results of handling the task.
106
+ const result = await this.subscribe(message);
107
+
108
+ // TODO: Update the database to indicate that the task is finished.
109
+ await this.updateStatusInDatabase('succeeded', message, '', result ? JSON.stringify(result, null, 2) : '');
110
+ }
111
+
112
+ /**
113
+ * Retry the message by invoking the processing logic again.
114
+ */
115
+ private async retryMessage(message: QueueMessage<T>) {
116
+ try {
117
+ await this.processMessage(message);
118
+ } catch (error) {
119
+ if (message.currentRetry < message.retryCount) {
120
+ await this.updateStatusInDatabase('retrying', message);
121
+
122
+ message.currentRetry++;
123
+ this.logger.warn(`Retrying message (${message.currentRetry}/${message.retryCount}) after ${message.retryInterval}ms: ${error.message}`);
124
+ setTimeout(() => {
125
+ this.retryMessage(message);
126
+ }, message.retryInterval);
127
+ } else {
128
+ this.logger.error(`Message failed after ${message.retryCount} attempts: ${error.message}`);
129
+
130
+ // TODO: Store the error in the database and update the status accordingly.
131
+ await this.updateStatusInDatabase('failed', message, error.message, '');
132
+
133
+ }
134
+ }
135
+ }
136
+
137
+ private async updateStatusInDatabase(stage: string, message: QueueMessage<T>, error: string = '', result: string = '') {
138
+ try {
139
+ this.logger.debug(`Updating message status in database: ${stage} for messageId: ${message.messageId}`);
140
+
141
+ // 1. resolve the queue first
142
+ const mqMessage = await this.mqMessageService.repo.findOne({
143
+ where: {
144
+ messageId: message.messageId,
145
+ }
146
+ });
147
+
148
+ if (mqMessage) {
149
+ this.logger.debug(`Found message in database: ${JSON.stringify(mqMessage.messageId)}`);
150
+ this.logger.debug(`Updating message status in database: ${stage} for messageId: ${mqMessage.id}`);
151
+
152
+ const updatedFields = {
153
+ stage: stage
154
+ };
155
+ if (stage === 'failed' || stage === 'succeeded') {
156
+ updatedFields['finishedAt'] = new Date();
157
+ updatedFields['elapsedMillis'] = updatedFields['finishedAt'].getTime() - mqMessage.startedAt.getTime();
158
+ }
159
+ if (stage === 'succeeded') {
160
+ updatedFields['output'] = result;
161
+ }
162
+ if (stage === 'failed') {
163
+ updatedFields['error'] = error;
164
+ }
165
+ await this.mqMessageService.repo.update(mqMessage.id, updatedFields);
166
+ this.logger.debug(`Message status updated to ${stage} for messageId: ${mqMessage.id}`);
167
+ }
168
+ }
169
+ catch (error) {
170
+ this.logger.error(error.message, error.stack);
171
+ }
172
+ }
173
+ }
@@ -1,12 +1,12 @@
1
1
  import { Logger } from '@nestjs/common';
2
2
  import * as amqp from 'amqplib';
3
3
  import { v4 as uuidv4 } from 'uuid';
4
- import { QueuesModuleOptions } from "../interfaces";
5
- import { QueueMessage, QueuePublisher } from '../interfaces/mq';
6
- import { MqMessageQueueService } from './mq-message-queue.service';
7
- import { MqMessageService } from './mq-message.service';
4
+ import { QueuesModuleOptions } from "../../interfaces";
5
+ import { QueueMessage, QueuePublisher } from '../../interfaces/mq';
6
+ import { MqMessageQueueService } from '../mq-message-queue.service';
7
+ import { MqMessageService } from '../mq-message.service';
8
8
 
9
- export abstract class RabbitMqPublisher<T> implements QueuePublisher<T> { // TODO This can be made a generic type for better type visibility
9
+ export abstract class RabbitMqPublisher<T> implements QueuePublisher<T> {
10
10
  private readonly logger = new Logger(RabbitMqPublisher.name);
11
11
  private readonly url: string;
12
12
  private readonly serviceRole: string;
@@ -28,6 +28,22 @@ export abstract class RabbitMqPublisher<T> implements QueuePublisher<T> { // TOD
28
28
 
29
29
  abstract options(): QueuesModuleOptions;
30
30
 
31
+ async establishConnection(): Promise<amqp.Connection> {
32
+
33
+ const url = new URL(this.url);
34
+
35
+ const connection = await amqp.connect({
36
+ protocol: url.protocol.replace(':', ''),
37
+ hostname: url.hostname,
38
+ port: parseInt(url.port),
39
+ username: url.username,
40
+ password: url.password,
41
+ frameMax: 131072,
42
+ });
43
+
44
+ return connection
45
+ }
46
+
31
47
  async publish(message: QueueMessage<T>): Promise<string> {
32
48
  if (!this.url) {
33
49
  this.logger.error('RabbitMqPublisher url is not defined in the environment variables');
@@ -44,7 +60,8 @@ export abstract class RabbitMqPublisher<T> implements QueuePublisher<T> { // TOD
44
60
 
45
61
  this.logger.debug(`RabbitMqPublisher publishing with options: ${JSON.stringify(this.options())} and url: ${this.url}`);
46
62
 
47
- const connection = await amqp.connect(this.url);
63
+ // const connection = await amqp.connect(this.url);
64
+ const connection = await this.establishConnection();
48
65
  // this.logger.debug(`RabbitMqPublisher publisher connected options: ${JSON.stringify(this.options())} and url: ${url}`);
49
66
 
50
67
  const channel = await connection.createChannel();
@@ -121,6 +138,7 @@ export abstract class RabbitMqPublisher<T> implements QueuePublisher<T> { // TOD
121
138
 
122
139
  // 2. Next create an entry in the mqMessage table.
123
140
  await this.mqMessageService.create({
141
+ messageBroker: this.options().type,
124
142
  messageId: message.messageId,
125
143
  retryCount: message.retryCount,
126
144
  retryInterval: message.retryInterval,
@@ -137,6 +155,4 @@ export abstract class RabbitMqPublisher<T> implements QueuePublisher<T> { // TOD
137
155
  }
138
156
 
139
157
  }
140
-
141
-
142
158
  }
@@ -1,9 +1,9 @@
1
1
  import { Logger, OnModuleInit } from '@nestjs/common';
2
2
  import * as amqp from 'amqplib';
3
- import { QueuesModuleOptions } from "../interfaces";
4
- import { QueueMessage, QueueSubscriber } from '../interfaces/mq';
5
- import { MqMessageQueueService } from './mq-message-queue.service';
6
- import { MqMessageService } from './mq-message.service';
3
+ import { QueuesModuleOptions } from "../../interfaces";
4
+ import { QueueMessage, QueueSubscriber } from '../../interfaces/mq';
5
+ import { MqMessageQueueService } from '../mq-message-queue.service';
6
+ import { MqMessageService } from '../mq-message.service';
7
7
 
8
8
 
9
9
  export abstract class RabbitMqSubscriber<T> implements OnModuleInit, QueueSubscriber<T> { // TODO This can be made a generic type for better type visibility
@@ -30,21 +30,29 @@ export abstract class RabbitMqSubscriber<T> implements OnModuleInit, QueueSubscr
30
30
 
31
31
  abstract options(): QueuesModuleOptions;
32
32
 
33
+ async establishConnection(): Promise<amqp.Connection> {
34
+
35
+ const url = new URL(this.url);
36
+
37
+ const connection = await amqp.connect({
38
+ protocol: url.protocol.replace(':', ''),
39
+ hostname: url.hostname,
40
+ port: parseInt(url.port),
41
+ username: url.username,
42
+ password: url.password,
43
+ frameMax: 131072,
44
+ });
45
+
46
+ return connection
47
+ }
48
+
33
49
  async onModuleInit(): Promise<void> {
34
50
  // we will start subscriber only if the current service role is subscriber.
35
- if (['both', 'subscriber'].includes(this.serviceRole)) {
36
- if (!this.url) {
37
- this.logger.error('RabbitMqPublisher url is not defined in the environment variables');
38
- throw new Error('RabbitMqPublisher url is not defined in the environment variables');
39
- }
40
-
41
- if (!this.url) {
42
- this.logger.warn(`Unable to create RabbitMqSubscriber instance: ${JSON.stringify(this.options())} as rabbitmq url is not configured.`);
43
- return;
44
- }
51
+ if (this.url && ['both', 'subscriber'].includes(this.serviceRole)) {
45
52
 
46
53
  // this.logger.debug(`RabbitMqSubscriber instance created with options: ${JSON.stringify(this.options())} and url: ${url}`);
47
- const connection = await amqp.connect(this.url);
54
+ // const connection = await amqp.connect(this.url);
55
+ const connection = await this.establishConnection();
48
56
  // this.logger.debug(`RabbitMqSubscriber connection established: ${JSON.stringify(this.options())} and url: ${url}`);
49
57
 
50
58
  const channel = await connection.createChannel();
@@ -115,7 +123,6 @@ export abstract class RabbitMqSubscriber<T> implements OnModuleInit, QueueSubscr
115
123
 
116
124
  this.logger.debug(`RabbitMqSubscriber ready to consume messages: ${JSON.stringify(this.options())} and url: ${this.url}`);
117
125
  }
118
-
119
126
  }
120
127
 
121
128
  /**
File without changes
@@ -5,7 +5,7 @@ import commonConfig from "src/config/common.config";
5
5
  import { SmsQueuePublisher } from "src/jobs/sms-publisher.service";
6
6
  import { QueueMessage } from "src/interfaces/mq";
7
7
  import { SmsTemplateService } from "../sms-template.service";
8
- import { RabbitMqPublisher } from "src/services/rabbitmq-publisher.service";
8
+ import { RabbitMqPublisher } from "src/services/queues/rabbitmq-publisher.service";
9
9
  import { ISMS } from "../../interfaces";
10
10
 
11
11
  export abstract class Msg91BaseSMSService implements ISMS {
@@ -42,7 +42,7 @@ import { RefreshModelCommand } from './commands/refresh-model.command';
42
42
  import { MediaController } from './controllers/media.controller';
43
43
 
44
44
  import { RefreshModuleCommand } from './commands/refresh-module.command';
45
- import { ModelSubscriber } from './subscribers/model.subscriber';
45
+ import { ModelMetadataSubscriber } from './subscribers/model-metadata.subscriber';
46
46
 
47
47
  import { ViewMetadataController } from './controllers/view-metadata.controller';
48
48
  import { ViewMetadata } from './entities/view-metadata.entity';
@@ -88,7 +88,9 @@ import { EmailQueueSubscriber } from './jobs/email-subscriber.service';
88
88
  import { OTPQueuePublisher } from './jobs/otp-publisher.service';
89
89
  import { OTPQueueSubscriber } from './jobs/otp-subscriber.service';
90
90
  import { TestQueuePublisher } from './jobs/queue-test-publisher.service';
91
+ import { TestQueueDbPublisher } from './jobs/database/queue-test-db-publisher.service';
91
92
  import { TestQueueSubscriber } from './jobs/queue-test-subscriber.service';
93
+ import { TestQueueDbSubscriber } from './jobs/database/queue-test-db-subscriber.service';
92
94
  import { SmsQueuePublisher } from './jobs/sms-publisher.service';
93
95
  import { SmsQueueSubscriber } from './jobs/sms-subscriber.service';
94
96
  import { WhatsappQueuePublisher } from './jobs/whatsapp-publisher.service';
@@ -184,6 +186,8 @@ import { LocaleListSelectionProvider } from './services/selection-providers/loca
184
186
  import { CreatedByUpdatedBySubscriber } from './subscribers/created-by-updated-by.subscriber';
185
187
  import { SystemFieldsSeederService } from './seeders/system-fields-seeder.service';
186
188
  import { ModelMetadataHelperService } from './helpers/model-metadata-helper.service';
189
+ import { GenerateCodePublisher } from './jobs/database/generate-code-publisher.service';
190
+ import { GenerateCodeSubscriber } from './jobs/database/generate-code-subscriber.service';
187
191
 
188
192
 
189
193
  @Global()
@@ -320,7 +324,7 @@ import { ModelMetadataHelperService } from './helpers/model-metadata-helper.serv
320
324
  ModuleMetadataSeederService,
321
325
  ListOfValuesService,
322
326
  ListOfValuesSelectionProvider,
323
- ModelSubscriber,
327
+ ModelMetadataSubscriber,
324
328
  ViewMetadataService,
325
329
  ActionMetadataService,
326
330
  MenuItemMetadataService,
@@ -365,6 +369,10 @@ import { ModelMetadataHelperService } from './helpers/model-metadata-helper.serv
365
369
  UserRegistrationListener,
366
370
  TestQueuePublisher,
367
371
  TestQueueSubscriber,
372
+ TestQueueDbPublisher,
373
+ TestQueueDbSubscriber,
374
+ GenerateCodePublisher,
375
+ GenerateCodeSubscriber,
368
376
  MqMessageQueueService,
369
377
  MqMessageService,
370
378
  PermissionMetadataService,
@@ -0,0 +1,52 @@
1
+ import { Injectable, Logger, NotFoundException } from '@nestjs/common';
2
+ import { InjectDataSource } from '@nestjs/typeorm';
3
+ import { ModelMetadataHelperService } from 'src/helpers/model-metadata-helper.service';
4
+ import { DataSource, EntitySubscriberInterface, EventSubscriber, InsertEvent, UpdateEvent } from 'typeorm';
5
+ import { FieldMetadata } from '../entities/field-metadata.entity';
6
+
7
+ @EventSubscriber()
8
+ @Injectable()
9
+ export class FieldMetadataSubscriber implements EntitySubscriberInterface<FieldMetadata> {
10
+ private readonly logger = new Logger(FieldMetadataSubscriber.name);
11
+
12
+ constructor(
13
+ @InjectDataSource()
14
+ private readonly dataSource: DataSource,
15
+ ) {
16
+ this.dataSource.subscribers.push(this);
17
+ }
18
+
19
+ listenTo() {
20
+ return FieldMetadata;
21
+ }
22
+
23
+ async afterUpdate(event: UpdateEvent<FieldMetadata>): Promise<void> {
24
+ // If a field of type relation.many-to-one is marked for removal, and this field had an inverse relation created
25
+ // It means there is a field of type relation.one-to-many in the co-model, which needs to be removed
26
+ // if (event.entity && event.entity.isMarkedForRemoval && event.entity.type === 'relation' && event.entity.relationType === 'many-to-one' && event.entity.relationCreateInverse === true) {
27
+ // const relationCoModelSingularName = event.entity.relationCoModelSingularName;
28
+ // const relationCoModelFieldName = event.entity.relationCoModelFieldName;
29
+
30
+ // // Load the field metadata for the co-model.
31
+ // const coModelFieldMetadata = await this.dataSource
32
+ // .getRepository(FieldMetadata)
33
+ // .findOne({
34
+ // where: {
35
+ // name: relationCoModelFieldName,
36
+ // type: 'relation',
37
+ // relationType: 'one-to-many',
38
+ // model: {
39
+ // singularName: relationCoModelSingularName
40
+ // }
41
+ // },
42
+ // });
43
+
44
+ // // Mark the co-model isMarkedForRemoval field for removal.
45
+ // if (coModelFieldMetadata) {
46
+ // coModelFieldMetadata.isMarkedForRemoval = true;
47
+ // await this.dataSource.getRepository(FieldMetadata).save(coModelFieldMetadata);
48
+ // this.logger.debug(`Marked field ${coModelFieldMetadata.name} in model ${relationCoModelSingularName} for removal.`);
49
+ // }
50
+ // }
51
+ }
52
+ }
@@ -7,8 +7,8 @@ import { ModelMetadata } from '../entities/model-metadata.entity';
7
7
 
8
8
  @EventSubscriber()
9
9
  @Injectable()
10
- export class ModelSubscriber implements EntitySubscriberInterface<ModelMetadata> {
11
- private readonly logger = new Logger(ModelSubscriber.name);
10
+ export class ModelMetadataSubscriber implements EntitySubscriberInterface<ModelMetadata> {
11
+ private readonly logger = new Logger(ModelMetadataSubscriber.name);
12
12
 
13
13
  constructor(
14
14
  @InjectDataSource()
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-queue.config.d.ts","sourceRoot":"","sources":["../../src/jobs/test-queue.config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;;;;;;AAI3C,wBAQE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-queue.config.js","sourceRoot":"","sources":["../../src/jobs/test-queue.config.ts"],"names":[],"mappings":";;AACA,8CAA2C;AAE3C,MAAM,UAAU,GAAG,YAAY,CAAC;AAEhC,kBAAe;IACX,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,uBAAU,CAAC,QAAQ;IACzB,SAAS,EAAE,UAAU;CAKxB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"rabbitmq-publisher.service.d.ts","sourceRoot":"","sources":["../../src/services/rabbitmq-publisher.service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,8BAAsB,iBAAiB,CAAC,CAAC,CAAE,YAAW,cAAc,CAAC,CAAC,CAAC;IAM/D,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB;IACrD,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;IANnE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsC;IAC7D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAGd,gBAAgB,EAAE,gBAAgB,EAClC,qBAAqB,EAAE,qBAAqB;IAanE,QAAQ,CAAC,OAAO,IAAI,mBAAmB;IAEjC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;YAoF1C,iBAAiB;CA2BlC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"rabbitmq-publisher.service.js","sourceRoot":"","sources":["../../src/services/rabbitmq-publisher.service.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"rabbitmq-subscriber.service.d.ts","sourceRoot":"","sources":["../../src/services/rabbitmq-subscriber.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGxD,8BAAsB,kBAAkB,CAAC,CAAC,CAAE,YAAW,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC;IAM/E,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB;IACrD,SAAS,CAAC,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;IANnE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAC9D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAGd,gBAAgB,EAAE,gBAAgB,EAClC,qBAAqB,EAAE,qBAAqB;IAanE,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;IAE3C,QAAQ,CAAC,OAAO,IAAI,mBAAmB;IAEjC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;cA2FnB,cAAc,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,UAAU,KAAA,EAAE,OAAO,KAAA,GAAG,OAAO,CAAC,IAAI,CAAC;YAiB9E,YAAY;YA0BZ,sBAAsB;CAkCvC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"rabbitmq-subscriber.service.js","sourceRoot":"","sources":["../../src/services/rabbitmq-subscriber.service.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"model.subscriber.d.ts","sourceRoot":"","sources":["../../src/subscribers/model.subscriber.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,yBAAyB,EAAmB,WAAW,EAAE,MAAM,SAAS,CAAC;AAE9F,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAElE,qBAEa,eAAgB,YAAW,yBAAyB,CAAC,aAAa,CAAC;IAK5E,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IALrC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;gBAIxC,UAAU,EAAE,UAAU,EACtB,kBAAkB,EAAE,0BAA0B;IAKjE,QAAQ;IAIF,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAYnE,OAAO,CAAC,4BAA4B;CASrC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"model.subscriber.js","sourceRoot":"","sources":["../../src/subscribers/model.subscriber.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAuE;AACvE,6CAAmD;AACnD,4FAAuF;AACvF,qCAA8F;AAC9F,6EAAkE;AAClE,6EAAkE;AAI3D,IAAM,eAAe,uBAArB,MAAM,eAAe;IAG1B,YAEE,UAAuC,EACtB,kBAA8C;QAD9C,eAAU,GAAV,UAAU,CAAY;QACtB,uBAAkB,GAAlB,kBAAkB,CAA4B;QALhD,WAAM,GAAG,IAAI,eAAM,CAAC,iBAAe,CAAC,IAAI,CAAC,CAAC;QAOzD,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,QAAQ;QACN,OAAO,qCAAa,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAAiC;QACjD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0DAA0D,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QAEzG,MAAM,kBAAkB,GAAG,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC;QACtD,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,MAAM,IAAI,0BAAiB,CAAC,+BAA+B,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,kBAAkB,CAAC,IAAI,CAAC,qCAAa,EAAE,IAAI,CAAC,4BAA4B,CAAC,KAAK,CAAC,CAAC,CAAC;IACzF,CAAC;IAGO,4BAA4B,CAAC,KAAiC;QACpE,MAAM,2BAA2B,GAAG,IAAI,CAAC,kBAAkB,CAAC,uBAAuB,EAAE,CAAC;QAEtF,MAAM,oBAAoB,GAAG,2BAA2B,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACrE,GAAG,KAAK;YACR,KAAK,EAAE,KAAK,CAAC,MAAM;SACpB,CAAC,CAAC,CAAC;QACJ,OAAO,oBAAoB,CAAC;IAC9B,CAAC;CACF,CAAA;AApCY,0CAAe;0BAAf,eAAe;IAF3B,IAAA,yBAAe,GAAE;IACjB,IAAA,mBAAU,GAAE;IAKR,WAAA,IAAA,0BAAgB,GAAE,CAAA;qCACU,oBAAU;QACF,0DAA0B;GANtD,eAAe,CAoC3B"}