rez_core 4.0.184 → 4.0.187

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 (197) hide show
  1. package/dist/app.module.js +11 -0
  2. package/dist/app.module.js.map +1 -1
  3. package/dist/config/bull.config.d.ts +10 -0
  4. package/dist/config/bull.config.js +66 -0
  5. package/dist/config/bull.config.js.map +1 -0
  6. package/dist/config/database.config.js +1 -1
  7. package/dist/config/database.config.js.map +1 -1
  8. package/dist/module/entity_json/controller/entity_json.controller.d.ts +8 -0
  9. package/dist/module/entity_json/controller/entity_json.controller.js +43 -0
  10. package/dist/module/entity_json/controller/entity_json.controller.js.map +1 -0
  11. package/dist/module/entity_json/entity_json.module.d.ts +2 -0
  12. package/dist/module/entity_json/entity_json.module.js +26 -0
  13. package/dist/module/entity_json/entity_json.module.js.map +1 -0
  14. package/dist/module/entity_json/service/entity_json.service.d.ts +7 -0
  15. package/dist/module/entity_json/service/entity_json.service.js +116 -0
  16. package/dist/module/entity_json/service/entity_json.service.js.map +1 -0
  17. package/dist/module/filter/service/filter.service.js.map +1 -1
  18. package/dist/module/integration/service/wrapper.service.d.ts +3 -1
  19. package/dist/module/integration/service/wrapper.service.js +39 -36
  20. package/dist/module/integration/service/wrapper.service.js.map +1 -1
  21. package/dist/module/linked_attributes/controller/linked_attributes.controller.d.ts +5 -0
  22. package/dist/module/linked_attributes/controller/linked_attributes.controller.js +29 -0
  23. package/dist/module/linked_attributes/controller/linked_attributes.controller.js.map +1 -0
  24. package/dist/module/linked_attributes/entity/linked_attribute.entity.d.ts +9 -0
  25. package/dist/module/linked_attributes/entity/linked_attribute.entity.js +70 -0
  26. package/dist/module/linked_attributes/entity/linked_attribute.entity.js.map +1 -0
  27. package/dist/module/linked_attributes/linked_attributes.module.d.ts +2 -0
  28. package/dist/module/linked_attributes/linked_attributes.module.js +29 -0
  29. package/dist/module/linked_attributes/linked_attributes.module.js.map +1 -0
  30. package/dist/module/linked_attributes/repository/linked_attribute.repository.d.ts +6 -0
  31. package/dist/module/linked_attributes/repository/linked_attribute.repository.js +31 -0
  32. package/dist/module/linked_attributes/repository/linked_attribute.repository.js.map +1 -0
  33. package/dist/module/linked_attributes/service/linked_attributes.service.d.ts +5 -0
  34. package/dist/module/linked_attributes/service/linked_attributes.service.js +34 -0
  35. package/dist/module/linked_attributes/service/linked_attributes.service.js.map +1 -0
  36. package/dist/module/mapper/service/field-mapper.service.js +2 -2
  37. package/dist/module/mapper/service/field-mapper.service.js.map +1 -1
  38. package/dist/module/meta/controller/attribute-master.controller.d.ts +10 -1
  39. package/dist/module/meta/controller/attribute-master.controller.js +27 -2
  40. package/dist/module/meta/controller/attribute-master.controller.js.map +1 -1
  41. package/dist/module/meta/controller/entity-master.controller.d.ts +6 -0
  42. package/dist/module/meta/controller/entity-master.controller.js +13 -0
  43. package/dist/module/meta/controller/entity-master.controller.js.map +1 -1
  44. package/dist/module/meta/entity.module.js +7 -0
  45. package/dist/module/meta/entity.module.js.map +1 -1
  46. package/dist/module/meta/repository/attribute-master.repository.d.ts +4 -0
  47. package/dist/module/meta/repository/attribute-master.repository.js +19 -0
  48. package/dist/module/meta/repository/attribute-master.repository.js.map +1 -1
  49. package/dist/module/meta/repository/entity-attribute-update.repository.d.ts +6 -0
  50. package/dist/module/meta/repository/entity-attribute-update.repository.js +44 -0
  51. package/dist/module/meta/repository/entity-attribute-update.repository.js.map +1 -0
  52. package/dist/module/meta/repository/entity-master.repository.d.ts +7 -1
  53. package/dist/module/meta/repository/entity-master.repository.js +24 -2
  54. package/dist/module/meta/repository/entity-master.repository.js.map +1 -1
  55. package/dist/module/meta/service/attribute-master.service.d.ts +4 -0
  56. package/dist/module/meta/service/attribute-master.service.js +3 -0
  57. package/dist/module/meta/service/attribute-master.service.js.map +1 -1
  58. package/dist/module/meta/service/entity-attribute-update.service.d.ts +7 -0
  59. package/dist/module/meta/service/entity-attribute-update.service.js +35 -0
  60. package/dist/module/meta/service/entity-attribute-update.service.js.map +1 -0
  61. package/dist/module/meta/service/entity-master.service.d.ts +4 -0
  62. package/dist/module/meta/service/entity-master.service.js +3 -0
  63. package/dist/module/meta/service/entity-master.service.js.map +1 -1
  64. package/dist/module/meta/service/resolver.service.js +2 -2
  65. package/dist/module/meta/service/resolver.service.js.map +1 -1
  66. package/dist/module/module/service/module-access.service.js +1 -7
  67. package/dist/module/module/service/module-access.service.js.map +1 -1
  68. package/dist/module/workflow/entity/action.entity.d.ts +1 -0
  69. package/dist/module/workflow/entity/action.entity.js +4 -0
  70. package/dist/module/workflow/entity/action.entity.js.map +1 -1
  71. package/dist/module/workflow/repository/action-data.repository.js +1 -0
  72. package/dist/module/workflow/repository/action-data.repository.js.map +1 -1
  73. package/dist/module/workflow/repository/task.repository.d.ts +3 -1
  74. package/dist/module/workflow/repository/task.repository.js +6 -1
  75. package/dist/module/workflow/repository/task.repository.js.map +1 -1
  76. package/dist/module/workflow/service/task.service.js +41 -27
  77. package/dist/module/workflow/service/task.service.js.map +1 -1
  78. package/dist/module/workflow/service/workflow-meta.service.js +23 -21
  79. package/dist/module/workflow/service/workflow-meta.service.js.map +1 -1
  80. package/dist/module/workflow-automation/controller/workflow-automation.controller.d.ts +6 -0
  81. package/dist/module/workflow-automation/controller/workflow-automation.controller.js +16 -0
  82. package/dist/module/workflow-automation/controller/workflow-automation.controller.js.map +1 -1
  83. package/dist/module/workflow-automation/entity/workflow-automation.entity.d.ts +2 -0
  84. package/dist/module/workflow-automation/entity/workflow-automation.entity.js +8 -0
  85. package/dist/module/workflow-automation/entity/workflow-automation.entity.js.map +1 -1
  86. package/dist/module/workflow-automation/service/schedule-handler.service.d.ts +16 -0
  87. package/dist/module/workflow-automation/service/schedule-handler.service.js +109 -0
  88. package/dist/module/workflow-automation/service/schedule-handler.service.js.map +1 -0
  89. package/dist/module/workflow-automation/service/workflow-automation-engine.service.d.ts +1 -1
  90. package/dist/module/workflow-automation/service/workflow-automation-engine.service.js.map +1 -1
  91. package/dist/module/workflow-automation/service/workflow-automation.service.d.ts +13 -1
  92. package/dist/module/workflow-automation/service/workflow-automation.service.js +111 -2
  93. package/dist/module/workflow-automation/service/workflow-automation.service.js.map +1 -1
  94. package/dist/module/workflow-automation/workflow-automation.module.js +14 -1
  95. package/dist/module/workflow-automation/workflow-automation.module.js.map +1 -1
  96. package/dist/module/workflow-schedule/constants/schedule.constants.d.ts +27 -0
  97. package/dist/module/workflow-schedule/constants/schedule.constants.js +31 -0
  98. package/dist/module/workflow-schedule/constants/schedule.constants.js.map +1 -0
  99. package/dist/module/workflow-schedule/controller/workflow-schedule.controller.d.ts +83 -0
  100. package/dist/module/workflow-schedule/controller/workflow-schedule.controller.js +220 -0
  101. package/dist/module/workflow-schedule/controller/workflow-schedule.controller.js.map +1 -0
  102. package/dist/module/workflow-schedule/dto/create-schedule.dto.d.ts +32 -0
  103. package/dist/module/workflow-schedule/dto/create-schedule.dto.js +163 -0
  104. package/dist/module/workflow-schedule/dto/create-schedule.dto.js.map +1 -0
  105. package/dist/module/workflow-schedule/dto/get-execution-logs.dto.d.ts +35 -0
  106. package/dist/module/workflow-schedule/dto/get-execution-logs.dto.js +124 -0
  107. package/dist/module/workflow-schedule/dto/get-execution-logs.dto.js.map +1 -0
  108. package/dist/module/workflow-schedule/dto/update-schedule.dto.d.ts +19 -0
  109. package/dist/module/workflow-schedule/dto/update-schedule.dto.js +106 -0
  110. package/dist/module/workflow-schedule/dto/update-schedule.dto.js.map +1 -0
  111. package/dist/module/workflow-schedule/entities/scheduled-workflow.entity.d.ts +30 -0
  112. package/dist/module/workflow-schedule/entities/scheduled-workflow.entity.js +113 -0
  113. package/dist/module/workflow-schedule/entities/scheduled-workflow.entity.js.map +1 -0
  114. package/dist/module/workflow-schedule/entities/workflow-execution-log.entity.d.ts +34 -0
  115. package/dist/module/workflow-schedule/entities/workflow-execution-log.entity.js +118 -0
  116. package/dist/module/workflow-schedule/entities/workflow-execution-log.entity.js.map +1 -0
  117. package/dist/module/workflow-schedule/interfaces/schedule-job-data.interface.d.ts +44 -0
  118. package/dist/module/workflow-schedule/interfaces/schedule-job-data.interface.js +3 -0
  119. package/dist/module/workflow-schedule/interfaces/schedule-job-data.interface.js.map +1 -0
  120. package/dist/module/workflow-schedule/interfaces/workflow-schedule-options.interface.d.ts +3 -0
  121. package/dist/module/workflow-schedule/interfaces/workflow-schedule-options.interface.js +3 -0
  122. package/dist/module/workflow-schedule/interfaces/workflow-schedule-options.interface.js.map +1 -0
  123. package/dist/module/workflow-schedule/processors/schedule.processor.d.ts +31 -0
  124. package/dist/module/workflow-schedule/processors/schedule.processor.js +409 -0
  125. package/dist/module/workflow-schedule/processors/schedule.processor.js.map +1 -0
  126. package/dist/module/workflow-schedule/service/workflow-schedule.service.d.ts +44 -0
  127. package/dist/module/workflow-schedule/service/workflow-schedule.service.js +434 -0
  128. package/dist/module/workflow-schedule/service/workflow-schedule.service.js.map +1 -0
  129. package/dist/module/workflow-schedule/workflow-schedule.module.d.ts +5 -0
  130. package/dist/module/workflow-schedule/workflow-schedule.module.js +52 -0
  131. package/dist/module/workflow-schedule/workflow-schedule.module.js.map +1 -0
  132. package/dist/table.config.d.ts +1 -1
  133. package/dist/tsconfig.build.tsbuildinfo +1 -1
  134. package/dist/utils/service/loggingUtil.service.d.ts +9 -2
  135. package/dist/utils/service/loggingUtil.service.js +65 -14
  136. package/dist/utils/service/loggingUtil.service.js.map +1 -1
  137. package/dist/utils/utils.module.js +2 -0
  138. package/dist/utils/utils.module.js.map +1 -1
  139. package/package.json +9 -4
  140. package/src/app.module.ts +16 -2
  141. package/src/config/bull.config.ts +69 -0
  142. package/src/config/database.config.ts +1 -1
  143. package/src/module/entity_json/controller/entity_json.controller.ts +47 -0
  144. package/src/module/entity_json/entity_json.module.ts +13 -0
  145. package/src/module/entity_json/service/entity_json.service.ts +162 -0
  146. package/src/module/filter/service/filter.service.ts +0 -2
  147. package/src/module/integration/service/wrapper.service.ts +248 -41
  148. package/src/module/linked_attributes/controller/linked_attributes.controller.ts +10 -0
  149. package/src/module/linked_attributes/entity/linked_attribute.entity.ts +48 -0
  150. package/src/module/linked_attributes/linked_attributes.module.ts +16 -0
  151. package/src/module/linked_attributes/repository/linked_attribute.repository.ts +12 -0
  152. package/src/module/linked_attributes/service/linked_attributes.service.ts +22 -0
  153. package/src/module/mapper/service/field-mapper.service.ts +12 -7
  154. package/src/module/meta/controller/attribute-master.controller.ts +20 -0
  155. package/src/module/meta/controller/entity-master.controller.ts +13 -0
  156. package/src/module/meta/entity.module.ts +8 -0
  157. package/src/module/meta/repository/attribute-master.repository.ts +20 -0
  158. package/src/module/meta/repository/entity-attribute-update.repository.ts +44 -0
  159. package/src/module/meta/repository/entity-master.repository.ts +30 -0
  160. package/src/module/meta/service/attribute-master.service.ts +4 -0
  161. package/src/module/meta/service/entity-attribute-update.service.ts +29 -0
  162. package/src/module/meta/service/entity-master.service.ts +6 -0
  163. package/src/module/meta/service/resolver.service.ts +2 -2
  164. package/src/module/module/service/module-access.service.ts +3 -16
  165. package/src/module/workflow/entity/action.entity.ts +3 -0
  166. package/src/module/workflow/repository/action-data.repository.ts +1 -0
  167. package/src/module/workflow/repository/task.repository.ts +8 -0
  168. package/src/module/workflow/service/task.service.ts +47 -38
  169. package/src/module/workflow/service/workflow-meta.service.ts +47 -33
  170. package/src/module/workflow-automation/SCHEDULING_GUIDE.md +145 -0
  171. package/src/module/workflow-automation/controller/workflow-automation.controller.ts +22 -0
  172. package/src/module/workflow-automation/entity/workflow-automation.entity.ts +5 -0
  173. package/src/module/workflow-automation/service/schedule-handler.service.ts +149 -0
  174. package/src/module/workflow-automation/service/workflow-automation-engine.service.ts +1 -1
  175. package/src/module/workflow-automation/service/workflow-automation.service.ts +163 -2
  176. package/src/module/workflow-automation/workflow-automation.module.ts +14 -1
  177. package/src/module/workflow-schedule/INSTALLATION.md +244 -0
  178. package/src/module/workflow-schedule/MULTI_PROJECT_GUIDE.md +196 -0
  179. package/src/module/workflow-schedule/README.md +422 -0
  180. package/src/module/workflow-schedule/constants/schedule.constants.ts +48 -0
  181. package/src/module/workflow-schedule/controller/workflow-schedule.controller.ts +255 -0
  182. package/src/module/workflow-schedule/docs/CLAUDE_CODE_GUIDE.md +510 -0
  183. package/src/module/workflow-schedule/docs/CLAUDE_CODE_PROMPT.md +362 -0
  184. package/src/module/workflow-schedule/docs/RUN_CLAUDE_CODE.sh +68 -0
  185. package/src/module/workflow-schedule/dto/create-schedule.dto.ts +147 -0
  186. package/src/module/workflow-schedule/dto/get-execution-logs.dto.ts +119 -0
  187. package/src/module/workflow-schedule/dto/update-schedule.dto.ts +96 -0
  188. package/src/module/workflow-schedule/entities/scheduled-workflow.entity.ts +148 -0
  189. package/src/module/workflow-schedule/entities/workflow-execution-log.entity.ts +154 -0
  190. package/src/module/workflow-schedule/interfaces/schedule-job-data.interface.ts +53 -0
  191. package/src/module/workflow-schedule/interfaces/workflow-schedule-options.interface.ts +12 -0
  192. package/src/module/workflow-schedule/processors/schedule.processor.ts +584 -0
  193. package/src/module/workflow-schedule/service/workflow-schedule.service.ts +600 -0
  194. package/src/module/workflow-schedule/workflow-schedule.module.ts +67 -0
  195. package/src/resources/dev.properties.yaml +1 -1
  196. package/src/utils/service/loggingUtil.service.ts +70 -16
  197. package/src/utils/utils.module.ts +2 -0
@@ -3,6 +3,7 @@ import { DataSource } from 'typeorm';
3
3
  import { GenericMessageDto, IntegrationService } from './integration.service';
4
4
  import { GoogleService } from './calendar-event.service';
5
5
  import { IcsMeetingService } from 'src/module/ics/service/ics.service';
6
+ import { LoggingService } from 'src/utils/service/loggingUtil.service';
6
7
 
7
8
  @Injectable()
8
9
  export class WrapperService {
@@ -13,6 +14,7 @@ export class WrapperService {
13
14
  private readonly integrationService: IntegrationService,
14
15
  private readonly googleService: GoogleService,
15
16
  private readonly icsService: IcsMeetingService,
17
+ private readonly loggingService: LoggingService,
16
18
  ) {}
17
19
 
18
20
  /**
@@ -20,15 +22,27 @@ export class WrapperService {
20
22
  */
21
23
  async sendMailWrapper(payload: any, loggedInUser: any) {
22
24
  try {
23
- this.logger.log(
24
- `sendMailWrapper called. User: ${JSON.stringify(loggedInUser)}, Payload: ${JSON.stringify(payload)}`,
25
+ this.loggingService.log(
26
+ 'debug',
27
+ 'wrapperService',
28
+ 'sendMailWrapper',
29
+ `sendMailWrapper called. User: ${JSON.stringify(
30
+ loggedInUser,
31
+ )}, Payload: ${JSON.stringify(payload)}`,
32
+ [],
33
+ [],
25
34
  );
26
35
 
27
36
  const { level_id, level_type, organization_id } = loggedInUser;
28
37
 
29
38
  // 1. Check for config at user’s level
30
- this.logger.debug(
39
+ this.loggingService.log(
40
+ 'debug',
41
+ 'wrapperService',
42
+ 'sendMailWrapper',
31
43
  `Fetching configs for level_id=${level_id}, level_type=${level_type}`,
44
+ [],
45
+ [],
32
46
  );
33
47
  const configs = await this.datasource.query(
34
48
  `SELECT * FROM frm_integration_config
@@ -38,27 +52,51 @@ export class WrapperService {
38
52
  AND integration_type = 'EMAIL'`,
39
53
  [level_id, level_type],
40
54
  );
41
- this.logger.debug(`Configs found: ${JSON.stringify(configs)}`);
55
+
56
+ this.loggingService.log(
57
+ 'debug',
58
+ 'wrapperService',
59
+ 'sendMailWrapper',
60
+ `Configs found: ${JSON.stringify(configs)}`,
61
+ [],
62
+ [],
63
+ );
42
64
 
43
65
  let templateCode: string | undefined;
44
66
 
45
67
  if (payload.templateCode) {
46
- this.logger.debug(
68
+ this.loggingService.log(
69
+ 'debug',
70
+ 'wrapperService',
71
+ 'sendMailWrapper',
47
72
  `Looking up templateCode=${payload.templateCode} for current level`,
73
+ [],
74
+ [],
48
75
  );
76
+
49
77
  const template = await this.datasource.query(
50
78
  `SELECT rich_text FROM frm_wf_comm_template WHERE code = $1 AND level_id = $2 AND level_type = $3 LIMIT 1`,
51
79
  [payload.templateCode, level_id, level_type],
52
80
  );
53
- this.logger.debug(
81
+ this.loggingService.log(
82
+ 'debug',
83
+ 'wrapperService',
84
+ 'sendMailWrapper',
54
85
  `Template lookup result: ${JSON.stringify(template)}`,
86
+ [],
87
+ [],
55
88
  );
56
89
 
57
90
  if (template && template.length > 0) {
58
91
  templateCode = template[0]?.rich_text;
59
92
  } else {
60
- this.logger.warn(
93
+ this.loggingService.log(
94
+ 'warn',
95
+ 'wrapperService',
96
+ 'sendMailWrapper',
61
97
  `No template found for templateCode=${payload.templateCode} and current level`,
98
+ [],
99
+ [],
62
100
  );
63
101
  }
64
102
  }
@@ -66,7 +104,15 @@ export class WrapperService {
66
104
  let payloadSendMail: GenericMessageDto;
67
105
 
68
106
  if (configs && configs.length > 0) {
69
- this.logger.debug(`Using user-level configs`);
107
+ this.loggingService.log(
108
+ 'debug',
109
+ 'wrapperService',
110
+ 'sendMailWrapper',
111
+ `Using user-level configs`,
112
+ [],
113
+ [],
114
+ );
115
+
70
116
  payloadSendMail = {
71
117
  levelId: level_id,
72
118
  levelType: level_type,
@@ -84,21 +130,40 @@ export class WrapperService {
84
130
  organization_id: loggedInUser.organization_id,
85
131
  };
86
132
  } else {
87
- this.logger.warn(
133
+ this.loggingService.log(
134
+ 'warn',
135
+ 'wrapperService',
136
+ 'sendMailWrapper',
88
137
  `No user-level configs found. Falling back to ORG-level`,
138
+ [],
139
+ [],
89
140
  );
141
+
90
142
  const fallbackConfigs = await this.datasource.query(
91
143
  `SELECT * FROM frm_integration_config
92
144
  WHERE level_type = 'ORG'
93
145
  AND integration_type = 'EMAIL'
94
146
  AND status = 1`,
95
147
  );
96
- this.logger.debug(
148
+
149
+ this.loggingService.log(
150
+ 'debug',
151
+ 'wrapperService',
152
+ 'sendMailWrapper',
97
153
  `ORG-level configs: ${JSON.stringify(fallbackConfigs)}`,
154
+ [],
155
+ [],
98
156
  );
99
157
 
100
158
  if (!fallbackConfigs || fallbackConfigs.length === 0) {
101
- this.logger.warn('No active email communication config found');
159
+ this.loggingService.log(
160
+ 'warn',
161
+ 'wrapperService',
162
+ 'sendMailWrapper',
163
+ 'No active email communication config found',
164
+ [],
165
+ [],
166
+ );
102
167
  }
103
168
 
104
169
  payloadSendMail = {
@@ -119,15 +184,27 @@ export class WrapperService {
119
184
  };
120
185
  }
121
186
 
122
- this.logger.debug(
123
- `Final payload for IntegrationService: ${JSON.stringify(payloadSendMail)}`,
187
+ this.loggingService.log(
188
+ 'debug',
189
+ 'wrapperService',
190
+ 'sendMailWrapper',
191
+ `Final payload for IntegrationService: ${JSON.stringify(
192
+ payloadSendMail,
193
+ )}`,
194
+ [],
195
+ [],
124
196
  );
125
197
 
126
198
  const result =
127
199
  await this.integrationService.sendGenericMessage(payloadSendMail);
128
200
 
129
- this.logger.log(
201
+ this.loggingService.log(
202
+ 'log',
203
+ 'wrapperService',
204
+ 'sendMailWrapper',
130
205
  `sendMailWrapper SUCCESS. Result: ${JSON.stringify(result)}`,
206
+ [],
207
+ [],
131
208
  );
132
209
 
133
210
  return {
@@ -135,7 +212,14 @@ export class WrapperService {
135
212
  data: result,
136
213
  };
137
214
  } catch (error: any) {
138
- this.logger.error(`sendMailWrapper ERROR: ${error.message}`, error.stack);
215
+ this.loggingService.log(
216
+ 'error',
217
+ 'wrapperService',
218
+ 'sendMailWrapper',
219
+ `sendMailWrapper ERROR: ${error.message}`,
220
+ [],
221
+ [error.stack], // Sending stack trace as additional data
222
+ );
139
223
  return {
140
224
  success: false,
141
225
  error: error.message,
@@ -149,17 +233,29 @@ export class WrapperService {
149
233
 
150
234
  async sendCommunicationWrapperService(entity: any, loggedInUser: any) {
151
235
  try {
152
- this.logger.log(
236
+ this.loggingService.log(
237
+ 'log',
238
+ 'wrapperService',
239
+ 'sendCommunicationWrapperService',
153
240
  `sendCommunicationWrapper called. User: ${JSON.stringify(
154
241
  loggedInUser,
155
242
  )}, Payload: ${JSON.stringify(entity)}`,
243
+ [],
244
+ [],
156
245
  );
157
246
 
158
247
  const { level_id, level_type, appcode, organization_id } = loggedInUser;
159
248
 
160
249
  // Check if active configs exist for current user's level
161
- this.logger.debug(
162
- `Checking active ${entity.type || 'EMAIL'} configs for level_id=${level_id}, level_type=${level_type}, app_code=${appcode}`,
250
+ this.loggingService.log(
251
+ 'debug',
252
+ 'wrapperService',
253
+ 'sendCommunicationWrapperService',
254
+ `Checking active ${
255
+ entity.type || 'EMAIL'
256
+ } configs for level_id=${level_id}, level_type=${level_type}, app_code=${appcode}`,
257
+ [],
258
+ [],
163
259
  );
164
260
 
165
261
  let configs = await this.integrationService.getActiveConfigs(
@@ -174,8 +270,13 @@ export class WrapperService {
174
270
 
175
271
  // Fallback to ORG-level if no configs found
176
272
  if (!configs || configs.length === 0) {
177
- this.logger.warn(
273
+ this.loggingService.log(
274
+ 'warn',
275
+ 'wrapperService',
276
+ 'sendCommunicationWrapperService',
178
277
  `No active configs found for ${level_type}:${level_id}, falling back to ORG-level`,
278
+ [],
279
+ [],
179
280
  );
180
281
 
181
282
  configs = await this.integrationService.getActiveConfigs(
@@ -190,7 +291,14 @@ export class WrapperService {
190
291
  }
191
292
 
192
293
  if (!configs || configs.length === 0) {
193
- this.logger.error('No active configurations found at any level.');
294
+ this.loggingService.log(
295
+ 'error',
296
+ 'wrapperService',
297
+ 'sendCommunicationWrapperService',
298
+ 'No active configurations found at any level.',
299
+ [],
300
+ [],
301
+ );
194
302
  throw new Error('No active configurations found.');
195
303
  }
196
304
 
@@ -198,8 +306,13 @@ export class WrapperService {
198
306
  let resolvedTemplateId = entity?.templateId;
199
307
 
200
308
  if (entity.template_code) {
201
- this.logger.debug(
309
+ this.loggingService.log(
310
+ 'debug',
311
+ 'wrapperService',
312
+ 'sendCommunicationWrapperService',
202
313
  `Looking up template for code=${entity.template_code}, level_id=${level_id}, level_type=${level_type}`,
314
+ [],
315
+ [],
203
316
  );
204
317
 
205
318
  // Try to find template at user's level first
@@ -214,8 +327,13 @@ export class WrapperService {
214
327
 
215
328
  // Fallback to ORG + organization_id if not found
216
329
  if (!templates || templates.length === 0) {
217
- this.logger.warn(
330
+ this.loggingService.log(
331
+ 'warn',
332
+ 'wrapperService',
333
+ 'sendCommunicationWrapperService',
218
334
  `No template found for ${entity.template_code} at provided level. Falling back to ORG-level.`,
335
+ [],
336
+ [],
219
337
  );
220
338
 
221
339
  templates = await this.datasource.query(
@@ -230,12 +348,22 @@ export class WrapperService {
230
348
 
231
349
  if (templates && templates.length > 0) {
232
350
  resolvedTemplateId = templates[0]?.id;
233
- this.logger.debug(
351
+ this.loggingService.log(
352
+ 'debug',
353
+ 'wrapperService',
354
+ 'sendCommunicationWrapperService',
234
355
  `Template resolved for code=${entity.template_code}, id=${resolvedTemplateId}`,
356
+ [],
357
+ [],
235
358
  );
236
359
  } else {
237
- this.logger.warn(
360
+ this.loggingService.log(
361
+ 'warn',
362
+ 'wrapperService',
363
+ 'sendCommunicationWrapperService',
238
364
  `No template found for code=${entity.template_code} at any level.`,
365
+ [],
366
+ [],
239
367
  );
240
368
  }
241
369
  }
@@ -261,23 +389,37 @@ export class WrapperService {
261
389
  organization_id: organization_id,
262
390
  } as any;
263
391
 
264
- this.logger.debug(
392
+ this.loggingService.log(
393
+ 'debug',
394
+ 'wrapperService',
395
+ 'sendCommunicationWrapperService',
265
396
  `Final payload for sendGenericMessage: ${JSON.stringify(mailPayload)}`,
397
+ [],
398
+ [],
266
399
  );
267
400
 
268
401
  // Step 5️⃣ Send via Integration Service
269
402
  const result =
270
403
  await this.integrationService.sendGenericMessage(mailPayload);
271
404
 
272
- this.logger.log(
405
+ this.loggingService.log(
406
+ 'log',
407
+ 'wrapperService',
408
+ 'sendCommunicationWrapperService',
273
409
  `sendCommunicationWrapper SUCCESS. Result: ${JSON.stringify(result)}`,
410
+ [],
411
+ [],
274
412
  );
275
413
 
276
414
  return result;
277
415
  } catch (error: any) {
278
- this.logger.error(
416
+ this.loggingService.log(
417
+ 'error',
418
+ 'wrapperService',
419
+ 'sendCommunicationWrapperService',
279
420
  `sendCommunicationWrapper ERROR: ${error.message}`,
280
- error.stack,
421
+ [],
422
+ [error.stack],
281
423
  );
282
424
  return {
283
425
  success: false,
@@ -296,8 +438,15 @@ export class WrapperService {
296
438
  mapped_entities?: any,
297
439
  ) {
298
440
  try {
299
- this.logger.log(
300
- `scheduleMeetingWrapper called by user=${loggedInUser?.id || 'unknown'} Payload=${JSON.stringify(payload)}`,
441
+ this.loggingService.log(
442
+ 'log',
443
+ 'wrapperService',
444
+ 'scheduleMeetingWrapper',
445
+ `scheduleMeetingWrapper called by user=${
446
+ loggedInUser?.id || 'unknown'
447
+ } Payload=${JSON.stringify(payload)}`,
448
+ [],
449
+ [],
301
450
  );
302
451
 
303
452
  // Normalize emails (to, cc, bcc → attendees)
@@ -342,7 +491,14 @@ export class WrapperService {
342
491
  }
343
492
 
344
493
  // ---- Step 2: Check ORG-level configs ----
345
- this.logger.log(`No user-level config found, checking ORG-level...`);
494
+ this.loggingService.log(
495
+ 'log',
496
+ 'wrapperService',
497
+ 'scheduleMeetingWrapper',
498
+ `No user-level config found, checking ORG-level...`,
499
+ [],
500
+ [],
501
+ );
346
502
 
347
503
  const orgConfigs = await this.datasource.query(
348
504
  `SELECT * FROM frm_integration_config
@@ -361,7 +517,14 @@ export class WrapperService {
361
517
  'EMAIL',
362
518
  );
363
519
 
364
- this.logger.debug(`ORG configs found: ${JSON.stringify(orgConfigs)}`);
520
+ this.loggingService.log(
521
+ 'debug',
522
+ 'wrapperService',
523
+ 'scheduleMeetingWrapper',
524
+ `ORG configs found: ${JSON.stringify(orgConfigs)}`,
525
+ [],
526
+ [],
527
+ );
365
528
 
366
529
  if (integrationConfig) {
367
530
  return {
@@ -377,9 +540,13 @@ export class WrapperService {
377
540
  };
378
541
  }
379
542
  } catch (error: any) {
380
- this.logger.error(
543
+ this.loggingService.log(
544
+ 'error',
545
+ 'wrapperService',
546
+ 'scheduleMeetingWrapper',
381
547
  `scheduleMeetingWrapper ERROR: ${error.message}`,
382
- error.stack,
548
+ [],
549
+ [error.stack],
383
550
  );
384
551
  return { success: false, error: error.message };
385
552
  }
@@ -389,14 +556,28 @@ export class WrapperService {
389
556
  * Fetch credentials JSON by config ID
390
557
  */
391
558
  private async getConfigCred(configId: number) {
392
- this.logger.debug(`Fetching config JSON for configId=${configId}`);
559
+ this.loggingService.log(
560
+ 'debug',
561
+ 'wrapperService',
562
+ 'getConfigCred',
563
+ `Fetching config JSON for configId=${configId}`,
564
+ [],
565
+ [],
566
+ );
393
567
  const configRes = await this.datasource.query(
394
568
  `SELECT config_json
395
569
  FROM frm_integration_config
396
570
  WHERE id = $1`,
397
571
  [configId],
398
572
  );
399
- this.logger.debug(`Config fetch result: ${JSON.stringify(configRes)}`);
573
+ this.loggingService.log(
574
+ 'debug',
575
+ 'wrapperService',
576
+ 'getConfigCred',
577
+ `Config fetch result: ${JSON.stringify(configRes)}`,
578
+ [],
579
+ [],
580
+ );
400
581
  return configRes?.[0]?.config_json || null;
401
582
  }
402
583
 
@@ -408,7 +589,14 @@ export class WrapperService {
408
589
  organizationId: number,
409
590
  mapped_entities?: any,
410
591
  ) {
411
- this.logger.log(`Generating ICS file. Payload: ${JSON.stringify(payload)}`);
592
+ this.loggingService.log(
593
+ 'log',
594
+ 'wrapperService',
595
+ 'sendIcsInvite',
596
+ `Generating ICS file. Payload: ${JSON.stringify(payload)}`,
597
+ [],
598
+ [],
599
+ );
412
600
 
413
601
  if (payload.template_code) {
414
602
  let templates = await this.datasource.query(
@@ -435,9 +623,16 @@ export class WrapperService {
435
623
  payload,
436
624
  activeConfig?.config_json,
437
625
  );
438
- this.logger.debug(`ICS generated (base64 length: ${base64String?.length})`);
626
+ this.loggingService.log(
627
+ 'debug',
628
+ 'wrapperService',
629
+ 'sendIcsInvite',
630
+ `ICS generated (base64 length: ${base64String?.length})`,
631
+ [],
632
+ [],
633
+ );
439
634
 
440
- // Normalize attendees
635
+ // Normalize attendees
441
636
  const attendeeEmails =
442
637
  payload.attendees?.flatMap((a) =>
443
638
  Array.isArray(a.email) ? a.email : [a.email],
@@ -483,12 +678,24 @@ export class WrapperService {
483
678
  mapped_entities,
484
679
  };
485
680
 
486
- this.logger.debug(
681
+ this.loggingService.log(
682
+ 'debug',
683
+ 'wrapperService',
684
+ 'sendIcsInvite',
487
685
  `Final payload for ICS send: ${JSON.stringify(payloadSendMail)}`,
686
+ [],
687
+ [],
488
688
  );
489
689
  const result =
490
690
  await this.integrationService.sendGenericMessage(payloadSendMail);
491
- this.logger.log(`ICS mail send result: ${JSON.stringify(result)}`);
691
+ this.loggingService.log(
692
+ 'log',
693
+ 'wrapperService',
694
+ 'sendIcsInvite',
695
+ `ICS mail send result: ${JSON.stringify(result)}`,
696
+ [],
697
+ [],
698
+ );
492
699
  return result;
493
700
  }
494
701
  }
@@ -0,0 +1,10 @@
1
+ import { Controller, Inject } from '@nestjs/common';
2
+ import { LinkedAttributesService } from '../service/linked_attributes.service';
3
+
4
+ @Controller('linked-attributes')
5
+ export class LinkedAttributesController {
6
+ constructor(
7
+ @Inject('LinkedAttributesService')
8
+ private readonly linkedAttributesService: LinkedAttributesService,
9
+ ) {}
10
+ }
@@ -0,0 +1,48 @@
1
+ import { BaseEntity } from 'src/module/meta/entity/base-entity.entity';
2
+ import { Column, Entity } from 'typeorm';
3
+
4
+ @Entity({ name: 'frm_linked_attribute' })
5
+ export class LinkedAttributes extends BaseEntity {
6
+ @Column({ name: 'field_name', type: 'varchar', length: 100, nullable: true })
7
+ field_name: string;
8
+
9
+ @Column({
10
+ name: 'attribute_key',
11
+ type: 'varchar',
12
+ length: 100,
13
+ nullable: true,
14
+ })
15
+ attribute_key: string;
16
+
17
+ @Column({
18
+ name: 'applicable_attribute_key',
19
+ type: 'varchar',
20
+ length: 100,
21
+ nullable: true,
22
+ })
23
+ applicable_attribute_key: string;
24
+
25
+ @Column({
26
+ name: 'mapped_entity_type',
27
+ type: 'varchar',
28
+ length: 50,
29
+ nullable: true,
30
+ })
31
+ mapped_entity_type: string;
32
+
33
+ @Column({
34
+ name: 'applicable_entity_type',
35
+ type: 'varchar',
36
+ length: 50,
37
+ nullable: true,
38
+ })
39
+ applicable_entity_type: string;
40
+
41
+ @Column({
42
+ name: 'saved_filter_code',
43
+ type: 'varchar',
44
+ length: 100,
45
+ nullable: true,
46
+ })
47
+ saved_filter_code: string;
48
+ }
@@ -0,0 +1,16 @@
1
+ import { Module } from '@nestjs/common';
2
+ import { EntityModule } from '../meta/entity.module';
3
+ import { TypeOrmModule } from '@nestjs/typeorm';
4
+ import { LinkedAttributes } from './entity/linked_attribute.entity';
5
+ import { LinkedAttributesController } from './controller/linked_attributes.controller';
6
+ import { LinkedAttributesService } from './service/linked_attributes.service';
7
+
8
+ @Module({
9
+ imports: [EntityModule, TypeOrmModule.forFeature([LinkedAttributes])],
10
+ controllers: [LinkedAttributesController],
11
+ providers: [
12
+ { provide: 'LinkedAttributesService', useClass: LinkedAttributesService },
13
+ ],
14
+ exports: ['LinkedAttributesService'],
15
+ })
16
+ export class LinkedAttributesModule {}
@@ -0,0 +1,12 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { InjectRepository } from '@nestjs/typeorm';
3
+ import { Repository } from 'typeorm';
4
+ import { LinkedAttributes } from '../entity/linked_attribute.entity';
5
+
6
+ @Injectable()
7
+ export class LinkedAttributesRepository {
8
+ constructor(
9
+ @InjectRepository(LinkedAttributes)
10
+ private readonly linkedAttributesRepo: Repository<LinkedAttributes>,
11
+ ) {}
12
+ }
@@ -0,0 +1,22 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { EntityServiceImpl } from 'src/module/meta/service/entity-service-impl.service';
3
+
4
+ @Injectable()
5
+ export class LinkedAttributesService extends EntityServiceImpl {
6
+ constructor() {
7
+ super();
8
+ }
9
+
10
+ async createEntity(payload: any, loggedInUser: any): Promise<any> {
11
+ // Auto-generate attribute_key if missing OR empty
12
+ if (!payload.attribute_key || payload.attribute_key.trim() === '') {
13
+ payload.attribute_key = payload.field_name
14
+ .trim()
15
+ .toLowerCase()
16
+ .replace(/\s+/g, '_'); // replace spaces with underscore
17
+ }
18
+
19
+ // Pass to base class create method
20
+ return super.createEntity(payload, loggedInUser);
21
+ }
22
+ }
@@ -151,12 +151,13 @@ export class FieldMapperService extends EntityServiceImpl {
151
151
  const targetEntityIds = relations.map((r) => r.target_entity_id);
152
152
 
153
153
  this.loggingService.log(
154
- 'package',
154
+ 'debug',
155
155
  'fieldMapperService',
156
- 'targetEntityIds',
157
- targetEntityIds,
156
+ 'resolveData',
157
+ `Resolved targetEntityIds: ${targetEntityIds} for entityType: ${entityType}`,
158
+ [parent_type, parent_id, field.mapped_entity_type],
159
+ [],
158
160
  );
159
-
160
161
  if (targetEntityIds.length > 0) {
161
162
  if (filterCode && filterCode !== 'default') {
162
163
  let filterResponse =
@@ -177,10 +178,14 @@ export class FieldMapperService extends EntityServiceImpl {
177
178
  });
178
179
 
179
180
  this.loggingService.log(
180
- 'package',
181
+ 'debug',
181
182
  'fieldMapperService',
182
- 'filterResponse',
183
- `${filterResponse}`,
183
+ 'resolveData',
184
+ `Filter response for filterCode: ${filterCode} is ${JSON.stringify(
185
+ filterResponse,
186
+ )}`,
187
+ [entityType, filterCode, targetEntityIds],
188
+ [],
184
189
  );
185
190
 
186
191
  inMemory[entityType][filterCode] =