@solidxai/core 0.0.2 → 0.1.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 (116) hide show
  1. package/dist/dtos/create-saved-filters.dto.d.ts.map +1 -1
  2. package/dist/dtos/create-saved-filters.dto.js.map +1 -1
  3. package/dist/entities/chatter-message.entity.d.ts.map +1 -1
  4. package/dist/entities/chatter-message.entity.js +2 -0
  5. package/dist/entities/chatter-message.entity.js.map +1 -1
  6. package/dist/helpers/schematic.service.d.ts.map +1 -1
  7. package/dist/helpers/schematic.service.js +5 -1
  8. package/dist/helpers/schematic.service.js.map +1 -1
  9. package/dist/jobs/api-email-queue-options.d.ts.map +1 -1
  10. package/dist/jobs/api-email-queue-options.js +2 -2
  11. package/dist/jobs/api-email-queue-options.js.map +1 -1
  12. package/dist/jobs/chatter-queue-options.js +2 -2
  13. package/dist/jobs/chatter-queue-options.js.map +1 -1
  14. package/dist/jobs/computed-field-evaluation-queue-options.js +2 -2
  15. package/dist/jobs/computed-field-evaluation-queue-options.js.map +1 -1
  16. package/dist/jobs/database/api-email-queue-options-database.js +2 -2
  17. package/dist/jobs/database/api-email-queue-options-database.js.map +1 -1
  18. package/dist/jobs/database/computed-field-evaluation-queue-options-database.js +2 -2
  19. package/dist/jobs/database/computed-field-evaluation-queue-options-database.js.map +1 -1
  20. package/dist/jobs/database/generate-code-queue-options-database.js +2 -2
  21. package/dist/jobs/database/generate-code-queue-options-database.js.map +1 -1
  22. package/dist/jobs/database/msg91-sms-queue-database-options.d.ts.map +1 -1
  23. package/dist/jobs/database/msg91-sms-queue-database-options.js +2 -2
  24. package/dist/jobs/database/msg91-sms-queue-database-options.js.map +1 -1
  25. package/dist/jobs/database/msg91-whatsapp-queue-options-database.js +2 -2
  26. package/dist/jobs/database/msg91-whatsapp-queue-options-database.js.map +1 -1
  27. package/dist/jobs/database/otp-queue-options-database.d.ts.map +1 -1
  28. package/dist/jobs/database/otp-queue-options-database.js +2 -2
  29. package/dist/jobs/database/otp-queue-options-database.js.map +1 -1
  30. package/dist/jobs/database/smtp-email-queue-options-database.js +1 -1
  31. package/dist/jobs/database/smtp-email-queue-options-database.js.map +1 -1
  32. package/dist/jobs/database/test-queue-options-database.js +2 -2
  33. package/dist/jobs/database/test-queue-options-database.js.map +1 -1
  34. package/dist/jobs/database/three60-whatsapp-queue-options-database.js +2 -2
  35. package/dist/jobs/database/three60-whatsapp-queue-options-database.js.map +1 -1
  36. package/dist/jobs/database/trigger-mcp-client-queue-options.js +2 -2
  37. package/dist/jobs/database/trigger-mcp-client-queue-options.js.map +1 -1
  38. package/dist/jobs/database/twilio-sms-queue-database-options.js +2 -2
  39. package/dist/jobs/database/twilio-sms-queue-database-options.js.map +1 -1
  40. package/dist/jobs/generate-code-queue-options.js +2 -2
  41. package/dist/jobs/generate-code-queue-options.js.map +1 -1
  42. package/dist/jobs/msg91-otp-queue-options.d.ts.map +1 -1
  43. package/dist/jobs/msg91-otp-queue-options.js +2 -2
  44. package/dist/jobs/msg91-otp-queue-options.js.map +1 -1
  45. package/dist/jobs/msg91-sms-queue-options.d.ts.map +1 -1
  46. package/dist/jobs/msg91-sms-queue-options.js +2 -2
  47. package/dist/jobs/msg91-sms-queue-options.js.map +1 -1
  48. package/dist/jobs/msg91-whatsapp-queue-options.d.ts.map +1 -1
  49. package/dist/jobs/msg91-whatsapp-queue-options.js +2 -2
  50. package/dist/jobs/msg91-whatsapp-queue-options.js.map +1 -1
  51. package/dist/jobs/smtp-email-queue-options.d.ts.map +1 -1
  52. package/dist/jobs/smtp-email-queue-options.js +1 -1
  53. package/dist/jobs/smtp-email-queue-options.js.map +1 -1
  54. package/dist/jobs/test-queue-options.d.ts.map +1 -1
  55. package/dist/jobs/test-queue-options.js +2 -2
  56. package/dist/jobs/test-queue-options.js.map +1 -1
  57. package/dist/jobs/three60-whatsapp-queue-options.d.ts.map +1 -1
  58. package/dist/jobs/three60-whatsapp-queue-options.js +2 -2
  59. package/dist/jobs/three60-whatsapp-queue-options.js.map +1 -1
  60. package/dist/jobs/three60-whatsapp-subscriber.service.js +2 -2
  61. package/dist/jobs/three60-whatsapp-subscriber.service.js.map +1 -1
  62. package/dist/jobs/trigger-mcp-client-queue-options.js +2 -2
  63. package/dist/jobs/trigger-mcp-client-queue-options.js.map +1 -1
  64. package/dist/jobs/twilio-sms-queue-options.js +2 -2
  65. package/dist/jobs/twilio-sms-queue-options.js.map +1 -1
  66. package/dist/services/chatter-message.service.d.ts.map +1 -1
  67. package/dist/services/chatter-message.service.js +8 -1
  68. package/dist/services/chatter-message.service.js.map +1 -1
  69. package/dist/services/crud-helper.service.js.map +1 -1
  70. package/dist/services/queues/database-publisher.service.js +0 -1
  71. package/dist/services/queues/database-publisher.service.js.map +1 -1
  72. package/dist/services/queues/database-subscriber.service.d.ts.map +1 -1
  73. package/dist/services/queues/database-subscriber.service.js +14 -1
  74. package/dist/services/queues/database-subscriber.service.js.map +1 -1
  75. package/dist/services/queues/rabbitmq-subscriber.service.d.ts.map +1 -1
  76. package/dist/services/queues/rabbitmq-subscriber.service.js +18 -3
  77. package/dist/services/queues/rabbitmq-subscriber.service.js.map +1 -1
  78. package/dist/services/scheduled-jobs/scheduler.service.d.ts +1 -0
  79. package/dist/services/scheduled-jobs/scheduler.service.d.ts.map +1 -1
  80. package/dist/services/scheduled-jobs/scheduler.service.js +26 -10
  81. package/dist/services/scheduled-jobs/scheduler.service.js.map +1 -1
  82. package/dist/tsconfig.tsbuildinfo +1 -1
  83. package/package.json +1 -1
  84. package/src/dtos/create-saved-filters.dto.ts +10 -1
  85. package/src/entities/chatter-message.entity.ts +11 -1
  86. package/src/helpers/schematic.service.ts +5 -1
  87. package/src/jobs/api-email-queue-options.ts +2 -6
  88. package/src/jobs/chatter-queue-options.ts +2 -2
  89. package/src/jobs/computed-field-evaluation-queue-options.ts +2 -2
  90. package/src/jobs/database/api-email-queue-options-database.ts +2 -2
  91. package/src/jobs/database/computed-field-evaluation-queue-options-database.ts +2 -2
  92. package/src/jobs/database/generate-code-queue-options-database.ts +2 -2
  93. package/src/jobs/database/msg91-sms-queue-database-options.ts +3 -2
  94. package/src/jobs/database/msg91-whatsapp-queue-options-database.ts +2 -2
  95. package/src/jobs/database/otp-queue-options-database.ts +3 -2
  96. package/src/jobs/database/smtp-email-queue-options-database.ts +1 -1
  97. package/src/jobs/database/test-queue-options-database.ts +2 -2
  98. package/src/jobs/database/three60-whatsapp-queue-options-database.ts +2 -2
  99. package/src/jobs/database/trigger-mcp-client-queue-options.ts +2 -2
  100. package/src/jobs/database/twilio-sms-queue-database-options.ts +2 -2
  101. package/src/jobs/generate-code-queue-options.ts +2 -2
  102. package/src/jobs/msg91-otp-queue-options.ts +3 -8
  103. package/src/jobs/msg91-sms-queue-options.ts +3 -6
  104. package/src/jobs/msg91-whatsapp-queue-options.ts +4 -7
  105. package/src/jobs/smtp-email-queue-options.ts +1 -6
  106. package/src/jobs/test-queue-options.ts +2 -6
  107. package/src/jobs/three60-whatsapp-queue-options.ts +4 -7
  108. package/src/jobs/three60-whatsapp-subscriber.service.ts +1 -1
  109. package/src/jobs/trigger-mcp-client-queue-options.ts +2 -2
  110. package/src/jobs/twilio-sms-queue-options.ts +3 -3
  111. package/src/services/chatter-message.service.ts +32 -26
  112. package/src/services/crud-helper.service.ts +1 -1
  113. package/src/services/queues/database-publisher.service.ts +1 -1
  114. package/src/services/queues/database-subscriber.service.ts +17 -28
  115. package/src/services/queues/rabbitmq-subscriber.service.ts +21 -5
  116. package/src/services/scheduled-jobs/scheduler.service.ts +31 -14
@@ -1 +1 @@
1
- {"version":3,"file":"three60-whatsapp-queue-options.js","sourceRoot":"","sources":["../../src/jobs/three60-whatsapp-queue-options.ts"],"names":[],"mappings":";;AAAA,8CAA2C;AAE3C,MAAM,oBAAoB,GAAG,wBAAwB,CAAC;AACtD,kBAAe;IACX,IAAI,EAAE,kBAAkB;IACxB,IAAI,EAAE,uBAAU,CAAC,QAAQ;IACzB,SAAS,EAAE,oBAAoB;CAKlC,CAAC","sourcesContent":["import { BrokerType } from \"../interfaces\";\n\nconst _WHATSAPP_QUEUE_NAME = 'three60_whatsapp_queue';\nexport default {\n name: 'whatsappInstance',\n type: BrokerType.RabbitMQ,\n queueName: _WHATSAPP_QUEUE_NAME,\n // receive: async (message: QueueMessage<any>) => { // Default receive handler\n // console.log(`Received message: ${JSON.stringify(message)} from queue ${SMS_QUEUE_NAME}`);\n // return 'Received';\n // },\n};"]}
1
+ {"version":3,"file":"three60-whatsapp-queue-options.js","sourceRoot":"","sources":["../../src/jobs/three60-whatsapp-queue-options.ts"],"names":[],"mappings":";;AAAA,8CAA2C;AAE3C,MAAM,oBAAoB,GAAG,8BAA8B,CAAC;AAE5D,kBAAe;IACX,IAAI,EAAE,oBAAoB;IAC1B,IAAI,EAAE,uBAAU,CAAC,QAAQ;IACzB,SAAS,EAAE,oBAAoB;CAClC,CAAC","sourcesContent":["import { BrokerType } from \"../interfaces\";\n\nconst _WHATSAPP_QUEUE_NAME = 'solid_three60_whatsapp_queue';\n\nexport default {\n name: _WHATSAPP_QUEUE_NAME,\n type: BrokerType.RabbitMQ,\n queueName: _WHATSAPP_QUEUE_NAME,\n};\n"]}
@@ -15,7 +15,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.Three60WhatsappQueueSubscriber = void 0;
16
16
  const common_1 = require("@nestjs/common");
17
17
  const rabbitmq_subscriber_service_1 = require("../services/queues/rabbitmq-subscriber.service");
18
- const msg91_whatsapp_queue_options_1 = __importDefault(require("./msg91-whatsapp-queue-options"));
18
+ const three60_whatsapp_queue_options_1 = __importDefault(require("./three60-whatsapp-queue-options"));
19
19
  const mq_message_service_1 = require("../services/mq-message.service");
20
20
  const mq_message_queue_service_1 = require("../services/mq-message-queue.service");
21
21
  const Three60WhatsappService_1 = require("../services/whatsapp/Three60WhatsappService");
@@ -28,7 +28,7 @@ let Three60WhatsappQueueSubscriber = class Three60WhatsappQueueSubscriber extend
28
28
  }
29
29
  options() {
30
30
  return {
31
- ...msg91_whatsapp_queue_options_1.default
31
+ ...three60_whatsapp_queue_options_1.default
32
32
  };
33
33
  }
34
34
  subscribe(message) {
@@ -1 +1 @@
1
- {"version":3,"file":"three60-whatsapp-subscriber.service.js","sourceRoot":"","sources":["../../src/jobs/three60-whatsapp-subscriber.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAE5C,gGAAqF;AAErF,kGAAkE;AAClE,uEAAmE;AACnE,mFAA8E;AAE9E,wFAAsF;AAG/E,IAAM,8BAA8B,GAApC,MAAM,8BAA+B,SAAQ,gDAAuB;IACvE,YACqB,eAAuC,EAC/C,gBAAkC,EAClC,qBAA4C;QAErD,KAAK,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;QAJ9B,oBAAe,GAAf,eAAe,CAAwB;QAC/C,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,0BAAqB,GAArB,qBAAqB,CAAuB;IAGzD,CAAC;IAED,OAAO;QACH,OAAO;YACH,GAAG,sCAAoB;SAC1B,CAAA;IACL,CAAC;IAED,SAAS,CAAC,OAA0B;QAChC,IAAI,CAAC,eAAe,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC;CACJ,CAAA;AAlBY,wEAA8B;yCAA9B,8BAA8B;IAD1C,IAAA,mBAAU,GAAE;qCAG6B,+CAAsB;QAC7B,qCAAgB;QACX,gDAAqB;GAJhD,8BAA8B,CAkB1C","sourcesContent":["import { Injectable } from '@nestjs/common';\n\nimport { RabbitMqSubscriber } from 'src/services/queues/rabbitmq-subscriber.service';\nimport { QueueMessage } from 'src/interfaces/mq';\nimport whatsappQueueOptions from './msg91-whatsapp-queue-options';\nimport { MqMessageService } from 'src/services/mq-message.service';\nimport { MqMessageQueueService } from 'src/services/mq-message-queue.service';\nimport { QueuesModuleOptions } from \"../interfaces\";\nimport { Three60WhatsappService } from 'src/services/whatsapp/Three60WhatsappService';\n\n@Injectable()\nexport class Three60WhatsappQueueSubscriber extends RabbitMqSubscriber<any> {\n constructor(\n private readonly whatsappService: Three60WhatsappService,\n readonly mqMessageService: MqMessageService,\n readonly mqMessageQueueService: MqMessageQueueService,\n ) {\n super(mqMessageService, mqMessageQueueService);\n }\n\n options(): QueuesModuleOptions {\n return {\n ...whatsappQueueOptions\n }\n }\n\n subscribe(message: QueueMessage<any>) {\n this.whatsappService.sendWhatsAppMessageSynchronously(message);\n }\n}\n"]}
1
+ {"version":3,"file":"three60-whatsapp-subscriber.service.js","sourceRoot":"","sources":["../../src/jobs/three60-whatsapp-subscriber.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA4C;AAE5C,gGAAqF;AAErF,sGAAoE;AACpE,uEAAmE;AACnE,mFAA8E;AAE9E,wFAAsF;AAG/E,IAAM,8BAA8B,GAApC,MAAM,8BAA+B,SAAQ,gDAAuB;IACvE,YACqB,eAAuC,EAC/C,gBAAkC,EAClC,qBAA4C;QAErD,KAAK,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAAC;QAJ9B,oBAAe,GAAf,eAAe,CAAwB;QAC/C,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,0BAAqB,GAArB,qBAAqB,CAAuB;IAGzD,CAAC;IAED,OAAO;QACH,OAAO;YACH,GAAG,wCAAoB;SAC1B,CAAA;IACL,CAAC;IAED,SAAS,CAAC,OAA0B;QAChC,IAAI,CAAC,eAAe,CAAC,gCAAgC,CAAC,OAAO,CAAC,CAAC;IACnE,CAAC;CACJ,CAAA;AAlBY,wEAA8B;yCAA9B,8BAA8B;IAD1C,IAAA,mBAAU,GAAE;qCAG6B,+CAAsB;QAC7B,qCAAgB;QACX,gDAAqB;GAJhD,8BAA8B,CAkB1C","sourcesContent":["import { Injectable } from '@nestjs/common';\n\nimport { RabbitMqSubscriber } from 'src/services/queues/rabbitmq-subscriber.service';\nimport { QueueMessage } from 'src/interfaces/mq';\nimport whatsappQueueOptions from './three60-whatsapp-queue-options';\nimport { MqMessageService } from 'src/services/mq-message.service';\nimport { MqMessageQueueService } from 'src/services/mq-message-queue.service';\nimport { QueuesModuleOptions } from \"../interfaces\";\nimport { Three60WhatsappService } from 'src/services/whatsapp/Three60WhatsappService';\n\n@Injectable()\nexport class Three60WhatsappQueueSubscriber extends RabbitMqSubscriber<any> {\n constructor(\n private readonly whatsappService: Three60WhatsappService,\n readonly mqMessageService: MqMessageService,\n readonly mqMessageQueueService: MqMessageQueueService,\n ) {\n super(mqMessageService, mqMessageQueueService);\n }\n\n options(): QueuesModuleOptions {\n return {\n ...whatsappQueueOptions\n }\n }\n\n subscribe(message: QueueMessage<any>) {\n this.whatsappService.sendWhatsAppMessageSynchronously(message);\n }\n}\n"]}
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const interfaces_1 = require("../interfaces");
4
- const TRIGGER_MCP_CLIENT_QUEUE_NAME = 'trigger_mcp_client_queue_rabbitmq';
4
+ const TRIGGER_MCP_CLIENT_QUEUE_NAME = 'solid_trigger_mcp_client_queue_rabbitmq';
5
5
  exports.default = {
6
- name: 'triggerMcpClientQueueRabbitmq',
6
+ name: TRIGGER_MCP_CLIENT_QUEUE_NAME,
7
7
  type: interfaces_1.BrokerType.RabbitMQ,
8
8
  queueName: TRIGGER_MCP_CLIENT_QUEUE_NAME,
9
9
  };
@@ -1 +1 @@
1
- {"version":3,"file":"trigger-mcp-client-queue-options.js","sourceRoot":"","sources":["../../src/jobs/trigger-mcp-client-queue-options.ts"],"names":[],"mappings":";;AAAA,8CAA4C;AAE5C,MAAM,6BAA6B,GAAG,mCAAmC,CAAC;AAE1E,kBAAe;IACX,IAAI,EAAE,+BAA+B;IACrC,IAAI,EAAE,uBAAU,CAAC,QAAQ;IACzB,SAAS,EAAE,6BAA6B;CAC3C,CAAC","sourcesContent":["import { BrokerType } from \"src/interfaces\";\n\nconst TRIGGER_MCP_CLIENT_QUEUE_NAME = 'trigger_mcp_client_queue_rabbitmq';\n\nexport default {\n name: 'triggerMcpClientQueueRabbitmq',\n type: BrokerType.RabbitMQ,\n queueName: TRIGGER_MCP_CLIENT_QUEUE_NAME,\n};\n"]}
1
+ {"version":3,"file":"trigger-mcp-client-queue-options.js","sourceRoot":"","sources":["../../src/jobs/trigger-mcp-client-queue-options.ts"],"names":[],"mappings":";;AAAA,8CAA4C;AAE5C,MAAM,6BAA6B,GAAG,yCAAyC,CAAC;AAEhF,kBAAe;IACX,IAAI,EAAE,6BAA6B;IACnC,IAAI,EAAE,uBAAU,CAAC,QAAQ;IACzB,SAAS,EAAE,6BAA6B;CAC3C,CAAC","sourcesContent":["import { BrokerType } from \"src/interfaces\";\n\nconst TRIGGER_MCP_CLIENT_QUEUE_NAME = 'solid_trigger_mcp_client_queue_rabbitmq';\n\nexport default {\n name: TRIGGER_MCP_CLIENT_QUEUE_NAME,\n type: BrokerType.RabbitMQ,\n queueName: TRIGGER_MCP_CLIENT_QUEUE_NAME,\n};\n"]}
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const interfaces_1 = require("../interfaces");
4
- const SMS_QUEUE_NAME = 'twilio_sms_queue_rabbitmq';
4
+ const SMS_QUEUE_NAME = 'solid_twilio_sms_queue_rabbitmq';
5
5
  exports.default = {
6
- name: 'twilioSmsInstanceRabbitmq',
6
+ name: SMS_QUEUE_NAME,
7
7
  type: interfaces_1.BrokerType.RabbitMQ,
8
8
  queueName: SMS_QUEUE_NAME,
9
9
  };
@@ -1 +1 @@
1
- {"version":3,"file":"twilio-sms-queue-options.js","sourceRoot":"","sources":["../../src/jobs/twilio-sms-queue-options.ts"],"names":[],"mappings":";;AAAA,8CAA4C;AAE5C,MAAM,cAAc,GAAG,2BAA2B,CAAC;AAEnD,kBAAe;IACX,IAAI,EAAE,2BAA2B;IACjC,IAAI,EAAE,uBAAU,CAAC,QAAQ;IACzB,SAAS,EAAE,cAAc;CAC5B,CAAC","sourcesContent":["import { BrokerType } from \"src/interfaces\";\n\nconst SMS_QUEUE_NAME = 'twilio_sms_queue_rabbitmq';\n\nexport default {\n name: 'twilioSmsInstanceRabbitmq',\n type: BrokerType.RabbitMQ,\n queueName: SMS_QUEUE_NAME,\n};"]}
1
+ {"version":3,"file":"twilio-sms-queue-options.js","sourceRoot":"","sources":["../../src/jobs/twilio-sms-queue-options.ts"],"names":[],"mappings":";;AAAA,8CAA4C;AAE5C,MAAM,cAAc,GAAG,iCAAiC,CAAC;AAEzD,kBAAe;IACX,IAAI,EAAE,cAAc;IACpB,IAAI,EAAE,uBAAU,CAAC,QAAQ;IACzB,SAAS,EAAE,cAAc;CAC5B,CAAC","sourcesContent":["import { BrokerType } from \"src/interfaces\";\n\nconst SMS_QUEUE_NAME = 'solid_twilio_sms_queue_rabbitmq';\n\nexport default {\n name: SMS_QUEUE_NAME,\n type: BrokerType.RabbitMQ,\n queueName: SMS_QUEUE_NAME,\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"chatter-message.service.d.ts","sourceRoot":"","sources":["../../src/services/chatter-message.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAY,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAIlE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AAEvF,OAAO,EAAE,+BAA+B,EAAE,MAAM,mDAAmD,CAAC;AACpG,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGxD,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,qBACa,qBAAsB,SAAQ,WAAW,CAAC,cAAc,CAAC;IAG9D,QAAQ,CAAC,aAAa,EAAE,aAAa;IAErC,QAAQ,CAAC,IAAI,EAAE,wBAAwB;IAEvC,QAAQ,CAAC,yBAAyB,EAAE,+BAA+B;IAGnE,QAAQ,CAAC,iBAAiB,EAAE,uBAAuB;IACnD,QAAQ,CAAC,SAAS,EAAE,SAAS;IAI7B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;IACrD,OAAO,CAAC,QAAQ,CAAC,0BAA0B;gBAdlC,aAAa,EAAE,aAAa,EAE5B,IAAI,EAAE,wBAAwB,EAE9B,yBAAyB,EAAE,+BAA+B,EAG1D,iBAAiB,EAAE,uBAAuB,EAC1C,SAAS,EAAE,SAAS,EAIZ,iBAAiB,EAAE,uBAAuB,EAClD,qBAAqB,EAAE,qBAAqB,EACpC,0BAA0B,EAAE,0BAA0B;IAKrE,WAAW,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,GAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAO;IA4C7E,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,GAAE,OAAe;IA6D7F,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,EAAE,cAAc,GAAE,GAAG,EAAO,EAAE,YAAY,GAAE,OAAe;IAmH9I,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,EAAE,YAAY,GAAE,OAAe;IAqCxH,OAAO,CAAC,gBAAgB;YAsBV,uBAAuB;IA4CrC,OAAO,CAAC,eAAe;IAmCvB,OAAO,CAAC,uBAAuB;IAgC/B,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,kBAAkB;YASZ,sBAAsB;IA6C9B,kBAAkB,CACpB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,GAAG;;;;;;;;;;;CAmHjB"}
1
+ {"version":3,"file":"chatter-message.service.d.ts","sourceRoot":"","sources":["../../src/services/chatter-message.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAY,aAAa,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAIlE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAC;AAEvF,OAAO,EAAE,+BAA+B,EAAE,MAAM,mDAAmD,CAAC;AACpG,OAAO,EAAE,wBAAwB,EAAE,MAAM,2CAA2C,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGxD,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,qBACa,qBAAsB,SAAQ,WAAW,CAAC,cAAc,CAAC;IAG9D,QAAQ,CAAC,aAAa,EAAE,aAAa;IAErC,QAAQ,CAAC,IAAI,EAAE,wBAAwB;IAEvC,QAAQ,CAAC,yBAAyB,EAAE,+BAA+B;IAGnE,QAAQ,CAAC,iBAAiB,EAAE,uBAAuB;IACnD,QAAQ,CAAC,SAAS,EAAE,SAAS;IAI7B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,QAAQ,CAAC,qBAAqB,EAAE,qBAAqB;IACrD,OAAO,CAAC,QAAQ,CAAC,0BAA0B;gBAdlC,aAAa,EAAE,aAAa,EAE5B,IAAI,EAAE,wBAAwB,EAE9B,yBAAyB,EAAE,+BAA+B,EAG1D,iBAAiB,EAAE,uBAAuB,EAC1C,SAAS,EAAE,SAAS,EAIZ,iBAAiB,EAAE,uBAAuB,EAClD,qBAAqB,EAAE,qBAAqB,EACpC,0BAA0B,EAAE,0BAA0B;IAKrE,WAAW,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,GAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAO;IA4C7E,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,GAAE,OAAe;IA6D7F,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,EAAE,cAAc,GAAE,GAAG,EAAO,EAAE,YAAY,GAAE,OAAe;IAmH9I,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,EAAE,YAAY,GAAE,OAAe;IAqCxH,OAAO,CAAC,gBAAgB;YAsBV,uBAAuB;IA4CrC,OAAO,CAAC,eAAe;IAmCvB,OAAO,CAAC,uBAAuB;IAgC/B,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,kBAAkB;YASZ,sBAAsB;IA+C9B,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG;;;;;;;;;;;CAyH5E"}
@@ -437,6 +437,9 @@ let ChatterMessageService = class ChatterMessageService extends crud_service_1.C
437
437
  });
438
438
  const relatedEntitiesMap = new Map();
439
439
  for (const field of oneToManyFields) {
440
+ if (field.enableAuditTracking === false) {
441
+ continue;
442
+ }
440
443
  const coModelName = field.relationCoModelSingularName;
441
444
  const coModelFieldName = field.relationCoModelFieldName;
442
445
  const coModel = await this.modelMetadataRepo.findOne({
@@ -447,7 +450,11 @@ let ChatterMessageService = class ChatterMessageService extends crud_service_1.C
447
450
  const em = dsName === 'default' ? this.entityManager : this.moduleRef.get(`${dsName}EntityManager`, { strict: false });
448
451
  const relatedEntityRepository = em.getRepository((0, strings_1.classify)(coModelName));
449
452
  const relatedEntities = await relatedEntityRepository.find({
450
- where: { [coModelFieldName]: { id: entityId } }
453
+ select: {
454
+ id: true,
455
+ },
456
+ where: { [coModelFieldName]: { id: entityId } },
457
+ take: 5,
451
458
  });
452
459
  const relatedIds = relatedEntities.map((entity) => entity.id);
453
460
  relatedEntitiesMap.set(field.name, relatedIds);
@@ -1 +1 @@
1
- {"version":3,"file":"chatter-message.service.js","sourceRoot":"","sources":["../../src/services/chatter-message.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAgE;AAChE,uCAAyC;AACzC,6CAAsD;AACtD,qCAAkE;AAElE,oEAAkE;AAClE,sFAAwG;AAExG,4FAAuF;AACvF,4DAAuD;AACvD,yGAAoG;AACpG,yFAAqF;AACrF,uFAAmF;AACnF,uFAAmF;AACnF,iDAAwD;AAExD,+FAAmF;AACnF,+EAAoE;AACpE,mEAAkE;AAClE,uEAAkE;AAE3D,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,0BAA2B;IAClE,YAEa,aAA4B,EAE5B,IAA8B,EAE9B,yBAA0D,EAG1D,iBAA0C,EAC1C,SAAoB,EAIZ,iBAA0C,EAClD,qBAA4C,EACpC,0BAAsD;QAEvE,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,gBAAgB,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;QAhB7D,kBAAa,GAAb,aAAa,CAAe;QAE5B,SAAI,GAAJ,IAAI,CAA0B;QAE9B,8BAAyB,GAAzB,yBAAyB,CAAiC;QAG1D,sBAAiB,GAAjB,iBAAiB,CAAyB;QAC1C,cAAS,GAAT,SAAS,CAAW;QAIZ,sBAAiB,GAAjB,iBAAiB,CAAyB;QAClD,0BAAqB,GAArB,qBAAqB,CAAuB;QACpC,+BAA0B,GAA1B,0BAA0B,CAA4B;IAG3E,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAA8B,EAAE,QAA+B,EAAE;QAC/E,MAAM,cAAc,GAAG,IAAI,uCAAc,EAAE,CAAC;QAC5C,cAAc,CAAC,WAAW,GAAG,gDAAoB,CAAC,MAAM,CAAC;QACzD,cAAc,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,mDAAuB,CAAC,MAAM,CAAC;QACzF,cAAc,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACjD,cAAc,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;QACzD,cAAc,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QAEjD,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,CAAC;QAE9D,IAAI,UAAU,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,UAAU,EAAE,GAAG,CAAC;YAC/B,cAAc,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,MAAM,EAAS,CAAC;QAChD,CAAC;aAAM,CAAC;YACJ,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC;QAC/B,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAE1D,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,CAAC,gBAAgB,EAAE;gBAClF,MAAM,EAAE;oBACJ,KAAK,EAAE,IAAI;oBACX,oBAAoB,EAAE,IAAI;iBAC7B;gBACD,MAAM,EAAE,IAAI;aACf,CAAC,CAAC;YAEH,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC;YAEjH,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;gBACnC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,KAAK,UAAU,CAAC,IAAI,CAAC,CAAC;gBACnF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACnB,MAAM,uBAAuB,GAAG,UAAU,CAAC,oBAAoB,CAAC;oBAChE,MAAM,mBAAmB,GAAG,uBAAuB,CAAC,IAAgC,CAAC;oBACrF,MAAM,eAAe,GAAG,MAAM,IAAA,+CAAuB,EAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;oBAC3F,MAAM,eAAe,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;gBACjE,CAAC;YACL,CAAC;QACL,CAAC;QAED,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,wBAAwB,CAAC,MAAW,EAAE,QAAwB,EAAE,eAAwB,KAAK;QAC/F,IAAI,CAAC,MAAM,EAAE,CAAC;YACV,OAAO;QACX,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;YAC/C,KAAK,EAAE;gBACH,YAAY,EAAE,IAAA,0BAAU,EAAC,QAAQ,CAAC,IAAI,CAAC;aAC1C;YACD,SAAS,EAAE;gBACP,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,IAAI;gBACZ,YAAY,EAAE,IAAI;aACrB;SACJ,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;YACvC,OAAO;QACX,CAAC;QAED,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC5C,KAAK,CAAC,mBAAmB;YACzB,CAAC,CAAC,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;YAC1E,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,YAAY,KAAK,aAAa,CAAC,CACvE,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,CAAC;QAE9D,MAAM,cAAc,GAAG,IAAI,uCAAc,EAAE,CAAC;QAC5C,cAAc,CAAC,WAAW,GAAG,gDAAoB,CAAC,KAAK,CAAC;QACxD,cAAc,CAAC,cAAc,GAAG,mDAAuB,CAAC,YAAY,CAAC;QACrE,cAAc,CAAC,eAAe,GAAG,MAAM,CAAC,EAAE,CAAC;QAC3C,cAAc,CAAC,WAAW,GAAG,KAAK,EAAE,YAAY,CAAC;QACjD,cAAc,CAAC,gBAAgB,GAAG,KAAK,EAAE,WAAW,CAAC;QACrD,cAAc,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;QAChE,cAAc,CAAC,WAAW,GAAG,OAAO,KAAK,EAAE,WAAW,UAAU,CAAC;QAEjE,IAAI,UAAU,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,UAAU,EAAE,GAAG,CAAC;YAC/B,cAAc,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,MAAM,EAAS,CAAC;QAChD,CAAC;aAAM,CAAC;YACJ,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC;QAC/B,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAE1D,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;YAC9B,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;gBACvE,MAAM,aAAa,GAAG,IAAI,sDAAqB,EAAE,CAAC;gBAClD,aAAa,CAAC,cAAc,GAAG,YAAY,CAAC;gBAC5C,aAAa,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;gBACrC,aAAa,CAAC,gBAAgB,GAAG,KAAK,CAAC,WAAW,CAAC;gBACnD,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAC9B,aAAa,CAAC,eAAe,GAAG,IAAI,CAAC;gBACrC,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;gBAClE,aAAa,CAAC,eAAe,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;gBACtF,MAAM,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC7D,CAAC;QACL,CAAC;IACL,CAAC;IAED,KAAK,CAAC,wBAAwB,CAAC,MAAW,EAAE,QAAwB,EAAE,cAAmB,EAAE,iBAAwB,EAAE,EAAE,eAAwB,KAAK;QAChJ,IAAI,CAAC,cAAc,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7B,OAAO;QACX,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;YAC/C,KAAK,EAAE;gBACH,YAAY,EAAE,IAAA,0BAAU,EAAC,QAAQ,CAAC,IAAI,CAAC;aAC1C;YACD,SAAS,EAAE;gBACP,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,IAAI;gBACZ,YAAY,EAAE,IAAI;aACrB;SACJ,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;YACvC,OAAO;QACX,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,kBAAkB,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;QAEhG,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC3C,KAAK,CAAC,mBAAmB;YACzB,CAAC,CAAC,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;YAC1E,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,YAAY,KAAK,aAAa,CAAC,CACvE,CAAC;QAEF,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;QAE/E,MAAM,oBAAoB,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;QACpF,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;QAEjF,IAAI,0BAA0B,GAAG,EAAE,CAAC;QAEpC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,0BAA0B,GAAG,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC7D,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CACpC,CAAC;QACN,CAAC;aAAM,CAAC;YACJ,0BAA0B,GAAG,oBAAoB,CAAC;QACtD,CAAC;QAED,MAAM,uBAAuB,GAAG,iBAAiB,CAAC;QAElD,MAAM,wBAAwB,GAAG,0BAA0B,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YACvE,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5C,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,MAAM,qBAAqB,GAAG,EAAE,CAAC;QACjC,IAAI,uBAAuB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,cAAc,EAAE,uBAAuB,EAAE,QAAQ,CAAC,CAAC;YAEhH,KAAK,MAAM,KAAK,IAAI,uBAAuB,EAAE,CAAC;gBAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACpC,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAEhD,IAAI,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;oBAC1D,qBAAqB,CAAC,IAAI,CAAC;wBACvB,KAAK;wBACL,QAAQ;wBACR,QAAQ;qBACX,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;QACL,CAAC;QAGD,MAAM,gBAAgB,GAAG;YACrB,GAAG,wBAAwB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACtC,KAAK;gBACL,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC5B,QAAQ,EAAE,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC;aACvC,CAAC,CAAC;YACH,GAAG,qBAAqB;SAC3B,CAAC;QAEF,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO;QACX,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,CAAC;QAE9D,MAAM,cAAc,GAAG,IAAI,uCAAc,EAAE,CAAC;QAC5C,cAAc,CAAC,WAAW,GAAG,gDAAoB,CAAC,KAAK,CAAC;QACxD,cAAc,CAAC,cAAc,GAAG,mDAAuB,CAAC,YAAY,CAAC;QACrE,cAAc,CAAC,eAAe,GAAG,MAAM,EAAE,EAAE,CAAC;QAC5C,cAAc,CAAC,WAAW,GAAG,KAAK,EAAE,YAAY,CAAC;QACjD,cAAc,CAAC,gBAAgB,GAAG,KAAK,CAAC,WAAW,CAAC;QACpD,cAAc,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;QAChE,cAAc,CAAC,WAAW,GAAG,GAAG,KAAK,EAAE,WAAW,UAAU,CAAC;QAE7D,IAAI,UAAU,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,UAAU,EAAE,GAAG,CAAC;YAC/B,cAAc,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,MAAM,EAAS,CAAC;QAChD,CAAC;aAAM,CAAC;YACJ,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC;QAC/B,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAE1D,KAAK,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,gBAAgB,EAAE,CAAC;YAC3D,MAAM,aAAa,GAAG,IAAI,sDAAqB,EAAE,CAAC;YAClD,aAAa,CAAC,cAAc,GAAG,YAAY,CAAC;YAC5C,aAAa,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;YACrC,aAAa,CAAC,gBAAgB,GAAG,KAAK,CAAC,WAAW,CAAC;YACnD,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAChE,aAAa,CAAC,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAChE,aAAa,CAAC,eAAe,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACpF,aAAa,CAAC,eAAe,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YACpF,MAAM,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC7D,CAAC;IACL,CAAC;IAED,KAAK,CAAC,wBAAwB,CAAC,MAAW,EAAE,QAAwB,EAAE,cAAmB,EAAE,eAAwB,KAAK;QACpH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;YAC/C,KAAK,EAAE;gBACH,YAAY,EAAE,IAAA,0BAAU,EAAC,QAAQ,CAAC,IAAI,CAAC;aAC1C;YACD,SAAS,EAAE;gBACP,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,IAAI;gBACZ,YAAY,EAAE,IAAI;aACrB;SACJ,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;YACvC,OAAO;QACX,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,uCAAc,EAAE,CAAC;QAC5C,cAAc,CAAC,WAAW,GAAG,gDAAoB,CAAC,KAAK,CAAC;QACxD,cAAc,CAAC,cAAc,GAAG,mDAAuB,CAAC,YAAY,CAAC;QACrE,cAAc,CAAC,eAAe,GAAG,cAAc,EAAE,EAAE,CAAC;QACpD,cAAc,CAAC,WAAW,GAAG,KAAK,EAAE,YAAY,CAAC;QACjD,cAAc,CAAC,gBAAgB,GAAG,KAAK,EAAE,WAAW,CAAC;QACrD,cAAc,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;QAChE,cAAc,CAAC,WAAW,GAAG,GAAG,KAAK,EAAE,WAAW,UAAU,CAAC;QAE7D,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,EAAE,CAAC;QAE9D,IAAI,UAAU,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,UAAU,EAAE,GAAG,CAAC;YAC/B,cAAc,CAAC,IAAI,GAAG,EAAE,EAAE,EAAE,MAAM,EAAS,CAAC;QAChD,CAAC;aAAM,CAAC;YACJ,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC;QAC/B,CAAC;QAED,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACzC,CAAC;IAEO,gBAAgB,CAAC,KAAU,EAAE,KAAU;QAC3C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxC,OAAO,EAAE,CAAC;QACd,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YACxE,OAAO,GAAG,KAAK,EAAE,CAAC;QACtB,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,YAAY,KAAK,aAAa,EAAE,CAAC;gBACvC,OAAO,KAAK,CAAC,EAAE,CAAC;YACpB,CAAC;YACD,IAAI,KAAK,CAAC,YAAY,KAAK,cAAc,EAAE,CAAC;gBACxC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjD,CAAC;QACL,CAAC;QAGD,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC;IAEO,KAAK,CAAC,uBAAuB,CAAC,KAAU,EAAE,KAAU;QACxD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxC,OAAO,EAAE,CAAC;QACd,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YACxE,OAAO,GAAG,KAAK,EAAE,CAAC;QACtB,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,YAAY,KAAK,aAAa,EAAE,CAAC;gBAC3C,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBACb,OAAO,KAAK,CAAC,IAAI,CAAC;gBACtB,CAAC;gBAED,IAAI,CAAC;oBACD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;wBAC1D,KAAK,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,2BAA2B,IAAI,KAAK,CAAC,QAAQ,EAAE;wBAC5E,SAAS,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE;qBAChC,CAAC,CAAC;oBAEH,IAAI,YAAY,IAAI,YAAY,CAAC,YAAY,EAAE,CAAC;wBAChD,MAAM,gBAAgB,GAAG,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC;wBACxD,OAAO,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzE,CAAC;oBAED,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;wBACf,OAAO,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;oBAC3B,CAAC;gBACL,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACb,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;oBAC/D,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC/C,CAAC;YACD,CAAC;YAED,IAAI,KAAK,CAAC,YAAY,KAAK,cAAc,EAAE,CAAC;gBACxC,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnD,CAAC;QACL,CAAC;QAGD,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC;IAEO,eAAe,CAAC,QAAa,EAAE,QAAa;QAChD,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACzC,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YACnD,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,QAAQ,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACvF,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;gBACzD,OAAO,QAAQ,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAC;YACvC,CAAC;YAED,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACrD,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC;oBACtC,OAAO,IAAI,CAAC;gBAChB,CAAC;gBACD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC5D,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC5D,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC7D,CAAC;QACL,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrD,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACjE,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,uBAAuB,CAAC,KAAU,EAAE,QAAa,EAAE,QAAa;QACpE,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS,CAAC,EAAE,CAAC;YACjG,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,KAAK,CAAC,YAAY,KAAK,aAAa,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAC/C,OAAO,KAAK,KAAK,KAAK,CAAC;QAC3B,CAAC;QAED,IAAI,KAAK,CAAC,YAAY,KAAK,cAAc,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAEjD,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClC,OAAO,IAAI,CAAC;YAChB,CAAC;YAED,MAAM,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,CAAC,IAAI,EAAE,CAAC;YAEd,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC7D,CAAC;QAED,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;IAEO,iBAAiB,CAAC,KAAU;QAChC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACzD,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YACtD,OAAO,KAAK,CAAC,EAAE,CAAC;QACpB,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,kBAAkB,CAAC,KAAU;QACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnC,CAAC;QAED,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;IACrF,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAAC,cAAmB,EAAE,cAAqB,EAAE,QAAwB;QACrG,MAAM,eAAe,GAAG,EAAE,GAAG,cAAc,EAAE,CAAC;QAE9C,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACjC,MAAM,aAAa,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEjD,IAAI,aAAa,KAAK,IAAI,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;gBACxD,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC;gBAC5C,SAAS;YACb,CAAC;YAED,MAAM,gBAAgB,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,YAAY,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;YACzF,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACpB,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC;gBAC5C,SAAS;YACb,CAAC;YAED,MAAM,YAAY,GAAG,gBAAgB,CAAC,qBAAqB,IAAI,gBAAgB,CAAC,IAAI,CAAC;YAErF,IAAI,KAAK,CAAC,YAAY,KAAK,aAAa,EAAE,CAAC;gBACvC,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;gBACzD,IAAI,UAAU,EAAE,CAAC;oBACb,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,YAAmB,EAAE;wBACxE,KAAK,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE;qBAC5B,CAAC,CAAC;oBACH,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC;gBAChD,CAAC;qBAAM,CAAC;oBACJ,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC;gBAChD,CAAC;YACL,CAAC;iBAAM,IAAI,KAAK,CAAC,YAAY,KAAK,cAAc,IAAI,KAAK,CAAC,YAAY,KAAK,YAAY,EAAE,CAAC;gBACtF,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;gBAC3D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACzB,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,YAAmB,EAAE,WAAW,CAAC,CAAC;oBAC7F,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC;gBAClD,CAAC;qBAAM,CAAC;oBACJ,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC;gBAChD,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC;YAChD,CAAC;QACL,CAAC;QAED,OAAO,eAAe,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,kBAAkB,CACpB,QAAgB,EAChB,UAAkB,EAClB,KAAU;QAEV,MAAM,EAAE,KAAK,GAAG,EAAE,EAAE,MAAM,GAAG,CAAC,EAAE,QAAQ,GAAG,EAAE,EAAE,aAAa,GAAG,EAAE,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;QAErF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;YAC/C,KAAK,EAAE;gBACH,YAAY,EAAE,UAAU;aAC3B;SACJ,CAAC,CAAC;QACH,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC;YACtD,KAAK,EAAE;gBACH,KAAK,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE;gBACvB,IAAI,EAAE,UAAU;gBAChB,YAAY,EAAE,aAAa;aAC9B;SACJ,CAAC,CAAC;QAEH,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAoB,CAAC;QAEvD,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;YAClC,MAAM,WAAW,GAAG,KAAK,CAAC,2BAA2B,CAAC;YACtD,MAAM,gBAAgB,GAAG,KAAK,CAAC,wBAAwB,CAAC;YAExD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;gBACjD,KAAK,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE;aACvC,CAAC,CAAC;YAEH,IAAI,OAAO,EAAE,CAAC;gBAEV,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,IAAI,SAAS,CAAC;gBAC/C,MAAM,EAAE,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,eAAe,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;gBAEvH,MAAM,uBAAuB,GAAG,EAAE,CAAC,aAAa,CAAC,IAAA,kBAAQ,EAAC,WAAW,CAAC,CAAC,CAAC;gBAExE,MAAM,eAAe,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAAC;oBACvD,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE;iBAClD,CAAC,CAAC;gBAEH,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,MAAW,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACnE,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YACnD,CAAC;QACL,CAAC;QAED,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,mCAAmC,CAAC,QAAQ,CAAC,CAAC;QAEzE,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,MAAM,UAAU,GAAQ,EAAE,CAAC;QAE3B,YAAY,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAC;QAC/F,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC;QACnC,UAAU,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAE/B,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,KAAK,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,kBAAkB,CAAC,OAAO,EAAE,EAAE,CAAC;YACjE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;gBAC9D,IAAI,KAAK,EAAE,CAAC;oBACR,MAAM,WAAW,GAAG,KAAK,CAAC,2BAA2B,CAAC;oBACtD,MAAM,YAAY,GAAG,aAAa,UAAU,EAAE,CAAC;oBAC/C,YAAY,CAAC,IAAI,CAAC,qCAAqC,UAAU,uCAAuC,YAAY,IAAI,CAAC,CAAC;oBAC1H,UAAU,CAAC,cAAc,UAAU,EAAE,CAAC,GAAG,WAAW,CAAC;oBACrD,UAAU,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC;oBACtC,UAAU,EAAE,CAAC;gBACjB,CAAC;YACL,CAAC;QACL,CAAC;QAED,EAAE,CAAC,KAAK,CAAC,IAAI,kBAAQ,CAAC,EAAE,CAAC,EAAE;YACvB,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC,CAAC;QAEJ,MAAM,SAAS,GAAG,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;QACpD,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YACtE,SAAS,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAClF,CAAC;QAED,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;YACzB,EAAE,CAAC,iBAAiB,CAAC,UAAU,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,EAAE,CAAC;YACV,EAAE,CAAC,QAAQ,CAAC,IAAI,kBAAQ,CAAC,OAAO,CAAC,EAAE;gBAC/B,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;YACxE,CAAC,CAAC,CAAC,CAAC;QACR,CAAC;QAED,EAAE,CAAC,OAAO,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;QAEvC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE5B,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,eAAe,EAAE,CAAC;QAErD,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5C,MAAM,uBAAuB,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;YAChF,MAAM,IAAI,CAAC,qBAAqB,CAAC,CAAC,uBAAuB,EAAE,QAAQ,CAAC,CAAC;QACzE,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,WAAW,GAAG,UAAU,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACnE,MAAM,QAAQ,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAE1D,OAAO;YACH,IAAI,EAAE;gBACF,YAAY,EAAE,KAAK;gBACnB,WAAW,EAAE,WAAW;gBACxB,QAAQ,EAAE,QAAQ;gBAClB,QAAQ,EAAE,QAAQ;gBAClB,UAAU,EAAE,UAAU;gBACtB,OAAO,EAAE,CAAC,KAAK;aAClB;YACD,OAAO,EAAE,QAAQ;SACpB,CAAC;IACN,CAAC;CACJ,CAAA;AAxlBY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,mBAAU,GAAE;IAGJ,WAAA,IAAA,6BAAmB,GAAE,CAAA;IAYrB,WAAA,IAAA,eAAM,EAAC,IAAA,mBAAU,EAAC,GAAG,EAAE,CAAC,mDAAuB,CAAC,CAAC,CAAA;qCAX1B,uBAAa;QAEtB,qDAAwB;QAEH,oEAA+B;QAGvC,mDAAuB;QAC/B,gBAAS;QAIO,mDAAuB;QAC3B,+CAAqB;QACR,0DAA0B;GAjBlE,qBAAqB,CAwlBjC","sourcesContent":["import { forwardRef, Inject, Injectable } from '@nestjs/common';\nimport { ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager } from '@nestjs/typeorm';\nimport { Brackets, EntityManager, EntityMetadata } from 'typeorm';\n\nimport { classify } from '@angular-devkit/core/src/utils/strings';\nimport { CHATTER_MESSAGE_SUBTYPE, CHATTER_MESSAGE_TYPE } from 'src/constants/chatter-message.constants';\nimport { PostChatterMessageDto } from 'src/dtos/post-chatter-message.dto';\nimport { ModelMetadataHelperService } from 'src/helpers/model-metadata-helper.service';\nimport { lowerFirst } from 'src/helpers/string.helper';\nimport { ChatterMessageDetailsRepository } from 'src/repository/chatter-message-details.repository';\nimport { ChatterMessageRepository } from 'src/repository/chatter-message.repository';\nimport { FieldMetadataRepository } from 'src/repository/field-metadata.repository';\nimport { ModelMetadataRepository } from 'src/repository/model-metadata.repository';\nimport { CRUDService } from 'src/services/crud.service';\nimport { MediaStorageProviderType } from '../dtos/create-media-storage-provider-metadata.dto';\nimport { ChatterMessageDetails } from '../entities/chatter-message-details.entity';\nimport { ChatterMessage } from '../entities/chatter-message.entity';\nimport { getMediaStorageProvider } from './mediaStorageProviders';\nimport { RequestContextService } from './request-context.service';\n@Injectable()\nexport class ChatterMessageService extends CRUDService<ChatterMessage> {\n constructor(\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(ChatterMessage, 'default')\n readonly repo: ChatterMessageRepository,\n // @InjectRepository(ChatterMessageDetailsRepository, 'default')\n readonly chatterMessageDetailsRepo: ChatterMessageDetailsRepository,\n // @InjectRepository(FieldMetadata, 'default')\n // readonly fieldMetadataRepo: Repository<FieldMetadata>,\n readonly fieldMetadataRepo: FieldMetadataRepository,\n readonly moduleRef: ModuleRef,\n // @InjectRepository(ModelMetadata)\n // private readonly modelMetadataRepo: Repository<ModelMetadata>,\n @Inject(forwardRef(() => ModelMetadataRepository))\n private readonly modelMetadataRepo: ModelMetadataRepository,\n readonly requestContextService: RequestContextService,\n private readonly modelMetadataHelperService: ModelMetadataHelperService,\n ) {\n super(entityManager, repo, 'chatterMessage', 'solid-core', moduleRef);\n }\n\n async postMessage(postDto: PostChatterMessageDto, files: Express.Multer.File[] = []) {\n const chatterMessage = new ChatterMessage();\n chatterMessage.messageType = CHATTER_MESSAGE_TYPE.CUSTOM;\n chatterMessage.messageSubType = postDto.messageSubType || CHATTER_MESSAGE_SUBTYPE.CUSTOM;\n chatterMessage.messageBody = postDto.messageBody;\n chatterMessage.coModelEntityId = postDto.coModelEntityId;\n chatterMessage.coModelName = postDto.coModelName;\n\n const activeUser = this.requestContextService.getActiveUser();\n\n if (activeUser) {\n const userId = activeUser?.sub;\n chatterMessage.user = { id: userId } as any;\n } else {\n chatterMessage.user = null;\n }\n\n const savedMessage = await this.repo.save(chatterMessage);\n\n if (files && files.length > 0) {\n const model = await this.modelMetadataService.findOneBySingularName('chatterMessage', {\n fields: {\n model: true,\n mediaStorageProvider: true,\n },\n module: true,\n });\n\n const mediaFields = model.fields.filter(field => field.type === 'mediaSingle' || field.type === 'mediaMultiple');\n\n for (const mediaField of mediaFields) {\n const media = files.filter(multerFile => multerFile.fieldname === mediaField.name);\n if (media.length > 0) {\n const storageProviderMetadata = mediaField.mediaStorageProvider;\n const storageProviderType = storageProviderMetadata.type as MediaStorageProviderType;\n const storageProvider = await getMediaStorageProvider(this.moduleRef, storageProviderType);\n await storageProvider.store(media, savedMessage, mediaField);\n }\n }\n }\n\n return savedMessage;\n }\n\n async postAuditMessageOnInsert(entity: any, metadata: EntityMetadata, messageQueue: boolean = false) {\n if (!entity) {\n return;\n }\n const model = await this.modelMetadataRepo.findOne({\n where: {\n singularName: lowerFirst(metadata.name)\n },\n relations: {\n fields: true,\n module: true,\n userKeyField: true\n }\n });\n\n if (!model || !model.enableAuditTracking) {\n return;\n }\n\n const auditFields = model.fields.filter(field =>\n field.enableAuditTracking &&\n !['mediaSingle', 'mediaMultiple', 'richText', 'json'].includes(field.type) &&\n !(field.type === 'relation' && field.relationType === 'one-to-many')\n );\n\n const activeUser = this.requestContextService.getActiveUser();\n\n const chatterMessage = new ChatterMessage();\n chatterMessage.messageType = CHATTER_MESSAGE_TYPE.AUDIT;\n chatterMessage.messageSubType = CHATTER_MESSAGE_SUBTYPE.AUDIT_INSERT;\n chatterMessage.coModelEntityId = entity.id;\n chatterMessage.coModelName = model?.singularName;\n chatterMessage.modelDisplayName = model?.displayName;\n chatterMessage.modelUserKey = entity[model?.userKeyField?.name];\n chatterMessage.messageBody = `New ${model?.displayName} created`;\n\n if (activeUser) {\n const userId = activeUser?.sub;\n chatterMessage.user = { id: userId } as any;\n } else {\n chatterMessage.user = null;\n }\n\n const savedMessage = await this.repo.save(chatterMessage);\n\n for (const field of auditFields) {\n const fieldValue = entity[field.name];\n if (fieldValue !== undefined && fieldValue !== null && fieldValue !== '') {\n const messageDetail = new ChatterMessageDetails();\n messageDetail.chatterMessage = savedMessage;\n messageDetail.fieldName = field.name;\n messageDetail.fieldDisplayName = field.displayName;\n messageDetail.oldValue = null;\n messageDetail.oldValueDisplay = null;\n messageDetail.newValue = this.formatFieldValue(field, fieldValue);\n messageDetail.newValueDisplay = await this.formatFieldValueDisplay(field, fieldValue);\n await this.chatterMessageDetailsRepo.save(messageDetail);\n }\n }\n }\n\n async postAuditMessageOnUpdate(entity: any, metadata: EntityMetadata, databaseEntity: any, updatedColumns: any[] = [], messageQueue: boolean = false) {\n if (!databaseEntity || !entity) {\n return;\n }\n const model = await this.modelMetadataRepo.findOne({\n where: {\n singularName: lowerFirst(metadata.name)\n },\n relations: {\n fields: true,\n module: true,\n userKeyField: true\n }\n });\n\n if (!model || !model.enableAuditTracking) {\n return;\n }\n\n const modelFields = await this.modelMetadataHelperService.loadFieldHierarchy(model.singularName)\n\n const auditFields = modelFields.filter(field =>\n field.enableAuditTracking &&\n !['mediaSingle', 'mediaMultiple', 'richText', 'json'].includes(field.type) &&\n !(field.type === 'relation' && field.relationType === 'one-to-many')\n );\n\n const updatedFieldNames = new Set(updatedColumns.map(col => col.propertyName));\n\n const allNonRelationFields = auditFields.filter(field => field.type !== 'relation');\n const allRelationFields = auditFields.filter(field => field.type === 'relation');\n\n let potentialNonRelationFields = [];\n\n if (updatedColumns.length > 0) {\n potentialNonRelationFields = allNonRelationFields.filter(field =>\n updatedFieldNames.has(field.name)\n );\n } else {\n potentialNonRelationFields = allNonRelationFields;\n }\n\n const potentialRelationFields = allRelationFields;\n\n const changedNonRelationFields = potentialNonRelationFields.filter(field => {\n const newValue = entity[field.name];\n const oldValue = databaseEntity[field.name];\n return this.hasValueChanged(newValue, oldValue);\n });\n\n const changedRelationFields = [];\n if (potentialRelationFields.length > 0) {\n const populatedOldEntity = await this.populateRelationFields(databaseEntity, potentialRelationFields, metadata);\n\n for (const field of potentialRelationFields) {\n const newValue = entity[field.name];\n const oldValue = populatedOldEntity[field.name];\n\n if (this.hasRelationValueChanged(field, newValue, oldValue)) {\n changedRelationFields.push({\n field,\n newValue,\n oldValue\n });\n }\n }\n }\n\n\n const allChangedFields = [\n ...changedNonRelationFields.map(field => ({\n field,\n newValue: entity[field.name],\n oldValue: databaseEntity[field.name]\n })),\n ...changedRelationFields\n ];\n\n if (allChangedFields.length === 0) {\n return;\n }\n\n const activeUser = this.requestContextService.getActiveUser();\n\n const chatterMessage = new ChatterMessage();\n chatterMessage.messageType = CHATTER_MESSAGE_TYPE.AUDIT;\n chatterMessage.messageSubType = CHATTER_MESSAGE_SUBTYPE.AUDIT_UPDATE;\n chatterMessage.coModelEntityId = entity?.id;\n chatterMessage.coModelName = model?.singularName;\n chatterMessage.modelDisplayName = model.displayName;\n chatterMessage.modelUserKey = entity[model?.userKeyField?.name];\n chatterMessage.messageBody = `${model?.displayName} updated`;\n\n if (activeUser) {\n const userId = activeUser?.sub;\n chatterMessage.user = { id: userId } as any;\n } else {\n chatterMessage.user = null;\n }\n\n const savedMessage = await this.repo.save(chatterMessage);\n\n for (const { field, newValue, oldValue } of allChangedFields) {\n const messageDetail = new ChatterMessageDetails();\n messageDetail.chatterMessage = savedMessage;\n messageDetail.fieldName = field.name;\n messageDetail.fieldDisplayName = field.displayName;\n messageDetail.oldValue = this.formatFieldValue(field, oldValue);\n messageDetail.newValue = this.formatFieldValue(field, newValue);\n messageDetail.oldValueDisplay = await this.formatFieldValueDisplay(field, oldValue);\n messageDetail.newValueDisplay = await this.formatFieldValueDisplay(field, newValue);\n await this.chatterMessageDetailsRepo.save(messageDetail);\n }\n }\n\n async postAuditMessageOnDelete(entity: any, metadata: EntityMetadata, databaseEntity: any, messageQueue: boolean = false) {\n const model = await this.modelMetadataRepo.findOne({\n where: {\n singularName: lowerFirst(metadata.name)\n },\n relations: {\n fields: true,\n module: true,\n userKeyField: true\n }\n });\n\n if (!model || !model.enableAuditTracking) {\n return;\n }\n\n const chatterMessage = new ChatterMessage();\n chatterMessage.messageType = CHATTER_MESSAGE_TYPE.AUDIT;\n chatterMessage.messageSubType = CHATTER_MESSAGE_SUBTYPE.AUDIT_DELETE;\n chatterMessage.coModelEntityId = databaseEntity?.id;\n chatterMessage.coModelName = model?.singularName;\n chatterMessage.modelDisplayName = model?.displayName;\n chatterMessage.modelUserKey = entity[model?.userKeyField?.name];\n chatterMessage.messageBody = `${model?.displayName} deleted`;\n\n const activeUser = this.requestContextService.getActiveUser();\n\n if (activeUser) {\n const userId = activeUser?.sub;\n chatterMessage.user = { id: userId } as any;\n } else {\n chatterMessage.user = null;\n }\n\n await this.repo.save(chatterMessage);\n }\n\n private formatFieldValue(field: any, value: any): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n if (field.type === 'selectionStatic' || field.type === 'selectionDynamic') {\n return `${value}`;\n }\n\n if (field.type === 'relation') {\n if (field.relationType === \"many-to-one\") {\n return value.id;\n }\n if (field.relationType === 'many-to-many') {\n return value.map(item => item.id).join(', ');\n }\n }\n\n\n return value.toString();\n }\n\n private async formatFieldValueDisplay(field: any, value: any): Promise<string> {\n if (value === null || value === undefined) {\n return '';\n }\n\n if (field.type === 'selectionStatic' || field.type === 'selectionDynamic') {\n return `${value}`;\n }\n\n if (field.type === 'relation') {\n if (field.relationType === \"many-to-one\") {\n if (value.name) {\n return value.name;\n }\n \n try {\n const relatedModel = await this.modelMetadataRepo.findOne({\n where: { singularName: field.relationCoModelSingularName || field.relation },\n relations: { userKeyField: true }\n });\n \n if (relatedModel && relatedModel.userKeyField) {\n const userKeyFieldName = relatedModel.userKeyField.name;\n return value[userKeyFieldName] ? value[userKeyFieldName].toString() : '';\n }\n \n if (value.id) {\n return value.id.toString();\n }\n } catch (error) {\n console.error('Error fetching related model metadata:', error);\n return value.id ? value.id.toString() : '';\n }\n }\n\n if (field.relationType === 'many-to-many') {\n return value.map(item => item.name).join(', ');\n }\n }\n\n\n return value.toString();\n }\n\n private hasValueChanged(newValue: any, oldValue: any): boolean {\n if (newValue === oldValue) {\n return false;\n }\n\n if (newValue === null && oldValue === null) {\n return false;\n }\n\n if (newValue === undefined && oldValue === undefined) {\n return false;\n }\n\n if (newValue && oldValue && typeof newValue === 'object' && typeof oldValue === 'object') {\n if (newValue.id !== undefined && oldValue.id !== undefined) {\n return newValue.id !== oldValue.id;\n }\n\n if (Array.isArray(newValue) && Array.isArray(oldValue)) {\n if (newValue.length !== oldValue.length) {\n return true;\n }\n const newIds = newValue.map(item => item.id || item).sort();\n const oldIds = oldValue.map(item => item.id || item).sort();\n return JSON.stringify(newIds) !== JSON.stringify(oldIds);\n }\n }\n\n if (Array.isArray(newValue) && Array.isArray(oldValue)) {\n return JSON.stringify(newValue) !== JSON.stringify(oldValue);\n }\n\n return true;\n }\n\n private hasRelationValueChanged(field: any, newValue: any, oldValue: any): boolean {\n if (newValue === oldValue) {\n return false;\n }\n\n if ((newValue === null || newValue === undefined) && (oldValue === null || oldValue === undefined)) {\n return false;\n }\n\n if (field.relationType === 'many-to-one') {\n const newId = this.extractRelationId(newValue);\n const oldId = this.extractRelationId(oldValue);\n return newId !== oldId;\n }\n\n if (field.relationType === 'many-to-many') {\n const newIds = this.extractRelationIds(newValue);\n const oldIds = this.extractRelationIds(oldValue);\n\n if (newIds.length !== oldIds.length) {\n return true;\n }\n\n newIds.sort();\n oldIds.sort();\n\n return JSON.stringify(newIds) !== JSON.stringify(oldIds);\n }\n\n return this.hasValueChanged(newValue, oldValue);\n }\n\n private extractRelationId(value: any): any {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n return value;\n }\n\n if (typeof value === 'object' && value.id !== undefined) {\n return value.id;\n }\n\n return null;\n }\n\n private extractRelationIds(value: any): any[] {\n if (!Array.isArray(value)) {\n const id = this.extractRelationId(value);\n return id !== null ? [id] : [];\n }\n\n return value.map(item => this.extractRelationId(item)).filter(id => id !== null);\n }\n\n private async populateRelationFields(databaseEntity: any, relationFields: any[], metadata: EntityMetadata): Promise<any> {\n const populatedEntity = { ...databaseEntity };\n\n for (const field of relationFields) {\n const relationValue = databaseEntity[field.name];\n\n if (relationValue === null || relationValue === undefined) {\n populatedEntity[field.name] = relationValue;\n continue;\n }\n\n const relationMetadata = metadata.relations.find(rel => rel.propertyName === field.name);\n if (!relationMetadata) {\n populatedEntity[field.name] = relationValue;\n continue;\n }\n\n const targetEntity = relationMetadata.inverseEntityMetadata || relationMetadata.type;\n\n if (field.relationType === 'many-to-one') {\n const relationId = this.extractRelationId(relationValue);\n if (relationId) {\n const relatedEntity = await this.entityManager.findOne(targetEntity as any, {\n where: { id: relationId }\n });\n populatedEntity[field.name] = relatedEntity;\n } else {\n populatedEntity[field.name] = relationValue;\n }\n } else if (field.relationType === 'many-to-many' || field.relationType === 'manyToMany') {\n const relationIds = this.extractRelationIds(relationValue);\n if (relationIds.length > 0) {\n const relatedEntities = await this.entityManager.findByIds(targetEntity as any, relationIds);\n populatedEntity[field.name] = relatedEntities;\n } else {\n populatedEntity[field.name] = relationValue;\n }\n } else {\n populatedEntity[field.name] = relationValue;\n }\n }\n\n return populatedEntity;\n }\n\n async getChatterMessages(\n entityId: number,\n entityName: string,\n query: any\n ) {\n const { limit = 25, offset = 0, populate = [], populateMedia = [], filters } = query;\n\n const model = await this.modelMetadataRepo.findOne({\n where: {\n singularName: entityName\n },\n });\n const oneToManyFields = await this.fieldMetadataRepo.find({\n where: {\n model: { id: model.id },\n type: 'relation',\n relationType: 'one-to-many'\n }\n });\n\n const relatedEntitiesMap = new Map<string, number[]>();\n\n for (const field of oneToManyFields) {\n const coModelName = field.relationCoModelSingularName;\n const coModelFieldName = field.relationCoModelFieldName;\n\n const coModel = await this.modelMetadataRepo.findOne({\n where: { singularName: coModelName }\n });\n\n if (coModel) {\n //const relatedEntityRepository = this.entityManager.getRepository(classify(coModelName));\n const dsName = coModel.dataSource || 'default';\n const em = dsName === 'default' ? this.entityManager : this.moduleRef.get(`${dsName}EntityManager`, { strict: false });\n\n const relatedEntityRepository = em.getRepository(classify(coModelName));\n\n const relatedEntities = await relatedEntityRepository.find({\n where: { [coModelFieldName]: { id: entityId } }\n });\n\n const relatedIds = relatedEntities.map((entity: any) => entity.id);\n relatedEntitiesMap.set(field.name, relatedIds);\n }\n }\n\n const qb = await this.repo.createSecurityRuleAwareQueryBuilder('entity');\n\n const orConditions: string[] = [];\n const parameters: any = {};\n\n orConditions.push('(entity.coModelName = :entityName AND entity.coModelEntityId = :entityId)');\n parameters.entityName = entityName;\n parameters.entityId = entityId;\n\n let paramIndex = 0;\n for (const [fieldName, relatedIds] of relatedEntitiesMap.entries()) {\n if (relatedIds.length > 0) {\n const field = oneToManyFields.find(f => f.name === fieldName);\n if (field) {\n const coModelName = field.relationCoModelSingularName;\n const idsParamName = `relatedIds${paramIndex}`;\n orConditions.push(`(entity.coModelName = :coModelName${paramIndex} AND entity.coModelEntityId IN (:...${idsParamName}))`);\n parameters[`coModelName${paramIndex}`] = coModelName;\n parameters[idsParamName] = relatedIds;\n paramIndex++;\n }\n }\n }\n\n qb.where(new Brackets(qb => {\n qb.where(orConditions.join(' OR '), parameters);\n }));\n\n const relations = ['chatterMessageDetails', 'user'];\n if (populate && populate.length > 0) {\n const normalizedPopulate = this.crudHelperService.normalize(populate);\n relations.push(...normalizedPopulate.filter(rel => !relations.includes(rel)));\n }\n\n relations.forEach(relation => {\n qb.leftJoinAndSelect(`entity.${relation}`, relation);\n });\n\n if (filters) {\n qb.andWhere(new Brackets(whereQb => {\n this.crudHelperService.applyFilters(whereQb, filters, 'entity', qb);\n }));\n }\n\n qb.orderBy('entity.createdAt', 'DESC');\n\n qb.skip(offset).take(limit);\n\n const [entities, count] = await qb.getManyAndCount();\n\n if (populateMedia && populateMedia.length > 0) {\n const normalizedPopulateMedia = this.crudHelperService.normalize(populateMedia);\n await this['handlePopulateMedia'](normalizedPopulateMedia, entities);\n }\n\n const currentPage = Math.floor(offset / limit) + 1;\n const totalPages = Math.ceil(count / limit);\n const nextPage = currentPage < totalPages ? currentPage + 1 : null;\n const prevPage = currentPage > 1 ? currentPage - 1 : null;\n\n return {\n meta: {\n totalRecords: count,\n currentPage: currentPage,\n nextPage: nextPage,\n prevPage: prevPage,\n totalPages: totalPages,\n perPage: +limit,\n },\n records: entities\n };\n }\n}\n"]}
1
+ {"version":3,"file":"chatter-message.service.js","sourceRoot":"","sources":["../../src/services/chatter-message.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { forwardRef, Inject, Injectable } from '@nestjs/common';\nimport { ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager } from '@nestjs/typeorm';\nimport { Brackets, EntityManager, EntityMetadata } from 'typeorm';\n\nimport { classify } from '@angular-devkit/core/src/utils/strings';\nimport { CHATTER_MESSAGE_SUBTYPE, CHATTER_MESSAGE_TYPE } from 'src/constants/chatter-message.constants';\nimport { PostChatterMessageDto } from 'src/dtos/post-chatter-message.dto';\nimport { ModelMetadataHelperService } from 'src/helpers/model-metadata-helper.service';\nimport { lowerFirst } from 'src/helpers/string.helper';\nimport { ChatterMessageDetailsRepository } from 'src/repository/chatter-message-details.repository';\nimport { ChatterMessageRepository } from 'src/repository/chatter-message.repository';\nimport { FieldMetadataRepository } from 'src/repository/field-metadata.repository';\nimport { ModelMetadataRepository } from 'src/repository/model-metadata.repository';\nimport { CRUDService } from 'src/services/crud.service';\nimport { MediaStorageProviderType } from '../dtos/create-media-storage-provider-metadata.dto';\nimport { ChatterMessageDetails } from '../entities/chatter-message-details.entity';\nimport { ChatterMessage } from '../entities/chatter-message.entity';\nimport { getMediaStorageProvider } from './mediaStorageProviders';\nimport { RequestContextService } from './request-context.service';\nimport { take } from 'rxjs';\n@Injectable()\nexport class ChatterMessageService extends CRUDService<ChatterMessage> {\n constructor(\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(ChatterMessage, 'default')\n readonly repo: ChatterMessageRepository,\n // @InjectRepository(ChatterMessageDetailsRepository, 'default')\n readonly chatterMessageDetailsRepo: ChatterMessageDetailsRepository,\n // @InjectRepository(FieldMetadata, 'default')\n // readonly fieldMetadataRepo: Repository<FieldMetadata>,\n readonly fieldMetadataRepo: FieldMetadataRepository,\n readonly moduleRef: ModuleRef,\n // @InjectRepository(ModelMetadata)\n // private readonly modelMetadataRepo: Repository<ModelMetadata>,\n @Inject(forwardRef(() => ModelMetadataRepository))\n private readonly modelMetadataRepo: ModelMetadataRepository,\n readonly requestContextService: RequestContextService,\n private readonly modelMetadataHelperService: ModelMetadataHelperService,\n ) {\n super(entityManager, repo, 'chatterMessage', 'solid-core', moduleRef);\n }\n\n async postMessage(postDto: PostChatterMessageDto, files: Express.Multer.File[] = []) {\n const chatterMessage = new ChatterMessage();\n chatterMessage.messageType = CHATTER_MESSAGE_TYPE.CUSTOM;\n chatterMessage.messageSubType = postDto.messageSubType || CHATTER_MESSAGE_SUBTYPE.CUSTOM;\n chatterMessage.messageBody = postDto.messageBody;\n chatterMessage.coModelEntityId = postDto.coModelEntityId;\n chatterMessage.coModelName = postDto.coModelName;\n\n const activeUser = this.requestContextService.getActiveUser();\n\n if (activeUser) {\n const userId = activeUser?.sub;\n chatterMessage.user = { id: userId } as any;\n } else {\n chatterMessage.user = null;\n }\n\n const savedMessage = await this.repo.save(chatterMessage);\n\n if (files && files.length > 0) {\n const model = await this.modelMetadataService.findOneBySingularName('chatterMessage', {\n fields: {\n model: true,\n mediaStorageProvider: true,\n },\n module: true,\n });\n\n const mediaFields = model.fields.filter(field => field.type === 'mediaSingle' || field.type === 'mediaMultiple');\n\n for (const mediaField of mediaFields) {\n const media = files.filter(multerFile => multerFile.fieldname === mediaField.name);\n if (media.length > 0) {\n const storageProviderMetadata = mediaField.mediaStorageProvider;\n const storageProviderType = storageProviderMetadata.type as MediaStorageProviderType;\n const storageProvider = await getMediaStorageProvider(this.moduleRef, storageProviderType);\n await storageProvider.store(media, savedMessage, mediaField);\n }\n }\n }\n\n return savedMessage;\n }\n\n async postAuditMessageOnInsert(entity: any, metadata: EntityMetadata, messageQueue: boolean = false) {\n if (!entity) {\n return;\n }\n const model = await this.modelMetadataRepo.findOne({\n where: {\n singularName: lowerFirst(metadata.name)\n },\n relations: {\n fields: true,\n module: true,\n userKeyField: true\n }\n });\n\n if (!model || !model.enableAuditTracking) {\n return;\n }\n\n const auditFields = model.fields.filter(field =>\n field.enableAuditTracking &&\n !['mediaSingle', 'mediaMultiple', 'richText', 'json'].includes(field.type) &&\n !(field.type === 'relation' && field.relationType === 'one-to-many')\n );\n\n const activeUser = this.requestContextService.getActiveUser();\n\n const chatterMessage = new ChatterMessage();\n chatterMessage.messageType = CHATTER_MESSAGE_TYPE.AUDIT;\n chatterMessage.messageSubType = CHATTER_MESSAGE_SUBTYPE.AUDIT_INSERT;\n chatterMessage.coModelEntityId = entity.id;\n chatterMessage.coModelName = model?.singularName;\n chatterMessage.modelDisplayName = model?.displayName;\n chatterMessage.modelUserKey = entity[model?.userKeyField?.name];\n chatterMessage.messageBody = `New ${model?.displayName} created`;\n\n if (activeUser) {\n const userId = activeUser?.sub;\n chatterMessage.user = { id: userId } as any;\n } else {\n chatterMessage.user = null;\n }\n\n const savedMessage = await this.repo.save(chatterMessage);\n\n for (const field of auditFields) {\n const fieldValue = entity[field.name];\n if (fieldValue !== undefined && fieldValue !== null && fieldValue !== '') {\n const messageDetail = new ChatterMessageDetails();\n messageDetail.chatterMessage = savedMessage;\n messageDetail.fieldName = field.name;\n messageDetail.fieldDisplayName = field.displayName;\n messageDetail.oldValue = null;\n messageDetail.oldValueDisplay = null;\n messageDetail.newValue = this.formatFieldValue(field, fieldValue);\n messageDetail.newValueDisplay = await this.formatFieldValueDisplay(field, fieldValue);\n await this.chatterMessageDetailsRepo.save(messageDetail);\n }\n }\n }\n\n async postAuditMessageOnUpdate(entity: any, metadata: EntityMetadata, databaseEntity: any, updatedColumns: any[] = [], messageQueue: boolean = false) {\n if (!databaseEntity || !entity) {\n return;\n }\n const model = await this.modelMetadataRepo.findOne({\n where: {\n singularName: lowerFirst(metadata.name)\n },\n relations: {\n fields: true,\n module: true,\n userKeyField: true\n }\n });\n\n if (!model || !model.enableAuditTracking) {\n return;\n }\n\n const modelFields = await this.modelMetadataHelperService.loadFieldHierarchy(model.singularName)\n\n const auditFields = modelFields.filter(field =>\n field.enableAuditTracking &&\n !['mediaSingle', 'mediaMultiple', 'richText', 'json'].includes(field.type) &&\n !(field.type === 'relation' && field.relationType === 'one-to-many')\n );\n\n const updatedFieldNames = new Set(updatedColumns.map(col => col.propertyName));\n\n const allNonRelationFields = auditFields.filter(field => field.type !== 'relation');\n const allRelationFields = auditFields.filter(field => field.type === 'relation');\n\n let potentialNonRelationFields = [];\n\n if (updatedColumns.length > 0) {\n potentialNonRelationFields = allNonRelationFields.filter(field =>\n updatedFieldNames.has(field.name)\n );\n } else {\n potentialNonRelationFields = allNonRelationFields;\n }\n\n const potentialRelationFields = allRelationFields;\n\n const changedNonRelationFields = potentialNonRelationFields.filter(field => {\n const newValue = entity[field.name];\n const oldValue = databaseEntity[field.name];\n return this.hasValueChanged(newValue, oldValue);\n });\n\n const changedRelationFields = [];\n if (potentialRelationFields.length > 0) {\n const populatedOldEntity = await this.populateRelationFields(databaseEntity, potentialRelationFields, metadata);\n\n for (const field of potentialRelationFields) {\n const newValue = entity[field.name];\n const oldValue = populatedOldEntity[field.name];\n\n if (this.hasRelationValueChanged(field, newValue, oldValue)) {\n changedRelationFields.push({\n field,\n newValue,\n oldValue\n });\n }\n }\n }\n\n\n const allChangedFields = [\n ...changedNonRelationFields.map(field => ({\n field,\n newValue: entity[field.name],\n oldValue: databaseEntity[field.name]\n })),\n ...changedRelationFields\n ];\n\n if (allChangedFields.length === 0) {\n return;\n }\n\n const activeUser = this.requestContextService.getActiveUser();\n\n const chatterMessage = new ChatterMessage();\n chatterMessage.messageType = CHATTER_MESSAGE_TYPE.AUDIT;\n chatterMessage.messageSubType = CHATTER_MESSAGE_SUBTYPE.AUDIT_UPDATE;\n chatterMessage.coModelEntityId = entity?.id;\n chatterMessage.coModelName = model?.singularName;\n chatterMessage.modelDisplayName = model.displayName;\n chatterMessage.modelUserKey = entity[model?.userKeyField?.name];\n chatterMessage.messageBody = `${model?.displayName} updated`;\n\n if (activeUser) {\n const userId = activeUser?.sub;\n chatterMessage.user = { id: userId } as any;\n } else {\n chatterMessage.user = null;\n }\n\n const savedMessage = await this.repo.save(chatterMessage);\n\n for (const { field, newValue, oldValue } of allChangedFields) {\n const messageDetail = new ChatterMessageDetails();\n messageDetail.chatterMessage = savedMessage;\n messageDetail.fieldName = field.name;\n messageDetail.fieldDisplayName = field.displayName;\n messageDetail.oldValue = this.formatFieldValue(field, oldValue);\n messageDetail.newValue = this.formatFieldValue(field, newValue);\n messageDetail.oldValueDisplay = await this.formatFieldValueDisplay(field, oldValue);\n messageDetail.newValueDisplay = await this.formatFieldValueDisplay(field, newValue);\n await this.chatterMessageDetailsRepo.save(messageDetail);\n }\n }\n\n async postAuditMessageOnDelete(entity: any, metadata: EntityMetadata, databaseEntity: any, messageQueue: boolean = false) {\n const model = await this.modelMetadataRepo.findOne({\n where: {\n singularName: lowerFirst(metadata.name)\n },\n relations: {\n fields: true,\n module: true,\n userKeyField: true\n }\n });\n\n if (!model || !model.enableAuditTracking) {\n return;\n }\n\n const chatterMessage = new ChatterMessage();\n chatterMessage.messageType = CHATTER_MESSAGE_TYPE.AUDIT;\n chatterMessage.messageSubType = CHATTER_MESSAGE_SUBTYPE.AUDIT_DELETE;\n chatterMessage.coModelEntityId = databaseEntity?.id;\n chatterMessage.coModelName = model?.singularName;\n chatterMessage.modelDisplayName = model?.displayName;\n chatterMessage.modelUserKey = entity[model?.userKeyField?.name];\n chatterMessage.messageBody = `${model?.displayName} deleted`;\n\n const activeUser = this.requestContextService.getActiveUser();\n\n if (activeUser) {\n const userId = activeUser?.sub;\n chatterMessage.user = { id: userId } as any;\n } else {\n chatterMessage.user = null;\n }\n\n await this.repo.save(chatterMessage);\n }\n\n private formatFieldValue(field: any, value: any): string {\n if (value === null || value === undefined) {\n return '';\n }\n\n if (field.type === 'selectionStatic' || field.type === 'selectionDynamic') {\n return `${value}`;\n }\n\n if (field.type === 'relation') {\n if (field.relationType === \"many-to-one\") {\n return value.id;\n }\n if (field.relationType === 'many-to-many') {\n return value.map(item => item.id).join(', ');\n }\n }\n\n\n return value.toString();\n }\n\n private async formatFieldValueDisplay(field: any, value: any): Promise<string> {\n if (value === null || value === undefined) {\n return '';\n }\n\n if (field.type === 'selectionStatic' || field.type === 'selectionDynamic') {\n return `${value}`;\n }\n\n if (field.type === 'relation') {\n if (field.relationType === \"many-to-one\") {\n if (value.name) {\n return value.name;\n }\n\n try {\n const relatedModel = await this.modelMetadataRepo.findOne({\n where: { singularName: field.relationCoModelSingularName || field.relation },\n relations: { userKeyField: true }\n });\n\n if (relatedModel && relatedModel.userKeyField) {\n const userKeyFieldName = relatedModel.userKeyField.name;\n return value[userKeyFieldName] ? value[userKeyFieldName].toString() : '';\n }\n\n if (value.id) {\n return value.id.toString();\n }\n } catch (error) {\n console.error('Error fetching related model metadata:', error);\n return value.id ? value.id.toString() : '';\n }\n }\n\n if (field.relationType === 'many-to-many') {\n return value.map(item => item.name).join(', ');\n }\n }\n\n\n return value.toString();\n }\n\n private hasValueChanged(newValue: any, oldValue: any): boolean {\n if (newValue === oldValue) {\n return false;\n }\n\n if (newValue === null && oldValue === null) {\n return false;\n }\n\n if (newValue === undefined && oldValue === undefined) {\n return false;\n }\n\n if (newValue && oldValue && typeof newValue === 'object' && typeof oldValue === 'object') {\n if (newValue.id !== undefined && oldValue.id !== undefined) {\n return newValue.id !== oldValue.id;\n }\n\n if (Array.isArray(newValue) && Array.isArray(oldValue)) {\n if (newValue.length !== oldValue.length) {\n return true;\n }\n const newIds = newValue.map(item => item.id || item).sort();\n const oldIds = oldValue.map(item => item.id || item).sort();\n return JSON.stringify(newIds) !== JSON.stringify(oldIds);\n }\n }\n\n if (Array.isArray(newValue) && Array.isArray(oldValue)) {\n return JSON.stringify(newValue) !== JSON.stringify(oldValue);\n }\n\n return true;\n }\n\n private hasRelationValueChanged(field: any, newValue: any, oldValue: any): boolean {\n if (newValue === oldValue) {\n return false;\n }\n\n if ((newValue === null || newValue === undefined) && (oldValue === null || oldValue === undefined)) {\n return false;\n }\n\n if (field.relationType === 'many-to-one') {\n const newId = this.extractRelationId(newValue);\n const oldId = this.extractRelationId(oldValue);\n return newId !== oldId;\n }\n\n if (field.relationType === 'many-to-many') {\n const newIds = this.extractRelationIds(newValue);\n const oldIds = this.extractRelationIds(oldValue);\n\n if (newIds.length !== oldIds.length) {\n return true;\n }\n\n newIds.sort();\n oldIds.sort();\n\n return JSON.stringify(newIds) !== JSON.stringify(oldIds);\n }\n\n return this.hasValueChanged(newValue, oldValue);\n }\n\n private extractRelationId(value: any): any {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n return value;\n }\n\n if (typeof value === 'object' && value.id !== undefined) {\n return value.id;\n }\n\n return null;\n }\n\n private extractRelationIds(value: any): any[] {\n if (!Array.isArray(value)) {\n const id = this.extractRelationId(value);\n return id !== null ? [id] : [];\n }\n\n return value.map(item => this.extractRelationId(item)).filter(id => id !== null);\n }\n\n private async populateRelationFields(databaseEntity: any, relationFields: any[], metadata: EntityMetadata): Promise<any> {\n const populatedEntity = { ...databaseEntity };\n\n for (const field of relationFields) {\n const relationValue = databaseEntity[field.name];\n\n if (relationValue === null || relationValue === undefined) {\n populatedEntity[field.name] = relationValue;\n continue;\n }\n\n const relationMetadata = metadata.relations.find(rel => rel.propertyName === field.name);\n if (!relationMetadata) {\n populatedEntity[field.name] = relationValue;\n continue;\n }\n\n const targetEntity = relationMetadata.inverseEntityMetadata || relationMetadata.type;\n\n if (field.relationType === 'many-to-one') {\n const relationId = this.extractRelationId(relationValue);\n if (relationId) {\n const relatedEntity = await this.entityManager.findOne(targetEntity as any, {\n where: { id: relationId }\n });\n populatedEntity[field.name] = relatedEntity;\n } else {\n populatedEntity[field.name] = relationValue;\n }\n } else if (field.relationType === 'many-to-many' || field.relationType === 'manyToMany') {\n const relationIds = this.extractRelationIds(relationValue);\n if (relationIds.length > 0) {\n const relatedEntities = await this.entityManager.findByIds(targetEntity as any, relationIds);\n populatedEntity[field.name] = relatedEntities;\n } else {\n populatedEntity[field.name] = relationValue;\n }\n } else {\n populatedEntity[field.name] = relationValue;\n }\n }\n\n return populatedEntity;\n }\n\n // [2026-02-05T23:31:21.025Z] INFO: [200 OK] \n // GET /api/chatter-message/getChatterMessages/216/mswipeBoomboxBulkUpload?populateMedia[0]=messageAttachments&populate[0]=user&populate[1]=chatterMessageDetails&limit=25 22747ms\n async getChatterMessages(entityId: number, entityName: string, query: any) {\n const { limit = 25, offset = 0, populate = [], populateMedia = [], filters } = query;\n\n const model = await this.modelMetadataRepo.findOne({\n where: {\n singularName: entityName\n },\n });\n const oneToManyFields = await this.fieldMetadataRepo.find({\n where: {\n model: { id: model.id },\n type: 'relation',\n relationType: 'one-to-many'\n }\n });\n\n const relatedEntitiesMap = new Map<string, number[]>();\n\n for (const field of oneToManyFields) {\n if (field.enableAuditTracking === false) {\n continue\n }\n const coModelName = field.relationCoModelSingularName;\n const coModelFieldName = field.relationCoModelFieldName;\n\n const coModel = await this.modelMetadataRepo.findOne({\n where: { singularName: coModelName }\n });\n\n if (coModel) {\n //const relatedEntityRepository = this.entityManager.getRepository(classify(coModelName));\n const dsName = coModel.dataSource || 'default';\n const em = dsName === 'default' ? this.entityManager : this.moduleRef.get(`${dsName}EntityManager`, { strict: false });\n\n const relatedEntityRepository = em.getRepository(classify(coModelName));\n\n const relatedEntities = await relatedEntityRepository.find({\n select: {\n id: true,\n },\n where: { [coModelFieldName]: { id: entityId } },\n take: 5,\n });\n\n const relatedIds = relatedEntities.map((entity: any) => entity.id);\n relatedEntitiesMap.set(field.name, relatedIds);\n }\n }\n\n const qb = await this.repo.createSecurityRuleAwareQueryBuilder('entity');\n\n const orConditions: string[] = [];\n const parameters: any = {};\n\n orConditions.push('(entity.coModelName = :entityName AND entity.coModelEntityId = :entityId)');\n parameters.entityName = entityName;\n parameters.entityId = entityId;\n\n let paramIndex = 0;\n for (const [fieldName, relatedIds] of relatedEntitiesMap.entries()) {\n if (relatedIds.length > 0) {\n const field = oneToManyFields.find(f => f.name === fieldName);\n if (field) {\n const coModelName = field.relationCoModelSingularName;\n const idsParamName = `relatedIds${paramIndex}`;\n orConditions.push(`(entity.coModelName = :coModelName${paramIndex} AND entity.coModelEntityId IN (:...${idsParamName}))`);\n parameters[`coModelName${paramIndex}`] = coModelName;\n parameters[idsParamName] = relatedIds;\n paramIndex++;\n }\n }\n }\n\n qb.where(new Brackets(qb => {\n qb.where(orConditions.join(' OR '), parameters);\n }));\n\n const relations = ['chatterMessageDetails', 'user'];\n if (populate && populate.length > 0) {\n const normalizedPopulate = this.crudHelperService.normalize(populate);\n relations.push(...normalizedPopulate.filter(rel => !relations.includes(rel)));\n }\n\n relations.forEach(relation => {\n qb.leftJoinAndSelect(`entity.${relation}`, relation);\n });\n\n if (filters) {\n qb.andWhere(new Brackets(whereQb => {\n this.crudHelperService.applyFilters(whereQb, filters, 'entity', qb);\n }));\n }\n\n qb.orderBy('entity.createdAt', 'DESC');\n\n qb.skip(offset).take(limit);\n\n const [entities, count] = await qb.getManyAndCount();\n\n if (populateMedia && populateMedia.length > 0) {\n const normalizedPopulateMedia = this.crudHelperService.normalize(populateMedia);\n await this['handlePopulateMedia'](normalizedPopulateMedia, entities);\n }\n\n const currentPage = Math.floor(offset / limit) + 1;\n const totalPages = Math.ceil(count / limit);\n const nextPage = currentPage < totalPages ? currentPage + 1 : null;\n const prevPage = currentPage > 1 ? currentPage - 1 : null;\n\n return {\n meta: {\n totalRecords: count,\n currentPage: currentPage,\n nextPage: nextPage,\n prevPage: prevPage,\n totalPages: totalPages,\n perPage: +limit,\n },\n records: entities\n };\n }\n}\n"]}