rez_core 6.6.6 → 7.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1067) hide show
  1. package/.claude/settings.local.json +26 -0
  2. package/.idea/250218_nodejs_core.iml +9 -0
  3. package/.idea/codeStyles/Project.xml +59 -0
  4. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  5. package/.idea/copilot.data.migration.agent.xml +6 -0
  6. package/.idea/copilot.data.migration.ask.xml +6 -0
  7. package/.idea/copilot.data.migration.ask2agent.xml +6 -0
  8. package/.idea/copilot.data.migration.edit.xml +6 -0
  9. package/.idea/inspectionProfiles/Project_Default.xml +6 -0
  10. package/.idea/misc.xml +6 -0
  11. package/.idea/modules.xml +8 -0
  12. package/.idea/prettier.xml +6 -0
  13. package/.idea/vcs.xml +6 -0
  14. package/.prettierrc +3 -3
  15. package/README.md +99 -99
  16. package/dist/app.controller.js.map +1 -1
  17. package/dist/app.module.js +4 -10
  18. package/dist/app.module.js.map +1 -1
  19. package/dist/constant/attribute.constant.d.ts +8 -0
  20. package/dist/constant/attribute.constant.js +14 -0
  21. package/dist/constant/attribute.constant.js.map +1 -0
  22. package/dist/constant/db-data-type.constant.d.ts +33 -0
  23. package/dist/constant/db-data-type.constant.js +119 -0
  24. package/dist/constant/db-data-type.constant.js.map +1 -0
  25. package/dist/constant/entity.constant.d.ts +4 -0
  26. package/dist/constant/entity.constant.js +9 -0
  27. package/dist/constant/entity.constant.js.map +1 -0
  28. package/dist/constant/status.constant.d.ts +4 -0
  29. package/dist/constant/status.constant.js +9 -0
  30. package/dist/constant/status.constant.js.map +1 -0
  31. package/dist/core.module.js +55 -42
  32. package/dist/core.module.js.map +1 -1
  33. package/dist/module/auth/auth.module.d.ts +6 -1
  34. package/dist/module/auth/auth.module.js +29 -7
  35. package/dist/module/auth/auth.module.js.map +1 -1
  36. package/dist/module/{user/entity/user.entity.d.ts → auth/dto/user.dto.d.ts} +13 -5
  37. package/dist/module/auth/dto/user.dto.js +7 -0
  38. package/dist/module/auth/dto/user.dto.js.map +1 -0
  39. package/dist/module/auth/services/auth.service.d.ts +1 -1
  40. package/dist/module/auth/strategies/jwt.strategy.d.ts +6 -2
  41. package/dist/module/auth/strategies/jwt.strategy.js +18 -4
  42. package/dist/module/auth/strategies/jwt.strategy.js.map +1 -1
  43. package/dist/module/dashboard/controller/dashboard.controller.d.ts +7 -7
  44. package/dist/module/dashboard/dashboard.module.js +0 -2
  45. package/dist/module/dashboard/dashboard.module.js.map +1 -1
  46. package/dist/module/dashboard/entity/dashboard_page_data.entity.d.ts +0 -1
  47. package/dist/module/dashboard/entity/dashboard_page_data.entity.js +1 -6
  48. package/dist/module/dashboard/entity/dashboard_page_data.entity.js.map +1 -1
  49. package/dist/module/dashboard/entity/widget_master.entity.d.ts +0 -1
  50. package/dist/module/dashboard/entity/widget_master.entity.js +1 -6
  51. package/dist/module/dashboard/entity/widget_master.entity.js.map +1 -1
  52. package/dist/module/dashboard/service/dashboard.service.d.ts +8 -10
  53. package/dist/module/dashboard/service/dashboard.service.js +3 -18
  54. package/dist/module/dashboard/service/dashboard.service.js.map +1 -1
  55. package/dist/module/eav/controller/eav.controller.d.ts +21 -0
  56. package/dist/module/eav/controller/eav.controller.js +127 -0
  57. package/dist/module/eav/controller/eav.controller.js.map +1 -0
  58. package/dist/module/eav/dto/eav-operation.dto.d.ts +20 -0
  59. package/dist/module/eav/dto/eav-operation.dto.js +75 -0
  60. package/dist/module/eav/dto/eav-operation.dto.js.map +1 -0
  61. package/dist/module/eav/eav.module.d.ts +2 -0
  62. package/dist/module/eav/eav.module.js +84 -0
  63. package/dist/module/eav/eav.module.js.map +1 -0
  64. package/dist/module/eav/entity/eav-boolean.entity.d.ts +9 -0
  65. package/dist/module/eav/entity/eav-boolean.entity.js +48 -0
  66. package/dist/module/eav/entity/eav-boolean.entity.js.map +1 -0
  67. package/dist/module/eav/entity/eav-date.entity.d.ts +9 -0
  68. package/dist/module/eav/entity/eav-date.entity.js +48 -0
  69. package/dist/module/eav/entity/eav-date.entity.js.map +1 -0
  70. package/dist/module/eav/entity/eav-decimal.entity.d.ts +9 -0
  71. package/dist/module/eav/entity/eav-decimal.entity.js +48 -0
  72. package/dist/module/eav/entity/eav-decimal.entity.js.map +1 -0
  73. package/dist/module/eav/entity/eav-int.entity.d.ts +9 -0
  74. package/dist/module/eav/entity/eav-int.entity.js +48 -0
  75. package/dist/module/eav/entity/eav-int.entity.js.map +1 -0
  76. package/dist/module/eav/entity/eav-json.entity.d.ts +9 -0
  77. package/dist/module/eav/entity/eav-json.entity.js +48 -0
  78. package/dist/module/eav/entity/eav-json.entity.js.map +1 -0
  79. package/dist/module/eav/entity/eav-text.entity.d.ts +9 -0
  80. package/dist/module/eav/entity/eav-text.entity.js +48 -0
  81. package/dist/module/eav/entity/eav-text.entity.js.map +1 -0
  82. package/dist/module/eav/entity/eav-time.entity.d.ts +9 -0
  83. package/dist/module/eav/entity/eav-time.entity.js +48 -0
  84. package/dist/module/eav/entity/eav-time.entity.js.map +1 -0
  85. package/dist/module/eav/entity/eav-timestamp.entity.d.ts +9 -0
  86. package/dist/module/eav/entity/eav-timestamp.entity.js +48 -0
  87. package/dist/module/eav/entity/eav-timestamp.entity.js.map +1 -0
  88. package/dist/module/eav/entity/eav-varchar.entity.d.ts +9 -0
  89. package/dist/module/eav/entity/eav-varchar.entity.js +48 -0
  90. package/dist/module/eav/entity/eav-varchar.entity.js.map +1 -0
  91. package/dist/module/eav/interface/eav-strategy.interface.d.ts +8 -0
  92. package/dist/module/eav/interface/eav-strategy.interface.js +3 -0
  93. package/dist/module/eav/interface/eav-strategy.interface.js.map +1 -0
  94. package/dist/module/eav/repository/eav-boolean.repository.d.ts +13 -0
  95. package/dist/module/eav/repository/eav-boolean.repository.js +57 -0
  96. package/dist/module/eav/repository/eav-boolean.repository.js.map +1 -0
  97. package/dist/module/eav/repository/eav-date.repository.d.ts +13 -0
  98. package/dist/module/eav/repository/eav-date.repository.js +57 -0
  99. package/dist/module/eav/repository/eav-date.repository.js.map +1 -0
  100. package/dist/module/eav/repository/eav-decimal.repository.d.ts +13 -0
  101. package/dist/module/eav/repository/eav-decimal.repository.js +57 -0
  102. package/dist/module/eav/repository/eav-decimal.repository.js.map +1 -0
  103. package/dist/module/eav/repository/eav-int.repository.d.ts +13 -0
  104. package/dist/module/eav/repository/eav-int.repository.js +57 -0
  105. package/dist/module/eav/repository/eav-int.repository.js.map +1 -0
  106. package/dist/module/eav/repository/eav-json.repository.d.ts +13 -0
  107. package/dist/module/eav/repository/eav-json.repository.js +57 -0
  108. package/dist/module/eav/repository/eav-json.repository.js.map +1 -0
  109. package/dist/module/eav/repository/eav-text.repository.d.ts +13 -0
  110. package/dist/module/eav/repository/eav-text.repository.js +57 -0
  111. package/dist/module/eav/repository/eav-text.repository.js.map +1 -0
  112. package/dist/module/eav/repository/eav-time.repository.d.ts +13 -0
  113. package/dist/module/eav/repository/eav-time.repository.js +57 -0
  114. package/dist/module/eav/repository/eav-time.repository.js.map +1 -0
  115. package/dist/module/eav/repository/eav-timestamp.repository.d.ts +13 -0
  116. package/dist/module/eav/repository/eav-timestamp.repository.js +57 -0
  117. package/dist/module/eav/repository/eav-timestamp.repository.js.map +1 -0
  118. package/dist/module/eav/repository/eav-varchar.repository.d.ts +13 -0
  119. package/dist/module/eav/repository/eav-varchar.repository.js +57 -0
  120. package/dist/module/eav/repository/eav-varchar.repository.js.map +1 -0
  121. package/dist/module/eav/service/eav-boolean.service.d.ts +12 -0
  122. package/dist/module/eav/service/eav-boolean.service.js +59 -0
  123. package/dist/module/eav/service/eav-boolean.service.js.map +1 -0
  124. package/dist/module/eav/service/eav-date.service.d.ts +12 -0
  125. package/dist/module/eav/service/eav-date.service.js +59 -0
  126. package/dist/module/eav/service/eav-date.service.js.map +1 -0
  127. package/dist/module/eav/service/eav-decimal.service.d.ts +12 -0
  128. package/dist/module/eav/service/eav-decimal.service.js +59 -0
  129. package/dist/module/eav/service/eav-decimal.service.js.map +1 -0
  130. package/dist/module/eav/service/eav-factory.service.d.ts +26 -0
  131. package/dist/module/eav/service/eav-factory.service.js +81 -0
  132. package/dist/module/eav/service/eav-factory.service.js.map +1 -0
  133. package/dist/module/eav/service/eav-int.service.d.ts +12 -0
  134. package/dist/module/eav/service/eav-int.service.js +59 -0
  135. package/dist/module/eav/service/eav-int.service.js.map +1 -0
  136. package/dist/module/eav/service/eav-json.service.d.ts +12 -0
  137. package/dist/module/eav/service/eav-json.service.js +59 -0
  138. package/dist/module/eav/service/eav-json.service.js.map +1 -0
  139. package/dist/module/eav/service/eav-text.service.d.ts +12 -0
  140. package/dist/module/eav/service/eav-text.service.js +59 -0
  141. package/dist/module/eav/service/eav-text.service.js.map +1 -0
  142. package/dist/module/eav/service/eav-time.service.d.ts +12 -0
  143. package/dist/module/eav/service/eav-time.service.js +59 -0
  144. package/dist/module/eav/service/eav-time.service.js.map +1 -0
  145. package/dist/module/eav/service/eav-timestamp.service.d.ts +12 -0
  146. package/dist/module/eav/service/eav-timestamp.service.js +59 -0
  147. package/dist/module/eav/service/eav-timestamp.service.js.map +1 -0
  148. package/dist/module/eav/service/eav-varchar.service.d.ts +12 -0
  149. package/dist/module/eav/service/eav-varchar.service.js +59 -0
  150. package/dist/module/eav/service/eav-varchar.service.js.map +1 -0
  151. package/dist/module/eav/service/eav.service.d.ts +14 -0
  152. package/dist/module/eav/service/eav.service.js +65 -0
  153. package/dist/module/eav/service/eav.service.js.map +1 -0
  154. package/dist/module/entity_json/controller/entity_json.controller.d.ts +2 -5
  155. package/dist/module/entity_json/controller/entity_json.controller.js +7 -21
  156. package/dist/module/entity_json/controller/entity_json.controller.js.map +1 -1
  157. package/dist/module/entity_json/service/entity_json.service.d.ts +10 -2
  158. package/dist/module/entity_json/service/entity_json.service.js +102 -95
  159. package/dist/module/entity_json/service/entity_json.service.js.map +1 -1
  160. package/dist/module/export/service/export.service.js +5 -0
  161. package/dist/module/export/service/export.service.js.map +1 -1
  162. package/dist/module/filter/controller/filter.controller.d.ts +1 -12
  163. package/dist/module/filter/controller/filter.controller.js +3 -2
  164. package/dist/module/filter/controller/filter.controller.js.map +1 -1
  165. package/dist/module/filter/dto/filter-request.dto.d.ts +2 -1
  166. package/dist/module/filter/entity/saved-filter-detail.entity.d.ts +0 -1
  167. package/dist/module/filter/entity/saved-filter-detail.entity.js +1 -7
  168. package/dist/module/filter/entity/saved-filter-detail.entity.js.map +1 -1
  169. package/dist/module/filter/entity/saved-filter-master.entity.d.ts +0 -1
  170. package/dist/module/filter/entity/saved-filter-master.entity.js +1 -7
  171. package/dist/module/filter/entity/saved-filter-master.entity.js.map +1 -1
  172. package/dist/module/filter/filter.module.js +2 -11
  173. package/dist/module/filter/filter.module.js.map +1 -1
  174. package/dist/module/filter/repository/saved-filter.repository.d.ts +1 -1
  175. package/dist/module/filter/repository/saved-filter.repository.js +2 -4
  176. package/dist/module/filter/repository/saved-filter.repository.js.map +1 -1
  177. package/dist/module/filter/service/filter.service.d.ts +5 -38
  178. package/dist/module/filter/service/filter.service.js +134 -88
  179. package/dist/module/filter/service/filter.service.js.map +1 -1
  180. package/dist/module/filter/service/saved-filter.service.d.ts +3 -4
  181. package/dist/module/filter/service/saved-filter.service.js +18 -15
  182. package/dist/module/filter/service/saved-filter.service.js.map +1 -1
  183. package/dist/module/integration/examples/usage.example.js +9 -9
  184. package/dist/module/integration/service/integration.service.d.ts +1 -6
  185. package/dist/module/integration/service/integration.service.js +4 -18
  186. package/dist/module/integration/service/integration.service.js.map +1 -1
  187. package/dist/module/integration/service/oauth.service.js +0 -2
  188. package/dist/module/integration/service/oauth.service.js.map +1 -1
  189. package/dist/module/integration/service/wrapper.service.js +0 -1
  190. package/dist/module/integration/service/wrapper.service.js.map +1 -1
  191. package/dist/module/integration/strategies/email/gmail-api.strategy.js +7 -23
  192. package/dist/module/integration/strategies/email/gmail-api.strategy.js.map +1 -1
  193. package/dist/module/integration/strategies/email/sendgrid-api.strategy.js +5 -8
  194. package/dist/module/integration/strategies/email/sendgrid-api.strategy.js.map +1 -1
  195. package/dist/module/layout/controller/layout.controller.d.ts +1 -3
  196. package/dist/module/layout/controller/layout.controller.js +3 -7
  197. package/dist/module/layout/controller/layout.controller.js.map +1 -1
  198. package/dist/module/layout/entity/header-items.entity.js +1 -1
  199. package/dist/module/layout/entity/header-section.entity.d.ts +0 -2
  200. package/dist/module/layout/entity/header-section.entity.js +1 -9
  201. package/dist/module/layout/entity/header-section.entity.js.map +1 -1
  202. package/dist/module/layout/layout.module.js +1 -2
  203. package/dist/module/layout/layout.module.js.map +1 -1
  204. package/dist/module/layout/repository/header-section.repository.d.ts +0 -1
  205. package/dist/module/layout/repository/header-section.repository.js +0 -5
  206. package/dist/module/layout/repository/header-section.repository.js.map +1 -1
  207. package/dist/module/layout/service/header-section.service.d.ts +1 -1
  208. package/dist/module/layout/service/header-section.service.js +1 -1
  209. package/dist/module/layout/service/header-section.service.js.map +1 -1
  210. package/dist/module/layout_preference/service/layout_preference.service.d.ts +1 -1
  211. package/dist/module/linked_attributes/controller/linked_attributes.controller.d.ts +1 -0
  212. package/dist/module/linked_attributes/service/linked_attributes.service.d.ts +2 -2
  213. package/dist/module/linked_attributes/service/linked_attributes.service.js +3 -4
  214. package/dist/module/linked_attributes/service/linked_attributes.service.js.map +1 -1
  215. package/dist/module/listmaster/controller/list-master.controller.d.ts +0 -1
  216. package/dist/module/listmaster/controller/list-master.controller.js +0 -19
  217. package/dist/module/listmaster/controller/list-master.controller.js.map +1 -1
  218. package/dist/module/listmaster/entity/list-master-items.entity.d.ts +0 -4
  219. package/dist/module/listmaster/entity/list-master-items.entity.js +2 -20
  220. package/dist/module/listmaster/entity/list-master-items.entity.js.map +1 -1
  221. package/dist/module/listmaster/entity/list-master.entity.d.ts +1 -4
  222. package/dist/module/listmaster/entity/list-master.entity.js +5 -19
  223. package/dist/module/listmaster/entity/list-master.entity.js.map +1 -1
  224. package/dist/module/listmaster/repository/list-master-items.repository.d.ts +2 -2
  225. package/dist/module/listmaster/repository/list-master-items.repository.js +68 -25
  226. package/dist/module/listmaster/repository/list-master-items.repository.js.map +1 -1
  227. package/dist/module/listmaster/service/list-master-item.service.d.ts +1 -1
  228. package/dist/module/listmaster/service/list-master-item.service.js +129 -48
  229. package/dist/module/listmaster/service/list-master-item.service.js.map +1 -1
  230. package/dist/module/listmaster/service/list-master.service.d.ts +17 -13
  231. package/dist/module/listmaster/service/list-master.service.js +228 -135
  232. package/dist/module/listmaster/service/list-master.service.js.map +1 -1
  233. package/dist/module/mapper/entity/field-lovs.entity.d.ts +0 -1
  234. package/dist/module/mapper/entity/field-lovs.entity.js +1 -6
  235. package/dist/module/mapper/entity/field-lovs.entity.js.map +1 -1
  236. package/dist/module/mapper/entity/field-mapper.entity.d.ts +0 -1
  237. package/dist/module/mapper/entity/field-mapper.entity.js +1 -6
  238. package/dist/module/mapper/entity/field-mapper.entity.js.map +1 -1
  239. package/dist/module/mapper/entity/mapper.entity.d.ts +0 -2
  240. package/dist/module/mapper/entity/mapper.entity.js +1 -10
  241. package/dist/module/mapper/entity/mapper.entity.js.map +1 -1
  242. package/dist/module/mapper/service/field-mapper.service.d.ts +1 -1
  243. package/dist/module/mapper/service/field-mapper.service.js +0 -1
  244. package/dist/module/mapper/service/field-mapper.service.js.map +1 -1
  245. package/dist/module/master/controller/master.controller.d.ts +1 -3
  246. package/dist/module/master/controller/master.controller.js +4 -6
  247. package/dist/module/master/controller/master.controller.js.map +1 -1
  248. package/dist/module/master/service/master.service.d.ts +1 -1
  249. package/dist/module/master/service/master.service.js +30 -44
  250. package/dist/module/master/service/master.service.js.map +1 -1
  251. package/dist/module/meta/controller/attribute-master.controller.d.ts +3 -8
  252. package/dist/module/meta/controller/attribute-master.controller.js +5 -19
  253. package/dist/module/meta/controller/attribute-master.controller.js.map +1 -1
  254. package/dist/module/meta/controller/entity-dynamic.controller.js +6 -3
  255. package/dist/module/meta/controller/entity-dynamic.controller.js.map +1 -1
  256. package/dist/module/meta/controller/entity-master.controller.js +1 -0
  257. package/dist/module/meta/controller/entity-master.controller.js.map +1 -1
  258. package/dist/module/meta/controller/entity.controller.js +3 -3
  259. package/dist/module/meta/controller/entity.controller.js.map +1 -1
  260. package/dist/module/meta/controller/entity.public.controller.js +1 -0
  261. package/dist/module/meta/controller/entity.public.controller.js.map +1 -1
  262. package/dist/module/meta/controller/media.controller.d.ts +0 -6
  263. package/dist/module/meta/controller/media.controller.js +0 -27
  264. package/dist/module/meta/controller/media.controller.js.map +1 -1
  265. package/dist/module/meta/controller/meta.controller.d.ts +1 -6
  266. package/dist/module/meta/controller/meta.controller.js +2 -19
  267. package/dist/module/meta/controller/meta.controller.js.map +1 -1
  268. package/dist/module/meta/entity/attribute-master.entity.d.ts +12 -14
  269. package/dist/module/meta/entity/attribute-master.entity.js +41 -77
  270. package/dist/module/meta/entity/attribute-master.entity.js.map +1 -1
  271. package/dist/module/meta/entity/base-entity.entity.d.ts +6 -7
  272. package/dist/module/meta/entity/base-entity.entity.js +24 -47
  273. package/dist/module/meta/entity/base-entity.entity.js.map +1 -1
  274. package/dist/module/meta/entity/dynamic.entity.d.ts +3 -0
  275. package/dist/module/{enterprise/service/brand.service.js → meta/entity/dynamic.entity.js} +9 -9
  276. package/dist/module/meta/entity/dynamic.entity.js.map +1 -0
  277. package/dist/module/meta/entity/entity-master.entity.d.ts +6 -9
  278. package/dist/module/meta/entity/entity-master.entity.js +21 -66
  279. package/dist/module/meta/entity/entity-master.entity.js.map +1 -1
  280. package/dist/module/meta/entity/entity-relation-data.entity.d.ts +0 -1
  281. package/dist/module/meta/entity/entity-relation-data.entity.js +1 -7
  282. package/dist/module/meta/entity/entity-relation-data.entity.js.map +1 -1
  283. package/dist/module/meta/entity/entity-relation.entity.d.ts +0 -1
  284. package/dist/module/meta/entity/entity-relation.entity.js +1 -7
  285. package/dist/module/meta/entity/entity-relation.entity.js.map +1 -1
  286. package/dist/module/meta/entity/entity-table-column.entity.d.ts +0 -1
  287. package/dist/module/meta/entity/entity-table-column.entity.js +1 -7
  288. package/dist/module/meta/entity/entity-table-column.entity.js.map +1 -1
  289. package/dist/module/meta/entity/entity-table.entity.d.ts +0 -1
  290. package/dist/module/meta/entity/entity-table.entity.js +1 -7
  291. package/dist/module/meta/entity/entity-table.entity.js.map +1 -1
  292. package/dist/module/meta/entity/media-data.entity.d.ts +0 -2
  293. package/dist/module/meta/entity/media-data.entity.js +0 -8
  294. package/dist/module/meta/entity/media-data.entity.js.map +1 -1
  295. package/dist/module/meta/entity/preference.entity.d.ts +0 -1
  296. package/dist/module/meta/entity/preference.entity.js +1 -7
  297. package/dist/module/meta/entity/preference.entity.js.map +1 -1
  298. package/dist/module/meta/entity/view-master.entity.d.ts +0 -1
  299. package/dist/module/meta/entity/view-master.entity.js +1 -7
  300. package/dist/module/meta/entity/view-master.entity.js.map +1 -1
  301. package/dist/module/meta/entity.module.js +9 -23
  302. package/dist/module/meta/entity.module.js.map +1 -1
  303. package/dist/module/meta/repository/attribute-master.repository.d.ts +9 -3
  304. package/dist/module/meta/repository/attribute-master.repository.js +41 -15
  305. package/dist/module/meta/repository/attribute-master.repository.js.map +1 -1
  306. package/dist/module/meta/repository/entity-master.repository.js +1 -1
  307. package/dist/module/meta/repository/entity-master.repository.js.map +1 -1
  308. package/dist/module/meta/repository/entity-relation.repository.d.ts +1 -0
  309. package/dist/module/meta/repository/entity-relation.repository.js +10 -0
  310. package/dist/module/meta/repository/entity-relation.repository.js.map +1 -1
  311. package/dist/module/meta/service/attribute-master.service.d.ts +7 -7
  312. package/dist/module/meta/service/attribute-master.service.js +74 -49
  313. package/dist/module/meta/service/attribute-master.service.js.map +1 -1
  314. package/dist/module/meta/service/entity-dynamic.service.d.ts +13 -14
  315. package/dist/module/meta/service/entity-dynamic.service.js +215 -80
  316. package/dist/module/meta/service/entity-dynamic.service.js.map +1 -1
  317. package/dist/module/meta/service/entity-master.service.d.ts +10 -1
  318. package/dist/module/meta/service/entity-master.service.js +80 -3
  319. package/dist/module/meta/service/entity-master.service.js.map +1 -1
  320. package/dist/module/meta/service/entity-relation.service.d.ts +6 -5
  321. package/dist/module/meta/service/entity-relation.service.js +7 -10
  322. package/dist/module/meta/service/entity-relation.service.js.map +1 -1
  323. package/dist/module/meta/service/entity-service-impl.service.d.ts +4 -4
  324. package/dist/module/meta/service/entity-service-impl.service.js +14 -18
  325. package/dist/module/meta/service/entity-service-impl.service.js.map +1 -1
  326. package/dist/module/meta/service/entity-table.service.d.ts +4 -5
  327. package/dist/module/meta/service/entity-table.service.js +24 -45
  328. package/dist/module/meta/service/entity-table.service.js.map +1 -1
  329. package/dist/module/meta/service/entity-validation.service.d.ts +1 -3
  330. package/dist/module/meta/service/entity-validation.service.js +5 -34
  331. package/dist/module/meta/service/entity-validation.service.js.map +1 -1
  332. package/dist/module/meta/service/entity.service.d.ts +2 -2
  333. package/dist/module/meta/service/field-group.service.d.ts +1 -1
  334. package/dist/module/meta/service/media-data.service.d.ts +0 -4
  335. package/dist/module/meta/service/media-data.service.js +0 -129
  336. package/dist/module/meta/service/media-data.service.js.map +1 -1
  337. package/dist/module/meta/service/resolver.service.d.ts +2 -2
  338. package/dist/module/meta/service/resolver.service.js +55 -95
  339. package/dist/module/meta/service/resolver.service.js.map +1 -1
  340. package/dist/module/meta/service/section-master.service.d.ts +1 -1
  341. package/dist/module/meta/service/view-master.service.d.ts +1 -1
  342. package/dist/module/module/module.module.d.ts +0 -2
  343. package/dist/module/module/module.module.js +0 -54
  344. package/dist/module/module/module.module.js.map +1 -1
  345. package/dist/module/notification/entity/notification.entity.d.ts +17 -2
  346. package/dist/module/notification/entity/notification.entity.js +68 -2
  347. package/dist/module/notification/entity/notification.entity.js.map +1 -1
  348. package/dist/module/notification/notification.module.js +3 -12
  349. package/dist/module/notification/notification.module.js.map +1 -1
  350. package/dist/module/notification/service/email.service.d.ts +1 -0
  351. package/dist/module/notification/service/email.service.js +14 -0
  352. package/dist/module/notification/service/email.service.js.map +1 -1
  353. package/dist/module/notification/service/notification.service.d.ts +1 -5
  354. package/dist/module/notification/service/notification.service.js +41 -31
  355. package/dist/module/notification/service/notification.service.js.map +1 -1
  356. package/dist/module/preference_master/entity/preference.entity.d.ts +9 -0
  357. package/dist/module/{module/entity/module-access.entity.js → preference_master/entity/preference.entity.js} +24 -24
  358. package/dist/module/preference_master/entity/preference.entity.js.map +1 -0
  359. package/dist/module/preference_master/preference.service.d.ts +8 -0
  360. package/dist/module/{enterprise/service/enterprise.service.js → preference_master/preference.service.js} +14 -14
  361. package/dist/module/preference_master/preference.service.js.map +1 -0
  362. package/dist/module/preference_master/repo/preference.repository.d.ts +8 -0
  363. package/dist/module/{user/repository/userSession.repository.js → preference_master/repo/preference.repository.js} +25 -22
  364. package/dist/module/preference_master/repo/preference.repository.js.map +1 -0
  365. package/dist/module/user/entity/user-role-mapping.entity.d.ts +0 -12
  366. package/dist/module/user/entity/user-role-mapping.entity.js +0 -62
  367. package/dist/module/user/entity/user-role-mapping.entity.js.map +1 -1
  368. package/dist/module/workflow/controller/activity-log.controller.d.ts +5 -6
  369. package/dist/module/workflow/entity/action-category.entity.d.ts +0 -1
  370. package/dist/module/workflow/entity/action-category.entity.js +1 -7
  371. package/dist/module/workflow/entity/action-category.entity.js.map +1 -1
  372. package/dist/module/workflow/entity/action-data.entity.d.ts +0 -1
  373. package/dist/module/workflow/entity/action-data.entity.js +1 -6
  374. package/dist/module/workflow/entity/action-data.entity.js.map +1 -1
  375. package/dist/module/workflow/entity/action-resources-mapping.entity.d.ts +0 -1
  376. package/dist/module/workflow/entity/action-resources-mapping.entity.js +1 -7
  377. package/dist/module/workflow/entity/action-resources-mapping.entity.js.map +1 -1
  378. package/dist/module/workflow/entity/action-template-mapping.entity.d.ts +0 -1
  379. package/dist/module/workflow/entity/action-template-mapping.entity.js +1 -7
  380. package/dist/module/workflow/entity/action-template-mapping.entity.js.map +1 -1
  381. package/dist/module/workflow/entity/action.entity.d.ts +0 -1
  382. package/dist/module/workflow/entity/action.entity.js +1 -7
  383. package/dist/module/workflow/entity/action.entity.js.map +1 -1
  384. package/dist/module/workflow/entity/activity-log.entity.d.ts +0 -1
  385. package/dist/module/workflow/entity/activity-log.entity.js +1 -6
  386. package/dist/module/workflow/entity/activity-log.entity.js.map +1 -1
  387. package/dist/module/workflow/entity/comm-template.entity.d.ts +0 -1
  388. package/dist/module/workflow/entity/comm-template.entity.js +1 -7
  389. package/dist/module/workflow/entity/comm-template.entity.js.map +1 -1
  390. package/dist/module/workflow/entity/entity-modification.entity.d.ts +0 -1
  391. package/dist/module/workflow/entity/entity-modification.entity.js +1 -7
  392. package/dist/module/workflow/entity/entity-modification.entity.js.map +1 -1
  393. package/dist/module/workflow/entity/form.entity.d.ts +0 -1
  394. package/dist/module/workflow/entity/form.entity.js +1 -6
  395. package/dist/module/workflow/entity/form.entity.js.map +1 -1
  396. package/dist/module/workflow/entity/stage-action-mapping.entity.d.ts +0 -1
  397. package/dist/module/workflow/entity/stage-action-mapping.entity.js +1 -7
  398. package/dist/module/workflow/entity/stage-action-mapping.entity.js.map +1 -1
  399. package/dist/module/workflow/entity/stage-group.entity.d.ts +0 -1
  400. package/dist/module/workflow/entity/stage-group.entity.js +1 -7
  401. package/dist/module/workflow/entity/stage-group.entity.js.map +1 -1
  402. package/dist/module/workflow/entity/stage-movement-data.entity.d.ts +0 -1
  403. package/dist/module/workflow/entity/stage-movement-data.entity.js +1 -7
  404. package/dist/module/workflow/entity/stage-movement-data.entity.js.map +1 -1
  405. package/dist/module/workflow/entity/stage.entity.d.ts +0 -1
  406. package/dist/module/workflow/entity/stage.entity.js +1 -7
  407. package/dist/module/workflow/entity/stage.entity.js.map +1 -1
  408. package/dist/module/workflow/entity/task-data.entity.d.ts +0 -1
  409. package/dist/module/workflow/entity/task-data.entity.js +1 -6
  410. package/dist/module/workflow/entity/task-data.entity.js.map +1 -1
  411. package/dist/module/workflow/entity/workflow-data.entity.d.ts +0 -1
  412. package/dist/module/workflow/entity/workflow-data.entity.js +1 -10
  413. package/dist/module/workflow/entity/workflow-data.entity.js.map +1 -1
  414. package/dist/module/workflow/entity/workflow.entity.d.ts +0 -1
  415. package/dist/module/workflow/entity/workflow.entity.js +1 -7
  416. package/dist/module/workflow/entity/workflow.entity.js.map +1 -1
  417. package/dist/module/workflow/repository/action-category.repository.js.map +1 -1
  418. package/dist/module/workflow/repository/action-data.repository.d.ts +2 -2
  419. package/dist/module/workflow/repository/action-data.repository.js +9 -17
  420. package/dist/module/workflow/repository/action-data.repository.js.map +1 -1
  421. package/dist/module/workflow/repository/action.repository.d.ts +2 -2
  422. package/dist/module/workflow/repository/action.repository.js +12 -12
  423. package/dist/module/workflow/repository/action.repository.js.map +1 -1
  424. package/dist/module/workflow/repository/activity-log.repository.d.ts +5 -6
  425. package/dist/module/workflow/repository/comm-template.repository.js +2 -2
  426. package/dist/module/workflow/repository/comm-template.repository.js.map +1 -1
  427. package/dist/module/workflow/repository/form-master.repository.d.ts +2 -2
  428. package/dist/module/workflow/repository/form-master.repository.js +2 -2
  429. package/dist/module/workflow/repository/form-master.repository.js.map +1 -1
  430. package/dist/module/workflow/repository/stage-group.repository.d.ts +6 -6
  431. package/dist/module/workflow/repository/stage-movement.repository.d.ts +1 -1
  432. package/dist/module/workflow/repository/stage.repository.d.ts +5 -6
  433. package/dist/module/workflow/repository/stage.repository.js +8 -8
  434. package/dist/module/workflow/repository/task.repository.d.ts +1 -1
  435. package/dist/module/workflow/repository/task.repository.js +5 -5
  436. package/dist/module/workflow/repository/task.repository.js.map +1 -1
  437. package/dist/module/workflow/repository/workflow.repository.js +1 -1
  438. package/dist/module/workflow/repository/workflow.repository.js.map +1 -1
  439. package/dist/module/workflow/service/action-category.service.js.map +1 -1
  440. package/dist/module/workflow/service/action-data.service.d.ts +1 -1
  441. package/dist/module/workflow/service/action-data.service.js +1 -2
  442. package/dist/module/workflow/service/action-data.service.js.map +1 -1
  443. package/dist/module/workflow/service/action-template-mapping.service.js +2 -2
  444. package/dist/module/workflow/service/action.service.d.ts +1 -1
  445. package/dist/module/workflow/service/action.service.js +15 -17
  446. package/dist/module/workflow/service/action.service.js.map +1 -1
  447. package/dist/module/workflow/service/activity-log.service.d.ts +6 -7
  448. package/dist/module/workflow/service/activity-log.service.js.map +1 -1
  449. package/dist/module/workflow/service/comm-template.service.d.ts +1 -1
  450. package/dist/module/workflow/service/comm-template.service.js +0 -2
  451. package/dist/module/workflow/service/comm-template.service.js.map +1 -1
  452. package/dist/module/workflow/service/entity-modification.service.d.ts +1 -1
  453. package/dist/module/workflow/service/entity-modification.service.js +2 -3
  454. package/dist/module/workflow/service/entity-modification.service.js.map +1 -1
  455. package/dist/module/workflow/service/form-master.service.d.ts +1 -1
  456. package/dist/module/workflow/service/form-master.service.js +2 -2
  457. package/dist/module/workflow/service/form-master.service.js.map +1 -1
  458. package/dist/module/workflow/service/populate-workflow.service.d.ts +2 -6
  459. package/dist/module/workflow/service/populate-workflow.service.js +6 -17
  460. package/dist/module/workflow/service/populate-workflow.service.js.map +1 -1
  461. package/dist/module/workflow/service/stage-group.service.d.ts +1 -1
  462. package/dist/module/workflow/service/stage.service.d.ts +1 -1
  463. package/dist/module/workflow/service/stage.service.js.map +1 -1
  464. package/dist/module/workflow/service/task.service.d.ts +1 -1
  465. package/dist/module/workflow/service/task.service.js +10 -13
  466. package/dist/module/workflow/service/task.service.js.map +1 -1
  467. package/dist/module/workflow/service/workflow-meta.service.d.ts +1 -1
  468. package/dist/module/workflow/service/workflow-meta.service.js +2 -7
  469. package/dist/module/workflow/service/workflow-meta.service.js.map +1 -1
  470. package/dist/module/workflow/service/workflow.service.d.ts +1 -1
  471. package/dist/module/workflow/service/workflow.service.js +2 -2
  472. package/dist/module/workflow/service/workflow.service.js.map +1 -1
  473. package/dist/module/workflow-automation/entity/workflow-automation.entity.d.ts +1 -3
  474. package/dist/module/workflow-automation/entity/workflow-automation.entity.js +1 -9
  475. package/dist/module/workflow-automation/entity/workflow-automation.entity.js.map +1 -1
  476. package/dist/module/workflow-automation/service/schedule-handler.service.js +11 -12
  477. package/dist/module/workflow-automation/service/schedule-handler.service.js.map +1 -1
  478. package/dist/module/workflow-automation/service/workflow-automation.service.d.ts +8 -10
  479. package/dist/module/workflow-automation/service/workflow-automation.service.js +18 -15
  480. package/dist/module/workflow-automation/service/workflow-automation.service.js.map +1 -1
  481. package/dist/module/workflow-automation/workflow-automation.module.js +3 -1
  482. package/dist/module/workflow-automation/workflow-automation.module.js.map +1 -1
  483. package/dist/module/workflow-schedule/interfaces/schedule-job-data.interface.d.ts +2 -3
  484. package/dist/module/workflow-schedule/processors/schedule.processor.js +5 -9
  485. package/dist/module/workflow-schedule/processors/schedule.processor.js.map +1 -1
  486. package/dist/module/workflow-schedule/service/workflow-schedule.service.d.ts +1 -1
  487. package/dist/module/workflow-schedule/service/workflow-schedule.service.js +4 -13
  488. package/dist/module/workflow-schedule/service/workflow-schedule.service.js.map +1 -1
  489. package/dist/table.config.d.ts +2 -23
  490. package/dist/table.config.js +21 -33
  491. package/dist/table.config.js.map +1 -1
  492. package/dist/tsconfig.build.tsbuildinfo +1 -1
  493. package/dist/utils/service/reflection-helper.service.js +2 -2
  494. package/docs/modules/event-driven-integration-design.md +91 -91
  495. package/docs/modules/integration.md +250 -250
  496. package/eslint.config.mjs +34 -34
  497. package/nest-cli.json +14 -14
  498. package/package.json +128 -125
  499. package/server.log +850 -0
  500. package/src/app.controller.ts +12 -13
  501. package/src/app.module.ts +62 -68
  502. package/src/app.service.ts +8 -8
  503. package/src/config/bull.config.ts +69 -69
  504. package/src/config/config.module.ts +17 -17
  505. package/src/config/database.config.ts +48 -48
  506. package/src/constant/attribute.constant.ts +9 -0
  507. package/src/constant/db-data-type.constant.ts +160 -0
  508. package/src/constant/entity.constant.ts +4 -0
  509. package/src/constant/global.constant.ts +67 -67
  510. package/src/constant/status.constant.ts +4 -0
  511. package/src/core.module.ts +96 -94
  512. package/src/decorators/roles.decorator.ts +7 -7
  513. package/src/dtos/response.dto.ts +6 -6
  514. package/src/dtos/response.ts +5 -5
  515. package/src/index.ts +1 -1
  516. package/src/module/auth/auth.module.ts +72 -49
  517. package/src/module/auth/controller/auth.controller.ts +28 -28
  518. package/src/module/auth/dto/user.dto.ts +56 -0
  519. package/src/module/auth/guards/google-auth.guard.ts +9 -9
  520. package/src/module/auth/guards/jwt.guard.ts +22 -22
  521. package/src/module/auth/services/auth.service.ts +56 -56
  522. package/src/module/auth/services/jwt.service.ts +11 -11
  523. package/src/module/auth/strategies/google.strategy.ts +54 -54
  524. package/src/module/auth/strategies/jwt.strategy.ts +64 -58
  525. package/src/module/auth/strategies/local.strategy.ts +13 -13
  526. package/src/module/dashboard/controller/dashboard.controller.ts +38 -38
  527. package/src/module/dashboard/dashboard.module.ts +19 -21
  528. package/src/module/dashboard/entity/dashboard_page_data.entity.ts +23 -27
  529. package/src/module/dashboard/entity/widget_master.entity.ts +15 -18
  530. package/src/module/dashboard/repository/dashboard.repository.ts +49 -49
  531. package/src/module/dashboard/service/dashboard.service.ts +69 -72
  532. package/src/module/eav/EAV_USAGE_GUIDE.md +351 -0
  533. package/src/module/eav/controller/eav.controller.ts +119 -0
  534. package/src/module/eav/dto/eav-operation.dto.ts +62 -0
  535. package/src/module/eav/eav.module.ts +80 -0
  536. package/src/module/eav/entity/eav-boolean.entity.ts +26 -0
  537. package/src/module/eav/entity/eav-date.entity.ts +25 -0
  538. package/src/module/eav/entity/eav-decimal.entity.ts +25 -0
  539. package/src/module/eav/entity/eav-int.entity.ts +25 -0
  540. package/src/module/eav/entity/eav-json.entity.ts +25 -0
  541. package/src/module/eav/entity/eav-text.entity.ts +25 -0
  542. package/src/module/eav/entity/eav-time.entity.ts +25 -0
  543. package/src/module/eav/entity/eav-timestamp.entity.ts +25 -0
  544. package/src/module/eav/entity/eav-varchar.entity.ts +25 -0
  545. package/src/module/eav/interface/eav-strategy.interface.ts +32 -0
  546. package/src/module/eav/repository/eav-boolean.repository.ts +67 -0
  547. package/src/module/eav/repository/eav-date.repository.ts +67 -0
  548. package/src/module/eav/repository/eav-decimal.repository.ts +67 -0
  549. package/src/module/eav/repository/eav-int.repository.ts +67 -0
  550. package/src/module/eav/repository/eav-json.repository.ts +67 -0
  551. package/src/module/eav/repository/eav-text.repository.ts +67 -0
  552. package/src/module/eav/repository/eav-time.repository.ts +67 -0
  553. package/src/module/eav/repository/eav-timestamp.repository.ts +67 -0
  554. package/src/module/eav/repository/eav-varchar.repository.ts +67 -0
  555. package/src/module/eav/service/eav-boolean.service.ts +64 -0
  556. package/src/module/eav/service/eav-date.service.ts +64 -0
  557. package/src/module/eav/service/eav-decimal.service.ts +64 -0
  558. package/src/module/eav/service/eav-factory.service.ts +93 -0
  559. package/src/module/eav/service/eav-int.service.ts +64 -0
  560. package/src/module/eav/service/eav-json.service.ts +64 -0
  561. package/src/module/eav/service/eav-text.service.ts +64 -0
  562. package/src/module/eav/service/eav-time.service.ts +64 -0
  563. package/src/module/eav/service/eav-timestamp.service.ts +64 -0
  564. package/src/module/eav/service/eav-varchar.service.ts +65 -0
  565. package/src/module/eav/service/eav.service.ts +116 -0
  566. package/src/module/entity_json/controller/entity_json.controller.ts +75 -60
  567. package/src/module/entity_json/docs/FlatJson_Filterin_System.md +2803 -2803
  568. package/src/module/entity_json/entity/entityJson.entity.ts +42 -42
  569. package/src/module/entity_json/entity_json.module.ts +22 -22
  570. package/src/module/entity_json/service/entityJson.repository.ts +37 -37
  571. package/src/module/entity_json/service/entity_json.service.ts +492 -486
  572. package/src/module/export/controller/export.controller.ts +83 -83
  573. package/src/module/export/export.module.ts +14 -14
  574. package/src/module/export/service/export.service.ts +107 -105
  575. package/src/module/filter/controller/filter.controller.ts +89 -87
  576. package/src/module/filter/dto/filter-request.dto.ts +41 -39
  577. package/src/module/filter/entity/saved-filter-detail.entity.ts +37 -41
  578. package/src/module/filter/entity/saved-filter-master.entity.ts +30 -35
  579. package/src/module/filter/filter.module.ts +33 -42
  580. package/src/module/filter/repository/saved-filter.repository.ts +247 -249
  581. package/src/module/filter/repository/saved.filter-detail.repository.ts +19 -19
  582. package/src/module/filter/service/filter-evaluator.service.ts +82 -82
  583. package/src/module/filter/service/filter.service.ts +1389 -1406
  584. package/src/module/filter/service/saved-filter.service.ts +164 -154
  585. package/src/module/ics/controller/ics.controller.ts +21 -21
  586. package/src/module/ics/dto/ics.dto.ts +55 -55
  587. package/src/module/ics/ics.module.ts +13 -13
  588. package/src/module/ics/service/ics.service.ts +57 -57
  589. package/src/module/integration/controller/calender-event.controller.ts +31 -31
  590. package/src/module/integration/controller/integration.controller.ts +662 -662
  591. package/src/module/integration/controller/wrapper.controller.ts +37 -37
  592. package/src/module/integration/dto/create-config.dto.ts +526 -526
  593. package/src/module/integration/entity/integration-config.entity.ts +112 -112
  594. package/src/module/integration/entity/integration-entity-mapper.entity.ts +14 -14
  595. package/src/module/integration/entity/integration-source.entity.ts +17 -17
  596. package/src/module/integration/entity/user-integration.entity.ts +71 -71
  597. package/src/module/integration/examples/usage.example.ts +338 -338
  598. package/src/module/integration/factories/base.factory.ts +7 -7
  599. package/src/module/integration/factories/email.factory.ts +49 -49
  600. package/src/module/integration/factories/integration.factory.ts +121 -121
  601. package/src/module/integration/factories/sms.factory.ts +51 -51
  602. package/src/module/integration/factories/telephone.factory.ts +41 -41
  603. package/src/module/integration/factories/whatsapp.factory.ts +56 -56
  604. package/src/module/integration/integration.module.ts +110 -110
  605. package/src/module/integration/service/calendar-event.service.ts +118 -118
  606. package/src/module/integration/service/integration-entity-mapper.service.ts +17 -17
  607. package/src/module/integration/service/integration-queue.service.ts +229 -229
  608. package/src/module/integration/service/integration.service.ts +2632 -2653
  609. package/src/module/integration/service/oauth.service.ts +224 -226
  610. package/src/module/integration/service/wrapper.service.ts +753 -754
  611. package/src/module/integration/strategies/email/gmail-api.strategy.ts +281 -307
  612. package/src/module/integration/strategies/email/outlook-api.strategy.ts +44 -44
  613. package/src/module/integration/strategies/email/outlook.strategy.ts +64 -64
  614. package/src/module/integration/strategies/email/sendgrid-api.strategy.ts +260 -263
  615. package/src/module/integration/strategies/integration.strategy.ts +97 -97
  616. package/src/module/integration/strategies/sms/gupshup-sms.strategy.ts +146 -146
  617. package/src/module/integration/strategies/sms/msg91-sms.strategy.ts +164 -164
  618. package/src/module/integration/strategies/sms/tubelight-sms.strategy.ts +163 -163
  619. package/src/module/integration/strategies/telephone/ozonetel-voice.strategy.ts +238 -238
  620. package/src/module/integration/strategies/telephone/tubelight-voice.strategy.ts +210 -210
  621. package/src/module/integration/strategies/whatsapp/gupshup-whatsapp.strategy.ts +359 -359
  622. package/src/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.ts +372 -372
  623. package/src/module/integration/strategies/whatsapp/whatsapp-cloud.strategy.ts +403 -403
  624. package/src/module/integration/strategies/whatsapp/whatsapp.strategy.ts +57 -57
  625. package/src/module/layout/controller/layout.controller.ts +38 -47
  626. package/src/module/layout/entity/header-items.entity.ts +28 -28
  627. package/src/module/layout/entity/header-section.entity.ts +13 -19
  628. package/src/module/layout/layout.module.ts +20 -21
  629. package/src/module/layout/repository/header-items.repository.ts +18 -18
  630. package/src/module/layout/repository/header-section.repository.ts +16 -22
  631. package/src/module/layout/service/header-section.service.ts +25 -25
  632. package/src/module/layout_preference/controller/layout_preference.controller.ts +76 -76
  633. package/src/module/layout_preference/entity/layout_preference.entity.ts +28 -28
  634. package/src/module/layout_preference/layout_preference.module.ts +22 -22
  635. package/src/module/layout_preference/repository/layout_preference.repository.ts +65 -65
  636. package/src/module/layout_preference/service/layout_preference.service.ts +191 -191
  637. package/src/module/linked_attributes/controller/linked_attributes.controller.ts +137 -137
  638. package/src/module/linked_attributes/dto/create-linked-attribute-smart.dto.ts +54 -54
  639. package/src/module/linked_attributes/entity/linked_attribute.entity.ts +51 -51
  640. package/src/module/linked_attributes/linked_attributes.module.ts +23 -23
  641. package/src/module/linked_attributes/repository/linked_attribute.repository.ts +12 -12
  642. package/src/module/linked_attributes/service/linked_attributes.service.ts +648 -648
  643. package/src/module/linked_attributes/test/linked-attributes.service.spec.ts +244 -244
  644. package/src/module/listmaster/controller/list-master.controller.ts +206 -230
  645. package/src/module/listmaster/entity/list-master-items.entity.ts +30 -43
  646. package/src/module/listmaster/entity/list-master.entity.ts +23 -33
  647. package/src/module/listmaster/listmaster.module.ts +46 -46
  648. package/src/module/listmaster/repository/list-master-items.repository.ts +225 -173
  649. package/src/module/listmaster/repository/list-master.repository.ts +56 -56
  650. package/src/module/listmaster/service/list-master-engine.ts +19 -19
  651. package/src/module/listmaster/service/list-master-extension.interface.ts +4 -4
  652. package/src/module/listmaster/service/list-master-item.service.ts +382 -280
  653. package/src/module/listmaster/service/list-master-registry.ts +15 -15
  654. package/src/module/listmaster/service/list-master.service.ts +767 -527
  655. package/src/module/mapper/controller/field-mapper.controller.ts +76 -76
  656. package/src/module/mapper/controller/mapper.controller.ts +20 -20
  657. package/src/module/mapper/dto/field-mapper.dto.ts +14 -14
  658. package/src/module/mapper/entity/field-lovs.entity.ts +15 -19
  659. package/src/module/mapper/entity/field-mapper.entity.ts +49 -53
  660. package/src/module/mapper/entity/mapper.entity.ts +9 -16
  661. package/src/module/mapper/mapper.module.ts +35 -35
  662. package/src/module/mapper/repository/field-lovs.repository.ts +35 -35
  663. package/src/module/mapper/repository/field-mapper.repository.ts +42 -42
  664. package/src/module/mapper/repository/mapper.repository.ts +32 -32
  665. package/src/module/mapper/service/field-mapper.service.ts +268 -269
  666. package/src/module/mapper/service/mapper.service.ts +80 -80
  667. package/src/module/master/controller/master.controller.ts +71 -74
  668. package/src/module/master/service/master.service.ts +460 -484
  669. package/src/module/meta/controller/attribute-master.controller.ts +82 -96
  670. package/src/module/meta/controller/entity-dynamic.controller.ts +123 -125
  671. package/src/module/meta/controller/entity-master.controller.ts +41 -41
  672. package/src/module/meta/controller/entity-relation.controller.ts +36 -36
  673. package/src/module/meta/controller/entity.controller.ts +301 -308
  674. package/src/module/meta/controller/entity.public.controller.ts +76 -75
  675. package/src/module/meta/controller/media.controller.ts +135 -167
  676. package/src/module/meta/controller/meta.controller.ts +80 -101
  677. package/src/module/meta/controller/view-master.controller.ts +79 -79
  678. package/src/module/meta/dto/entity-list-data.dto.ts +6 -6
  679. package/src/module/meta/dto/entity-tab.dto.ts +4 -4
  680. package/src/module/meta/dto/entity-table.dto.ts +12 -12
  681. package/src/module/meta/entity/attribute-master.entity.ts +62 -92
  682. package/src/module/meta/entity/base-entity.entity.ts +52 -75
  683. package/src/module/meta/entity/dynamic.entity.ts +6 -0
  684. package/src/module/meta/entity/entity-master.entity.ts +53 -91
  685. package/src/module/meta/entity/entity-relation-data.entity.ts +24 -29
  686. package/src/module/meta/entity/entity-relation.entity.ts +18 -23
  687. package/src/module/meta/entity/entity-table-column.entity.ts +56 -61
  688. package/src/module/meta/entity/entity-table.entity.ts +45 -50
  689. package/src/module/meta/entity/media-data.entity.ts +32 -38
  690. package/src/module/meta/entity/preference.entity.ts +57 -62
  691. package/src/module/meta/entity/view-master.entity.ts +36 -41
  692. package/src/module/meta/entity.module.ts +148 -165
  693. package/src/module/meta/repository/attribute-master.repository.ts +206 -164
  694. package/src/module/meta/repository/entity-attribute-update.repository.ts +48 -48
  695. package/src/module/meta/repository/entity-master.repository.ts +120 -120
  696. package/src/module/meta/repository/entity-relation.repository.ts +36 -22
  697. package/src/module/meta/repository/entity-table-column.repository.ts +39 -39
  698. package/src/module/meta/repository/entity-table.repository.ts +53 -53
  699. package/src/module/meta/repository/media-data.repository.ts +50 -50
  700. package/src/module/meta/repository/preference.repository.ts +20 -20
  701. package/src/module/meta/repository/user-app-mapping.repository.ts +28 -28
  702. package/src/module/meta/repository/view-master.repository.ts +42 -42
  703. package/src/module/meta/service/attribute-master.service.ts +254 -160
  704. package/src/module/meta/service/common.service.ts +9 -9
  705. package/src/module/meta/service/entity-attribute-update.service.ts +26 -26
  706. package/src/module/meta/service/entity-dynamic.service.ts +993 -835
  707. package/src/module/meta/service/entity-master.service.ts +288 -172
  708. package/src/module/meta/service/entity-realation-data.service.ts +9 -9
  709. package/src/module/meta/service/entity-relation.service.ts +85 -78
  710. package/src/module/meta/service/entity-service-impl.service.ts +394 -389
  711. package/src/module/meta/service/entity-table-column.service.ts +26 -26
  712. package/src/module/meta/service/entity-table.service.ts +157 -171
  713. package/src/module/meta/service/entity-validation.service.ts +187 -188
  714. package/src/module/meta/service/entity.service.ts +48 -48
  715. package/src/module/meta/service/field-group.service.ts +103 -103
  716. package/src/module/meta/service/media-data.service.ts +385 -610
  717. package/src/module/meta/service/preference.service.ts +16 -16
  718. package/src/module/meta/service/resolver.service.ts +260 -347
  719. package/src/module/meta/service/section-master.service.ts +104 -104
  720. package/src/module/meta/service/update-form-json.service.ts +22 -22
  721. package/src/module/meta/service/user-app-mapping.service.ts +17 -17
  722. package/src/module/meta/service/view-master.service.ts +127 -127
  723. package/src/module/microservice-client/microservice-clients.module.ts +13 -13
  724. package/src/module/microservice-client/service/microservice-client-factory.ts +37 -37
  725. package/src/module/microservice-client/service/microservice-clients.ts +4 -4
  726. package/src/module/module/module.module.ts +0 -42
  727. package/src/module/notification/controller/notification.controller.ts +58 -58
  728. package/src/module/notification/entity/notification.entity.ts +76 -26
  729. package/src/module/notification/entity/otp.entity.ts +28 -28
  730. package/src/module/notification/firebase-admin.config.ts +22 -22
  731. package/src/module/notification/notification.module.ts +63 -71
  732. package/src/module/notification/repository/otp.repository.ts +27 -27
  733. package/src/module/notification/service/email.service.ts +142 -127
  734. package/src/module/notification/service/notification.service.ts +163 -146
  735. package/src/module/preference_master/entity/preference.entity.ts +25 -0
  736. package/src/module/preference_master/preference.service.ts +27 -0
  737. package/src/module/preference_master/repo/preference.repository.ts +36 -0
  738. package/src/module/third-party-module/entity/third-party-api-registry.entity.ts +52 -52
  739. package/src/module/third-party-module/repository/third-party-api-registry.repository.ts +20 -20
  740. package/src/module/third-party-module/service/api-registry.service.ts +13 -13
  741. package/src/module/third-party-module/third-party.module.ts +12 -12
  742. package/src/module/user/entity/user-role-mapping.entity.ts +0 -38
  743. package/src/module/workflow/controller/action-category.controller.ts +54 -54
  744. package/src/module/workflow/controller/action-resource-mapping.controller.ts +23 -23
  745. package/src/module/workflow/controller/action-template-mapping.controller.ts +35 -35
  746. package/src/module/workflow/controller/action.controller.ts +111 -111
  747. package/src/module/workflow/controller/activity-log.controller.ts +55 -55
  748. package/src/module/workflow/controller/comm-template.controller.ts +43 -43
  749. package/src/module/workflow/controller/entity-modification.controller.ts +35 -35
  750. package/src/module/workflow/controller/form-master.controller.ts +43 -43
  751. package/src/module/workflow/controller/stage-group.controller.ts +49 -49
  752. package/src/module/workflow/controller/stage.controller.ts +51 -51
  753. package/src/module/workflow/controller/task.controller.ts +77 -77
  754. package/src/module/workflow/controller/workflow-list-master.controller.ts +44 -44
  755. package/src/module/workflow/controller/workflow-meta.controller.ts +80 -80
  756. package/src/module/workflow/controller/workflow.controller.ts +67 -67
  757. package/src/module/workflow/entity/action-category.entity.ts +33 -38
  758. package/src/module/workflow/entity/action-data.entity.ts +51 -55
  759. package/src/module/workflow/entity/action-resources-mapping.entity.ts +21 -29
  760. package/src/module/workflow/entity/action-template-mapping.entity.ts +12 -17
  761. package/src/module/workflow/entity/action.entity.ts +48 -53
  762. package/src/module/workflow/entity/activity-log.entity.ts +39 -43
  763. package/src/module/workflow/entity/comm-template.entity.ts +38 -43
  764. package/src/module/workflow/entity/entity-modification.entity.ts +33 -38
  765. package/src/module/workflow/entity/form.entity.ts +21 -25
  766. package/src/module/workflow/entity/stage-action-mapping.entity.ts +12 -17
  767. package/src/module/workflow/entity/stage-group.entity.ts +18 -23
  768. package/src/module/workflow/entity/stage-movement-data.entity.ts +33 -38
  769. package/src/module/workflow/entity/stage.entity.ts +15 -20
  770. package/src/module/workflow/entity/task-data.entity.ts +84 -88
  771. package/src/module/workflow/entity/template-attach-mapper.entity.ts +30 -30
  772. package/src/module/workflow/entity/workflow-data.entity.ts +6 -11
  773. package/src/module/workflow/entity/workflow-level-mapping.entity.ts +18 -18
  774. package/src/module/workflow/entity/workflow.entity.ts +15 -20
  775. package/src/module/workflow/repository/action-category.repository.ts +78 -79
  776. package/src/module/workflow/repository/action-data.repository.ts +345 -354
  777. package/src/module/workflow/repository/action.repository.ts +339 -339
  778. package/src/module/workflow/repository/activity-log.repository.ts +148 -148
  779. package/src/module/workflow/repository/comm-template.repository.ts +157 -157
  780. package/src/module/workflow/repository/form-master.repository.ts +50 -50
  781. package/src/module/workflow/repository/stage-group.repository.ts +186 -186
  782. package/src/module/workflow/repository/stage-movement.repository.ts +217 -217
  783. package/src/module/workflow/repository/stage.repository.ts +160 -160
  784. package/src/module/workflow/repository/task.repository.ts +154 -156
  785. package/src/module/workflow/repository/workflow.repository.ts +42 -42
  786. package/src/module/workflow/service/action-category.service.ts +32 -33
  787. package/src/module/workflow/service/action-data.service.ts +62 -62
  788. package/src/module/workflow/service/action-resources-mapping.service.ts +10 -10
  789. package/src/module/workflow/service/action-template-mapping.service.ts +137 -137
  790. package/src/module/workflow/service/action.service.ts +300 -302
  791. package/src/module/workflow/service/activity-log.service.ts +106 -107
  792. package/src/module/workflow/service/comm-template.service.ts +179 -181
  793. package/src/module/workflow/service/entity-modification.service.ts +55 -61
  794. package/src/module/workflow/service/form-master.service.ts +35 -35
  795. package/src/module/workflow/service/populate-workflow.service.ts +313 -325
  796. package/src/module/workflow/service/stage-action-mapping.service.ts +5 -5
  797. package/src/module/workflow/service/stage-group.service.ts +325 -325
  798. package/src/module/workflow/service/stage.service.ts +196 -197
  799. package/src/module/workflow/service/task.service.ts +547 -551
  800. package/src/module/workflow/service/workflow-list-master.service.ts +68 -68
  801. package/src/module/workflow/service/workflow-meta.service.ts +635 -640
  802. package/src/module/workflow/service/workflow.service.ts +212 -213
  803. package/src/module/workflow/workflow.module.ts +180 -180
  804. package/src/module/workflow-automation/SCHEDULING_GUIDE.md +145 -145
  805. package/src/module/workflow-automation/controller/workflow-automation.controller.ts +43 -43
  806. package/src/module/workflow-automation/entity/workflow-automation-action.entity.ts +26 -26
  807. package/src/module/workflow-automation/entity/workflow-automation.entity.ts +35 -40
  808. package/src/module/workflow-automation/interface/action.decorator.ts +7 -7
  809. package/src/module/workflow-automation/interface/action.interface.ts +5 -5
  810. package/src/module/workflow-automation/service/action-registery.service.ts +35 -35
  811. package/src/module/workflow-automation/service/schedule-handler.service.ts +167 -168
  812. package/src/module/workflow-automation/service/workflow-automation-engine.service.ts +219 -219
  813. package/src/module/workflow-automation/service/workflow-automation.service.ts +486 -474
  814. package/src/module/workflow-automation/workflow-automation.module.ts +55 -54
  815. package/src/module/workflow-schedule/INSTALLATION.md +244 -244
  816. package/src/module/workflow-schedule/MULTI_PROJECT_GUIDE.md +196 -196
  817. package/src/module/workflow-schedule/README.md +422 -422
  818. package/src/module/workflow-schedule/constants/schedule.constants.ts +48 -48
  819. package/src/module/workflow-schedule/controller/workflow-schedule.controller.ts +253 -253
  820. package/src/module/workflow-schedule/docs/CLAUDE_CODE_GUIDE.md +510 -510
  821. package/src/module/workflow-schedule/docs/CLAUDE_CODE_PROMPT.md +362 -362
  822. package/src/module/workflow-schedule/docs/RUN_CLAUDE_CODE.sh +68 -68
  823. package/src/module/workflow-schedule/dto/create-schedule.dto.ts +147 -147
  824. package/src/module/workflow-schedule/dto/get-execution-logs.dto.ts +119 -119
  825. package/src/module/workflow-schedule/dto/update-schedule.dto.ts +96 -96
  826. package/src/module/workflow-schedule/entities/scheduled-workflow.entity.ts +148 -148
  827. package/src/module/workflow-schedule/entities/workflow-execution-log.entity.ts +154 -154
  828. package/src/module/workflow-schedule/interfaces/schedule-job-data.interface.ts +51 -53
  829. package/src/module/workflow-schedule/interfaces/workflow-schedule-options.interface.ts +12 -12
  830. package/src/module/workflow-schedule/processors/schedule.processor.ts +616 -620
  831. package/src/module/workflow-schedule/service/workflow-schedule.service.ts +588 -597
  832. package/src/module/workflow-schedule/workflow-schedule.module.ts +67 -67
  833. package/src/resources/dev.properties.yaml +34 -31
  834. package/src/resources/local.properties.yaml +27 -27
  835. package/src/resources/properties.module.ts +12 -12
  836. package/src/resources/properties.yaml.ts +11 -11
  837. package/src/resources/uat.properties.yaml +31 -31
  838. package/src/table.config.ts +123 -135
  839. package/src/utils/dto/excel-data.dto.ts +14 -14
  840. package/src/utils/dto/excelsheet-data.dto.ts +5 -5
  841. package/src/utils/service/base64util.service.ts +18 -18
  842. package/src/utils/service/clockIDGenUtil.service.ts +21 -21
  843. package/src/utils/service/codeGenerator.service.ts +22 -22
  844. package/src/utils/service/dateUtil.service.ts +17 -17
  845. package/src/utils/service/encryptUtil.service.ts +97 -97
  846. package/src/utils/service/excel-helper.service.ts +72 -72
  847. package/src/utils/service/excelUtil.service.ts +15 -15
  848. package/src/utils/service/file-util.service.ts +11 -11
  849. package/src/utils/service/json-util.service.ts +23 -23
  850. package/src/utils/service/loggingUtil.service.ts +88 -88
  851. package/src/utils/service/reflection-helper.service.ts +62 -62
  852. package/src/utils/service/wbsCodeGen.service.ts +8 -8
  853. package/src/utils/utils.module.ts +27 -27
  854. package/tsconfig.build.json +4 -4
  855. package/tsconfig.json +24 -24
  856. package/dist/migrations/1732612800000-AddEntityJsonGinIndex.d.ts +0 -6
  857. package/dist/migrations/1732612800000-AddEntityJsonGinIndex.js +0 -32
  858. package/dist/migrations/1732612800000-AddEntityJsonGinIndex.js.map +0 -1
  859. package/dist/module/auth/guards/role.guard.d.ts +0 -9
  860. package/dist/module/auth/guards/role.guard.js +0 -59
  861. package/dist/module/auth/guards/role.guard.js.map +0 -1
  862. package/dist/module/enterprise/controller/organization.controller.d.ts +0 -14
  863. package/dist/module/enterprise/controller/organization.controller.js +0 -59
  864. package/dist/module/enterprise/controller/organization.controller.js.map +0 -1
  865. package/dist/module/enterprise/enterprise.module.d.ts +0 -2
  866. package/dist/module/enterprise/enterprise.module.js +0 -57
  867. package/dist/module/enterprise/enterprise.module.js.map +0 -1
  868. package/dist/module/enterprise/entity/enterprise.entity.d.ts +0 -13
  869. package/dist/module/enterprise/entity/enterprise.entity.js +0 -64
  870. package/dist/module/enterprise/entity/enterprise.entity.js.map +0 -1
  871. package/dist/module/enterprise/entity/organization-app-mapping.entity.d.ts +0 -5
  872. package/dist/module/enterprise/entity/organization-app-mapping.entity.js +0 -32
  873. package/dist/module/enterprise/entity/organization-app-mapping.entity.js.map +0 -1
  874. package/dist/module/enterprise/entity/organization.entity.d.ts +0 -30
  875. package/dist/module/enterprise/entity/organization.entity.js +0 -136
  876. package/dist/module/enterprise/entity/organization.entity.js.map +0 -1
  877. package/dist/module/enterprise/repository/enterprise.repository.d.ts +0 -8
  878. package/dist/module/enterprise/repository/enterprise.repository.js +0 -48
  879. package/dist/module/enterprise/repository/enterprise.repository.js.map +0 -1
  880. package/dist/module/enterprise/repository/organization.repository.d.ts +0 -8
  881. package/dist/module/enterprise/repository/organization.repository.js +0 -41
  882. package/dist/module/enterprise/repository/organization.repository.js.map +0 -1
  883. package/dist/module/enterprise/repository/school.repository.d.ts +0 -8
  884. package/dist/module/enterprise/repository/school.repository.js +0 -226
  885. package/dist/module/enterprise/repository/school.repository.js.map +0 -1
  886. package/dist/module/enterprise/service/brand.service.d.ts +0 -3
  887. package/dist/module/enterprise/service/brand.service.js.map +0 -1
  888. package/dist/module/enterprise/service/enterprise.service.d.ts +0 -8
  889. package/dist/module/enterprise/service/enterprise.service.js.map +0 -1
  890. package/dist/module/enterprise/service/organization-app-mapping.service.d.ts +0 -2
  891. package/dist/module/enterprise/service/organization-app-mapping.service.js +0 -17
  892. package/dist/module/enterprise/service/organization-app-mapping.service.js.map +0 -1
  893. package/dist/module/enterprise/service/organization.service.d.ts +0 -19
  894. package/dist/module/enterprise/service/organization.service.js +0 -120
  895. package/dist/module/enterprise/service/organization.service.js.map +0 -1
  896. package/dist/module/filter/service/flatjson-filter.service.d.ts +0 -32
  897. package/dist/module/filter/service/flatjson-filter.service.js +0 -632
  898. package/dist/module/filter/service/flatjson-filter.service.js.map +0 -1
  899. package/dist/module/lead/controller/lead.controller.d.ts +0 -20
  900. package/dist/module/lead/controller/lead.controller.js +0 -58
  901. package/dist/module/lead/controller/lead.controller.js.map +0 -1
  902. package/dist/module/lead/lead.module.d.ts +0 -2
  903. package/dist/module/lead/lead.module.js +0 -26
  904. package/dist/module/lead/lead.module.js.map +0 -1
  905. package/dist/module/lead/repository/lead.repository.d.ts +0 -10
  906. package/dist/module/lead/repository/lead.repository.js +0 -53
  907. package/dist/module/lead/repository/lead.repository.js.map +0 -1
  908. package/dist/module/lead/service/lead.service.d.ts +0 -20
  909. package/dist/module/lead/service/lead.service.js +0 -55
  910. package/dist/module/lead/service/lead.service.js.map +0 -1
  911. package/dist/module/meta/controller/app-master.controller.d.ts +0 -9
  912. package/dist/module/meta/controller/app-master.controller.js +0 -51
  913. package/dist/module/meta/controller/app-master.controller.js.map +0 -1
  914. package/dist/module/meta/entity/app-master.entity.d.ts +0 -13
  915. package/dist/module/meta/entity/app-master.entity.js +0 -62
  916. package/dist/module/meta/entity/app-master.entity.js.map +0 -1
  917. package/dist/module/meta/repository/app-master.repository.d.ts +0 -7
  918. package/dist/module/meta/repository/app-master.repository.js +0 -36
  919. package/dist/module/meta/repository/app-master.repository.js.map +0 -1
  920. package/dist/module/meta/service/app-master.service.d.ts +0 -8
  921. package/dist/module/meta/service/app-master.service.js +0 -45
  922. package/dist/module/meta/service/app-master.service.js.map +0 -1
  923. package/dist/module/meta/service/populate-meta.service.d.ts +0 -13
  924. package/dist/module/meta/service/populate-meta.service.js +0 -206
  925. package/dist/module/meta/service/populate-meta.service.js.map +0 -1
  926. package/dist/module/module/controller/menu.controller.d.ts +0 -8
  927. package/dist/module/module/controller/menu.controller.js +0 -41
  928. package/dist/module/module/controller/menu.controller.js.map +0 -1
  929. package/dist/module/module/controller/module-access.controller.d.ts +0 -35
  930. package/dist/module/module/controller/module-access.controller.js +0 -148
  931. package/dist/module/module/controller/module-access.controller.js.map +0 -1
  932. package/dist/module/module/entity/menu.entity.d.ts +0 -15
  933. package/dist/module/module/entity/menu.entity.js +0 -72
  934. package/dist/module/module/entity/menu.entity.js.map +0 -1
  935. package/dist/module/module/entity/module-access.entity.d.ts +0 -9
  936. package/dist/module/module/entity/module-access.entity.js.map +0 -1
  937. package/dist/module/module/entity/module-action.entity.d.ts +0 -6
  938. package/dist/module/module/entity/module-action.entity.js +0 -37
  939. package/dist/module/module/entity/module-action.entity.js.map +0 -1
  940. package/dist/module/module/entity/module.entity.d.ts +0 -18
  941. package/dist/module/module/entity/module.entity.js +0 -84
  942. package/dist/module/module/entity/module.entity.js.map +0 -1
  943. package/dist/module/module/repository/menu.repository.d.ts +0 -15
  944. package/dist/module/module/repository/menu.repository.js +0 -163
  945. package/dist/module/module/repository/menu.repository.js.map +0 -1
  946. package/dist/module/module/repository/module-access.repository.d.ts +0 -52
  947. package/dist/module/module/repository/module-access.repository.js +0 -283
  948. package/dist/module/module/repository/module-access.repository.js.map +0 -1
  949. package/dist/module/module/service/menu.service.d.ts +0 -12
  950. package/dist/module/module/service/menu.service.js +0 -59
  951. package/dist/module/module/service/menu.service.js.map +0 -1
  952. package/dist/module/module/service/module-access.service.d.ts +0 -63
  953. package/dist/module/module/service/module-access.service.js +0 -113
  954. package/dist/module/module/service/module-access.service.js.map +0 -1
  955. package/dist/module/notification/controller/otp.controller.d.ts +0 -35
  956. package/dist/module/notification/controller/otp.controller.js +0 -103
  957. package/dist/module/notification/controller/otp.controller.js.map +0 -1
  958. package/dist/module/notification/repository/notification.repository.d.ts +0 -7
  959. package/dist/module/notification/repository/notification.repository.js +0 -43
  960. package/dist/module/notification/repository/notification.repository.js.map +0 -1
  961. package/dist/module/notification/service/otp.service.d.ts +0 -31
  962. package/dist/module/notification/service/otp.service.js +0 -112
  963. package/dist/module/notification/service/otp.service.js.map +0 -1
  964. package/dist/module/user/controller/login.controller.d.ts +0 -26
  965. package/dist/module/user/controller/login.controller.js +0 -177
  966. package/dist/module/user/controller/login.controller.js.map +0 -1
  967. package/dist/module/user/controller/user.controller.d.ts +0 -9
  968. package/dist/module/user/controller/user.controller.js +0 -59
  969. package/dist/module/user/controller/user.controller.js.map +0 -1
  970. package/dist/module/user/dto/create-user.dto.d.ts +0 -17
  971. package/dist/module/user/dto/create-user.dto.js +0 -64
  972. package/dist/module/user/dto/create-user.dto.js.map +0 -1
  973. package/dist/module/user/dto/update-user.dto.d.ts +0 -5
  974. package/dist/module/user/dto/update-user.dto.js +0 -9
  975. package/dist/module/user/dto/update-user.dto.js.map +0 -1
  976. package/dist/module/user/entity/role.entity.d.ts +0 -11
  977. package/dist/module/user/entity/role.entity.js +0 -56
  978. package/dist/module/user/entity/role.entity.js.map +0 -1
  979. package/dist/module/user/entity/user-session.entity.d.ts +0 -15
  980. package/dist/module/user/entity/user-session.entity.js +0 -102
  981. package/dist/module/user/entity/user-session.entity.js.map +0 -1
  982. package/dist/module/user/entity/user.entity.js +0 -95
  983. package/dist/module/user/entity/user.entity.js.map +0 -1
  984. package/dist/module/user/repository/role.repository.d.ts +0 -18
  985. package/dist/module/user/repository/role.repository.js +0 -87
  986. package/dist/module/user/repository/role.repository.js.map +0 -1
  987. package/dist/module/user/repository/user-role-mapping.repository.d.ts +0 -19
  988. package/dist/module/user/repository/user-role-mapping.repository.js +0 -110
  989. package/dist/module/user/repository/user-role-mapping.repository.js.map +0 -1
  990. package/dist/module/user/repository/user.repository.d.ts +0 -10
  991. package/dist/module/user/repository/user.repository.js +0 -58
  992. package/dist/module/user/repository/user.repository.js.map +0 -1
  993. package/dist/module/user/repository/userSession.repository.d.ts +0 -10
  994. package/dist/module/user/repository/userSession.repository.js.map +0 -1
  995. package/dist/module/user/service/login.service.d.ts +0 -41
  996. package/dist/module/user/service/login.service.js +0 -242
  997. package/dist/module/user/service/login.service.js.map +0 -1
  998. package/dist/module/user/service/role.service.d.ts +0 -25
  999. package/dist/module/user/service/role.service.js +0 -154
  1000. package/dist/module/user/service/role.service.js.map +0 -1
  1001. package/dist/module/user/service/user-role-mapping.service.d.ts +0 -12
  1002. package/dist/module/user/service/user-role-mapping.service.js +0 -60
  1003. package/dist/module/user/service/user-role-mapping.service.js.map +0 -1
  1004. package/dist/module/user/service/user-session.service.d.ts +0 -31
  1005. package/dist/module/user/service/user-session.service.js +0 -161
  1006. package/dist/module/user/service/user-session.service.js.map +0 -1
  1007. package/dist/module/user/service/user.service.d.ts +0 -38
  1008. package/dist/module/user/service/user.service.js +0 -243
  1009. package/dist/module/user/service/user.service.js.map +0 -1
  1010. package/dist/module/user/user.module.d.ts +0 -2
  1011. package/dist/module/user/user.module.js +0 -78
  1012. package/dist/module/user/user.module.js.map +0 -1
  1013. package/src/migrations/1732612800000-AddEntityJsonGinIndex.ts +0 -41
  1014. package/src/module/auth/guards/role.guard.ts +0 -68
  1015. package/src/module/enterprise/controller/organization.controller.ts +0 -36
  1016. package/src/module/enterprise/enterprise.module.ts +0 -45
  1017. package/src/module/enterprise/entity/enterprise.entity.ts +0 -37
  1018. package/src/module/enterprise/entity/organization-app-mapping.entity.ts +0 -13
  1019. package/src/module/enterprise/entity/organization.entity.ts +0 -92
  1020. package/src/module/enterprise/repository/enterprise.repository.ts +0 -31
  1021. package/src/module/enterprise/repository/organization.repository.ts +0 -26
  1022. package/src/module/enterprise/repository/school.repository.ts +0 -289
  1023. package/src/module/enterprise/service/brand.service.ts +0 -5
  1024. package/src/module/enterprise/service/enterprise.service.ts +0 -16
  1025. package/src/module/enterprise/service/organization-app-mapping.service.ts +0 -4
  1026. package/src/module/enterprise/service/organization.service.ts +0 -146
  1027. package/src/module/filter/service/flatjson-filter.service.ts +0 -903
  1028. package/src/module/filter/test/flatjson-filter.service.spec.ts +0 -415
  1029. package/src/module/lead/controller/lead.controller.ts +0 -30
  1030. package/src/module/lead/lead.module.ts +0 -14
  1031. package/src/module/lead/repository/lead.repository.ts +0 -41
  1032. package/src/module/lead/service/lead.service.ts +0 -54
  1033. package/src/module/meta/controller/app-master.controller.ts +0 -38
  1034. package/src/module/meta/entity/app-master.entity.ts +0 -37
  1035. package/src/module/meta/repository/app-master.repository.ts +0 -20
  1036. package/src/module/meta/service/app-master.service.ts +0 -37
  1037. package/src/module/meta/service/populate-meta.service.ts +0 -228
  1038. package/src/module/module/controller/menu.controller.ts +0 -15
  1039. package/src/module/module/controller/module-access.controller.ts +0 -133
  1040. package/src/module/module/entity/menu.entity.ts +0 -43
  1041. package/src/module/module/entity/module-access.entity.ts +0 -25
  1042. package/src/module/module/entity/module-action.entity.ts +0 -17
  1043. package/src/module/module/entity/module.entity.ts +0 -52
  1044. package/src/module/module/repository/menu.repository.ts +0 -186
  1045. package/src/module/module/repository/module-access.repository.ts +0 -344
  1046. package/src/module/module/service/menu.service.ts +0 -82
  1047. package/src/module/module/service/module-access.service.ts +0 -189
  1048. package/src/module/notification/controller/otp.controller.ts +0 -117
  1049. package/src/module/notification/repository/notification.repository.ts +0 -33
  1050. package/src/module/notification/service/otp.service.ts +0 -133
  1051. package/src/module/user/controller/login.controller.ts +0 -199
  1052. package/src/module/user/controller/user.controller.ts +0 -40
  1053. package/src/module/user/dto/create-user.dto.ts +0 -62
  1054. package/src/module/user/dto/update-user.dto.ts +0 -4
  1055. package/src/module/user/entity/role.entity.ts +0 -33
  1056. package/src/module/user/entity/user-session.entity.ts +0 -73
  1057. package/src/module/user/entity/user.entity.ts +0 -62
  1058. package/src/module/user/repository/role.repository.ts +0 -96
  1059. package/src/module/user/repository/user-role-mapping.repository.ts +0 -126
  1060. package/src/module/user/repository/user.repository.ts +0 -50
  1061. package/src/module/user/repository/userSession.repository.ts +0 -33
  1062. package/src/module/user/service/login.service.ts +0 -326
  1063. package/src/module/user/service/role.service.ts +0 -197
  1064. package/src/module/user/service/user-role-mapping.service.ts +0 -98
  1065. package/src/module/user/service/user-session.service.ts +0 -201
  1066. package/src/module/user/service/user.service.ts +0 -368
  1067. package/src/module/user/user.module.ts +0 -65
@@ -1,597 +1,588 @@
1
- import { BadRequestException, Injectable, Logger, NotFoundException } from '@nestjs/common';
2
- import { InjectRepository } from '@nestjs/typeorm';
3
- import { Between, In, Repository } from 'typeorm';
4
- import { InjectQueue } from '@nestjs/bull';
5
- import { Queue } from 'bull';
6
- import * as cronParser from 'cron-parser';
7
-
8
- import { ScheduledWorkflow } from '../entities/scheduled-workflow.entity';
9
- import { WorkflowExecutionLog } from '../entities/workflow-execution-log.entity';
10
- import { CreateScheduleDto } from '../dto/create-schedule.dto';
11
- import { UpdateScheduleDto } from '../dto/update-schedule.dto';
12
- import { GetExecutionLogsDto } from '../dto/get-execution-logs.dto';
13
- import { UserData } from '../../user/entity/user.entity';
14
- import {
15
- DEFAULT_BACKOFF_MULTIPLIER,
16
- DEFAULT_MAX_RETRIES,
17
- DEFAULT_RETRY_DELAY,
18
- DEFAULT_TIMEZONE,
19
- EXECUTE_SCHEDULED_WORKFLOW_JOB,
20
- SCHEDULE_STATUS_ACTIVE,
21
- SCHEDULE_STATUS_INACTIVE,
22
- SCHEDULE_STATUS_PAUSED,
23
- WORKFLOW_SCHEDULE_QUEUE,
24
- } from '../constants/schedule.constants';
25
- import { ScheduleJobData } from '../interfaces/schedule-job-data.interface';
26
-
27
- /**
28
- * Workflow Schedule Service
29
- * Manages scheduled workflows and their execution
30
- */
31
- @Injectable()
32
- export class WorkflowScheduleService {
33
- private readonly logger = new Logger(WorkflowScheduleService.name);
34
-
35
- constructor(
36
- @InjectRepository(ScheduledWorkflow)
37
- private readonly scheduledWorkflowRepository: Repository<ScheduledWorkflow>,
38
- @InjectRepository(WorkflowExecutionLog)
39
- private readonly executionLogRepository: Repository<WorkflowExecutionLog>,
40
- @InjectQueue(WORKFLOW_SCHEDULE_QUEUE)
41
- private readonly scheduleQueue: Queue<ScheduleJobData>,
42
- ) {
43
- }
44
-
45
- /**
46
- * 1. Create a new scheduled workflow
47
- */
48
- async createSchedule(
49
- createScheduleDto: CreateScheduleDto,
50
- loggedInUser: UserData,
51
- ): Promise<ScheduledWorkflow> {
52
- this.logger.log(
53
- `Creating schedule for workflow ${createScheduleDto.workflow_id} by user ${loggedInUser.id}`,
54
- );
55
-
56
- try {
57
- // Validate cron expression
58
- this.validateCronExpression(createScheduleDto.cron_expression, createScheduleDto.timezone);
59
-
60
- // Calculate next execution time
61
- const nextExecutionAt = this.calculateNextExecution(
62
- createScheduleDto.cron_expression,
63
- createScheduleDto.timezone || DEFAULT_TIMEZONE,
64
- );
65
-
66
- // Create scheduled workflow entity
67
- const schedule = this.scheduledWorkflowRepository.create({
68
- workflow_id: createScheduleDto.workflow_id,
69
- workflow_name: createScheduleDto.workflow_name,
70
- name: createScheduleDto.name,
71
- description: createScheduleDto.description,
72
- cron_expression: createScheduleDto.cron_expression,
73
- timezone: createScheduleDto.timezone || DEFAULT_TIMEZONE,
74
- start_date: createScheduleDto.start_date ? new Date(createScheduleDto.start_date) : null,
75
- end_date: createScheduleDto.end_date ? new Date(createScheduleDto.end_date) : null,
76
- max_executions: createScheduleDto.max_executions,
77
- execution_count: 0,
78
- next_execution_at: nextExecutionAt,
79
- schedule_status: SCHEDULE_STATUS_ACTIVE,
80
- retry_config: createScheduleDto.retry_config || {
81
- maxRetries: DEFAULT_MAX_RETRIES,
82
- retryDelay: DEFAULT_RETRY_DELAY,
83
- backoffMultiplier: DEFAULT_BACKOFF_MULTIPLIER,
84
- },
85
- metadata: createScheduleDto.metadata || {},
86
- is_enabled: createScheduleDto.is_enabled !== false,
87
- organization_id: createScheduleDto.organization_id || loggedInUser.organization_id,
88
- enterprise_id: createScheduleDto.enterprise_id || loggedInUser.enterprise_id,
89
- level_id: createScheduleDto.level_id || loggedInUser.level_id,
90
- level_type: createScheduleDto.level_type || loggedInUser.level_type,
91
- appcode: createScheduleDto.appcode || loggedInUser.appcode,
92
- created_by: loggedInUser.id,
93
- created_date: new Date(),
94
- status: createScheduleDto.status || 'ACTIVE',
95
- entity_type: 'WFSC',
96
- });
97
-
98
- const savedSchedule = await this.scheduledWorkflowRepository.save(schedule);
99
-
100
- // Add job to Bull queue with cron schedule
101
- if (savedSchedule.is_enabled && savedSchedule.schedule_status === SCHEDULE_STATUS_ACTIVE) {
102
- await this.scheduleJob(savedSchedule, loggedInUser);
103
- }
104
-
105
- this.logger.log(`Schedule created successfully with ID: ${savedSchedule.id}`);
106
- return savedSchedule;
107
- } catch (error) {
108
- this.logger.error(`Failed to create schedule: ${error.message}`, error.stack);
109
- throw error;
110
- }
111
- }
112
-
113
- /**
114
- * 2. Update an existing scheduled workflow
115
- */
116
- async updateSchedule(
117
- updateScheduleDto: UpdateScheduleDto,
118
- loggedInUser: UserData,
119
- ): Promise<ScheduledWorkflow> {
120
- this.logger.log(`Updating schedule ${updateScheduleDto.id} by user ${loggedInUser.id}`);
121
-
122
- try {
123
- const schedule = await this.scheduledWorkflowRepository.findOne({
124
- where: { id: updateScheduleDto.id },
125
- });
126
-
127
- if (!schedule) {
128
- throw new NotFoundException(`Scheduled workflow not found with ID: ${updateScheduleDto.id}`);
129
- }
130
-
131
- // Validate cron expression if updated
132
- if (updateScheduleDto.cron_expression) {
133
- this.validateCronExpression(
134
- updateScheduleDto.cron_expression,
135
- updateScheduleDto.timezone || schedule.timezone,
136
- );
137
- }
138
-
139
- // Update fields
140
- if (updateScheduleDto.workflow_id !== undefined) {
141
- schedule.workflow_id = updateScheduleDto.workflow_id;
142
- }
143
- if (updateScheduleDto.workflow_name !== undefined) {
144
- schedule.workflow_name = updateScheduleDto.workflow_name;
145
- }
146
- if (updateScheduleDto.name !== undefined) {
147
- schedule.name = updateScheduleDto.name;
148
- }
149
- if (updateScheduleDto.description !== undefined) {
150
- schedule.description = updateScheduleDto.description;
151
- }
152
- if (updateScheduleDto.cron_expression !== undefined) {
153
- schedule.cron_expression = updateScheduleDto.cron_expression;
154
- schedule.next_execution_at = this.calculateNextExecution(
155
- updateScheduleDto.cron_expression,
156
- updateScheduleDto.timezone || schedule.timezone,
157
- );
158
- }
159
- if (updateScheduleDto.timezone !== undefined) {
160
- schedule.timezone = updateScheduleDto.timezone;
161
- }
162
- if (updateScheduleDto.start_date !== undefined) {
163
- schedule.start_date = updateScheduleDto.start_date
164
- ? new Date(updateScheduleDto.start_date)
165
- : null;
166
- }
167
- if (updateScheduleDto.end_date !== undefined) {
168
- schedule.end_date = updateScheduleDto.end_date ? new Date(updateScheduleDto.end_date) : null;
169
- }
170
- if (updateScheduleDto.max_executions !== undefined) {
171
- schedule.max_executions = updateScheduleDto.max_executions;
172
- }
173
- if (updateScheduleDto.schedule_status !== undefined) {
174
- schedule.schedule_status = updateScheduleDto.schedule_status;
175
- }
176
- if (updateScheduleDto.retry_config !== undefined) {
177
- schedule.retry_config = updateScheduleDto.retry_config;
178
- }
179
- if (updateScheduleDto.actions !== undefined) {
180
- schedule.actions = updateScheduleDto.actions;
181
- }
182
- if (updateScheduleDto.metadata !== undefined) {
183
- schedule.metadata = updateScheduleDto.metadata;
184
- }
185
- if (updateScheduleDto.is_enabled !== undefined) {
186
- schedule.is_enabled = updateScheduleDto.is_enabled;
187
- }
188
- if (updateScheduleDto.status !== undefined) {
189
- schedule.status = updateScheduleDto.status;
190
- }
191
-
192
- schedule.modified_by = loggedInUser.id;
193
- schedule.modified_date = new Date();
194
-
195
- const updatedSchedule = await this.scheduledWorkflowRepository.save(schedule);
196
-
197
- // Remove old job and create new one if schedule changed
198
- if (schedule.job_id) {
199
- await this.removeJob(schedule.job_id);
200
- }
201
-
202
- if (updatedSchedule.is_enabled && updatedSchedule.schedule_status === SCHEDULE_STATUS_ACTIVE) {
203
- await this.scheduleJob(updatedSchedule, loggedInUser);
204
- }
205
-
206
- this.logger.log(`Schedule updated successfully: ${updatedSchedule.id}`);
207
- return updatedSchedule;
208
- } catch (error) {
209
- this.logger.error(`Failed to update schedule: ${error.message}`, error.stack);
210
- throw error;
211
- }
212
- }
213
-
214
- /**
215
- * 3. Get a scheduled workflow by ID
216
- */
217
- async getScheduleById(scheduleId: number): Promise<ScheduledWorkflow> {
218
- const schedule = await this.scheduledWorkflowRepository.findOne({
219
- where: {
220
- id: scheduleId,
221
- },
222
- });
223
-
224
- if (!schedule) {
225
- throw new NotFoundException(`Scheduled workflow not found with ID: ${scheduleId}`);
226
- }
227
-
228
- return schedule;
229
- }
230
-
231
- /**
232
- * 4. Get all scheduled workflows with pagination and filters
233
- */
234
- async getAllSchedules(
235
- page: number = 1,
236
- size: number = 10,
237
- filters: any = {},
238
- loggedInUser: UserData,
239
- ): Promise<{ data: ScheduledWorkflow[]; total: number; page: number; size: number }> {
240
- const skip = (page - 1) * size;
241
-
242
- const whereConditions: any = {
243
- enterprise_id: loggedInUser.enterprise_id,
244
- };
245
-
246
- if (filters.workflow_id) {
247
- whereConditions.workflow_id = filters.workflow_id;
248
- }
249
- if (filters.schedule_status) {
250
- whereConditions.schedule_status = filters.schedule_status;
251
- }
252
- if (filters.is_enabled !== undefined) {
253
- whereConditions.is_enabled = filters.is_enabled;
254
- }
255
-
256
- const [data, total] = await this.scheduledWorkflowRepository.findAndCount({
257
- where: whereConditions,
258
- skip,
259
- take: size,
260
- order: { created_date: 'DESC' },
261
- });
262
-
263
- return {
264
- data,
265
- total,
266
- page,
267
- size,
268
- };
269
- }
270
-
271
- /**
272
- * 5. Pause a scheduled workflow
273
- */
274
- async pauseSchedule(scheduleId: number, loggedInUser: UserData): Promise<ScheduledWorkflow> {
275
- this.logger.log(`Pausing schedule ${scheduleId} by user ${loggedInUser.id}`);
276
-
277
- const schedule = await this.getScheduleById(scheduleId);
278
-
279
- if (schedule.schedule_status === SCHEDULE_STATUS_PAUSED) {
280
- throw new BadRequestException('Schedule is already paused');
281
- }
282
-
283
- schedule.schedule_status = SCHEDULE_STATUS_PAUSED;
284
- schedule.modified_by = loggedInUser.id;
285
- schedule.modified_date = new Date();
286
-
287
- const updatedSchedule = await this.scheduledWorkflowRepository.save(schedule);
288
-
289
- // Remove job from queue
290
- if (schedule.job_id) {
291
- await this.removeJob(schedule.job_id);
292
- updatedSchedule.job_id = null;
293
- await this.scheduledWorkflowRepository.save(updatedSchedule);
294
- }
295
-
296
- this.logger.log(`Schedule paused successfully: ${scheduleId}`);
297
- return updatedSchedule;
298
- }
299
-
300
- /**
301
- * 6. Resume a paused scheduled workflow
302
- */
303
- async resumeSchedule(scheduleId: number, loggedInUser: UserData): Promise<ScheduledWorkflow> {
304
- this.logger.log(`Resuming schedule ${scheduleId} by user ${loggedInUser.id}`);
305
-
306
- const schedule = await this.getScheduleById(scheduleId);
307
-
308
- if (schedule.schedule_status !== SCHEDULE_STATUS_PAUSED) {
309
- throw new BadRequestException('Schedule is not paused');
310
- }
311
-
312
- schedule.schedule_status = SCHEDULE_STATUS_ACTIVE;
313
- schedule.modified_by = loggedInUser.id;
314
- schedule.modified_date = new Date();
315
-
316
- // Recalculate next execution time
317
- schedule.next_execution_at = this.calculateNextExecution(
318
- schedule.cron_expression,
319
- schedule.timezone,
320
- );
321
-
322
- const updatedSchedule = await this.scheduledWorkflowRepository.save(schedule);
323
-
324
- // Re-add job to queue
325
- if (updatedSchedule.is_enabled) {
326
- await this.scheduleJob(updatedSchedule, loggedInUser);
327
- }
328
-
329
- this.logger.log(`Schedule resumed successfully: ${scheduleId}`);
330
- return updatedSchedule;
331
- }
332
-
333
- /**
334
- * 7. Delete a scheduled workflow
335
- */
336
- async deleteSchedule(scheduleId: number, loggedInUser: UserData): Promise<void> {
337
- this.logger.log(`Deleting schedule ${scheduleId} by user ${loggedInUser.id}`);
338
-
339
- const schedule = await this.getScheduleById(scheduleId);
340
-
341
- // Remove job from queue
342
- if (schedule.job_id) {
343
- await this.removeJob(schedule.job_id);
344
- }
345
-
346
- // Soft delete by setting status to inactive
347
- schedule.schedule_status = SCHEDULE_STATUS_INACTIVE;
348
- schedule.status = 'INACTIVE';
349
- schedule.is_enabled = false;
350
- schedule.modified_by = loggedInUser.id;
351
- schedule.modified_date = new Date();
352
-
353
- await this.scheduledWorkflowRepository.save(schedule);
354
-
355
- this.logger.log(`Schedule deleted successfully: ${scheduleId}`);
356
- }
357
-
358
- /**
359
- * 8. Manually trigger a scheduled workflow execution
360
- */
361
- async triggerManualExecution(
362
- scheduleId: number,
363
- loggedInUser: UserData,
364
- metadata?: Record<string, any>,
365
- ): Promise<{ executionLogId: number; jobId: string }> {
366
- this.logger.log(`Manual trigger for schedule ${scheduleId} by user ${loggedInUser.id}`);
367
-
368
- const schedule = await this.getScheduleById(scheduleId);
369
-
370
- const jobData: ScheduleJobData = {
371
- scheduleId: schedule.id,
372
- workflowId: schedule.workflow_id,
373
- workflowName: schedule.workflow_name,
374
- organizationId: schedule.organization_id,
375
- enterpriseId: schedule.enterprise_id,
376
- levelId: schedule.level_id,
377
- levelType: schedule.level_type,
378
- appcode: schedule.appcode,
379
- createdBy: loggedInUser.id,
380
- triggeredBy: 'MANUAL',
381
- triggeredAt: new Date(),
382
- metadata: metadata || {},
383
- };
384
-
385
- // Add job to queue immediately (not scheduled)
386
- const job = await this.scheduleQueue.add(EXECUTE_SCHEDULED_WORKFLOW_JOB, jobData, {
387
- attempts: schedule.retry_config?.maxRetries || DEFAULT_MAX_RETRIES,
388
- backoff: {
389
- type: 'exponential',
390
- delay: schedule.retry_config?.retryDelay || DEFAULT_RETRY_DELAY,
391
- },
392
- });
393
-
394
- // Create execution log entry
395
- const executionLog = this.executionLogRepository.create({
396
- schedule_id: schedule.id,
397
- workflow_id: schedule.workflow_id,
398
- job_id: job.id.toString(),
399
- execution_status: 'PENDING',
400
- triggered_by: 'MANUAL',
401
- triggered_by_user_id: loggedInUser.id,
402
- organization_id: schedule.organization_id,
403
- enterprise_id: schedule.enterprise_id,
404
- created_by: loggedInUser.id,
405
- created_date: new Date(),
406
- entity_type: 'WFEL',
407
- status: 'ACTIVE',
408
- });
409
-
410
- const savedLog = await this.executionLogRepository.save(executionLog);
411
-
412
- this.logger.log(`Manual execution triggered for schedule ${scheduleId}, job ID: ${job.id}`);
413
-
414
- return {
415
- executionLogId: savedLog.id,
416
- jobId: job.id.toString(),
417
- };
418
- }
419
-
420
- /**
421
- * 9. Get execution logs with filters and pagination
422
- */
423
- async getExecutionLogs(
424
- getExecutionLogsDto: GetExecutionLogsDto,
425
- loggedInUser: UserData,
426
- ): Promise<{ data: WorkflowExecutionLog[]; total: number; page: number; size: number }> {
427
- const page = getExecutionLogsDto.page || 1;
428
- const size = getExecutionLogsDto.size || 10;
429
- const skip = (page - 1) * size;
430
-
431
- const whereConditions: any = {
432
- enterprise_id: getExecutionLogsDto.enterprise_id || loggedInUser.enterprise_id,
433
- };
434
-
435
- if (getExecutionLogsDto.schedule_id) {
436
- whereConditions.schedule_id = getExecutionLogsDto.schedule_id;
437
- }
438
- if (getExecutionLogsDto.workflow_id) {
439
- whereConditions.workflow_id = getExecutionLogsDto.workflow_id;
440
- }
441
- if (getExecutionLogsDto.execution_status) {
442
- whereConditions.execution_status = getExecutionLogsDto.execution_status;
443
- }
444
- if (getExecutionLogsDto.execution_statuses && getExecutionLogsDto.execution_statuses.length > 0) {
445
- whereConditions.execution_status = In(getExecutionLogsDto.execution_statuses);
446
- }
447
- if (getExecutionLogsDto.triggered_by) {
448
- whereConditions.triggered_by = getExecutionLogsDto.triggered_by;
449
- }
450
- if (getExecutionLogsDto.triggered_by_user_id) {
451
- whereConditions.triggered_by_user_id = getExecutionLogsDto.triggered_by_user_id;
452
- }
453
-
454
- // Date range filter
455
- if (getExecutionLogsDto.start_date && getExecutionLogsDto.end_date) {
456
- whereConditions.created_date = Between(
457
- new Date(getExecutionLogsDto.start_date),
458
- new Date(getExecutionLogsDto.end_date),
459
- );
460
- }
461
-
462
- const [data, total] = await this.executionLogRepository.findAndCount({
463
- where: whereConditions,
464
- skip,
465
- take: size,
466
- order: {
467
- [getExecutionLogsDto.sortBy || 'created_date']:
468
- getExecutionLogsDto.sortOrder || 'DESC',
469
- },
470
- });
471
-
472
- return {
473
- data,
474
- total,
475
- page,
476
- size,
477
- };
478
- }
479
-
480
- /**
481
- * Get execution statistics for a schedule
482
- */
483
- async getExecutionStats(scheduleId: number): Promise<any> {
484
- const schedule = await this.getScheduleById(scheduleId);
485
-
486
- const result = await this.executionLogRepository
487
- .createQueryBuilder('log')
488
- .select([
489
- 'COUNT(*) AS total_executions',
490
- 'SUM(CASE WHEN log.execution_status = \'COMPLETED\' THEN 1 ELSE 0 END) AS successful_executions',
491
- 'SUM(CASE WHEN log.execution_status = \'FAILED\' THEN 1 ELSE 0 END) AS failed_executions',
492
- 'SUM(CASE WHEN log.execution_status = \'PENDING\' THEN 1 ELSE 0 END) AS pending_executions',
493
- 'SUM(CASE WHEN log.execution_status = \'RUNNING\' THEN 1 ELSE 0 END) AS running_executions',
494
- 'AVG(log.duration_ms) AS average_duration_ms',
495
- 'SUM(log.total_records) AS total_records_processed',
496
- ])
497
- .where('log.schedule_id = :scheduleId', { scheduleId })
498
- .getRawOne();
499
- const successRate =
500
- result.total_executions > 0
501
- ? (result.successful_executions / result.total_executions) * 100
502
- : 0;
503
-
504
- return {
505
- schedule_id: scheduleId,
506
- schedule_name: schedule.name,
507
- total_executions: parseInt(result.total_executions),
508
- successful_executions: parseInt(result.successful_executions),
509
- failed_executions: parseInt(result.failed_executions),
510
- pending_executions: parseInt(result.pending_executions),
511
- running_executions: parseInt(result.running_executions),
512
- average_duration_ms: parseFloat(result.average_duration_ms) || 0,
513
- total_records_processed: parseInt(result.total_records_processed) || 0,
514
- success_rate_percentage: parseFloat(successRate.toFixed(2)),
515
- };
516
- }
517
-
518
- /**
519
- * Private helper: Schedule a job in Bull queue
520
- */
521
- private async scheduleJob(schedule: ScheduledWorkflow, loggedInUser: UserData): Promise<void> {
522
- const jobData: ScheduleJobData = {
523
- scheduleId: schedule.id,
524
- workflowId: schedule.workflow_id,
525
- workflowName: schedule.workflow_name,
526
- organizationId: schedule.organization_id,
527
- enterpriseId: schedule.enterprise_id,
528
- levelId: schedule.level_id,
529
- levelType: schedule.level_type,
530
- appcode: schedule.appcode,
531
- createdBy: loggedInUser.id,
532
- triggeredBy: 'SCHEDULE',
533
- triggeredAt: new Date(),
534
- metadata: schedule.metadata || {},
535
- };
536
-
537
- const job = await this.scheduleQueue.add(EXECUTE_SCHEDULED_WORKFLOW_JOB, jobData, {
538
- repeat: {
539
- cron: schedule.cron_expression,
540
- tz: schedule.timezone,
541
- startDate: schedule.start_date || undefined,
542
- endDate: schedule.end_date || undefined,
543
- },
544
- attempts: schedule.retry_config?.maxRetries || DEFAULT_MAX_RETRIES,
545
- backoff: {
546
- type: 'exponential',
547
- delay: schedule.retry_config?.retryDelay || DEFAULT_RETRY_DELAY,
548
- },
549
- });
550
-
551
- schedule.job_id = job.id.toString();
552
- await this.scheduledWorkflowRepository.save(schedule);
553
-
554
- this.logger.log(`Job scheduled with ID: ${job.id} for schedule ${schedule.id}`);
555
- }
556
-
557
- /**
558
- * Private helper: Remove a job from Bull queue
559
- */
560
- private async removeJob(jobId: string): Promise<void> {
561
- try {
562
- const job = await this.scheduleQueue.getJob(jobId);
563
- if (job) {
564
- await job.remove();
565
- this.logger.log(`Job removed: ${jobId}`);
566
- }
567
- } catch (error) {
568
- this.logger.warn(`Failed to remove job ${jobId}: ${error.message}`);
569
- }
570
- }
571
-
572
- /**
573
- * Private helper: Validate cron expression
574
- */
575
- private validateCronExpression(cronExpression: string, timezone: string): void {
576
- try {
577
- cronParser.CronExpressionParser.parse(cronExpression, { tz: timezone });
578
- } catch (error: any) {
579
- throw new BadRequestException(
580
- `Invalid cron expression: ${cronExpression}. Error: ${error.message}`,
581
- );
582
- }
583
- }
584
-
585
- /**
586
- * Private helper: Calculate next execution time
587
- */
588
- private calculateNextExecution(cronExpression: string, timezone: string): Date | null {
589
- try {
590
- const interval = cronParser.CronExpressionParser.parse(cronExpression, { tz: timezone });
591
- return interval.next().toDate();
592
- } catch (error: any) {
593
- this.logger.error(`Failed to calculate next execution: ${error.message}`);
594
- return null;
595
- }
596
- }
597
- }
1
+ import { BadRequestException, Injectable, Logger, NotFoundException } from '@nestjs/common';
2
+ import { InjectRepository } from '@nestjs/typeorm';
3
+ import { Between, In, Repository } from 'typeorm';
4
+ import { InjectQueue } from '@nestjs/bull';
5
+ import { Queue } from 'bull';
6
+ import * as cronParser from 'cron-parser';
7
+
8
+ import { ScheduledWorkflow } from '../entities/scheduled-workflow.entity';
9
+ import { WorkflowExecutionLog } from '../entities/workflow-execution-log.entity';
10
+ import { CreateScheduleDto } from '../dto/create-schedule.dto';
11
+ import { UpdateScheduleDto } from '../dto/update-schedule.dto';
12
+ import { GetExecutionLogsDto } from '../dto/get-execution-logs.dto';
13
+ import { UserData } from 'src/module/auth/dto/user.dto';
14
+ import {
15
+ DEFAULT_BACKOFF_MULTIPLIER,
16
+ DEFAULT_MAX_RETRIES,
17
+ DEFAULT_RETRY_DELAY,
18
+ DEFAULT_TIMEZONE,
19
+ EXECUTE_SCHEDULED_WORKFLOW_JOB,
20
+ SCHEDULE_STATUS_ACTIVE,
21
+ SCHEDULE_STATUS_INACTIVE,
22
+ SCHEDULE_STATUS_PAUSED,
23
+ WORKFLOW_SCHEDULE_QUEUE,
24
+ } from '../constants/schedule.constants';
25
+ import { ScheduleJobData } from '../interfaces/schedule-job-data.interface';
26
+
27
+ /**
28
+ * Workflow Schedule Service
29
+ * Manages scheduled workflows and their execution
30
+ */
31
+ @Injectable()
32
+ export class WorkflowScheduleService {
33
+ private readonly logger = new Logger(WorkflowScheduleService.name);
34
+
35
+ constructor(
36
+ @InjectRepository(ScheduledWorkflow)
37
+ private readonly scheduledWorkflowRepository: Repository<ScheduledWorkflow>,
38
+ @InjectRepository(WorkflowExecutionLog)
39
+ private readonly executionLogRepository: Repository<WorkflowExecutionLog>,
40
+ @InjectQueue(WORKFLOW_SCHEDULE_QUEUE)
41
+ private readonly scheduleQueue: Queue<ScheduleJobData>,
42
+ ) {
43
+ }
44
+
45
+ /**
46
+ * 1. Create a new scheduled workflow
47
+ */
48
+ async createSchedule(
49
+ createScheduleDto: CreateScheduleDto,
50
+ loggedInUser: UserData,
51
+ ): Promise<ScheduledWorkflow> {
52
+ this.logger.log(
53
+ `Creating schedule for workflow ${createScheduleDto.workflow_id} by user ${loggedInUser.id}`,
54
+ );
55
+
56
+ try {
57
+ // Validate cron expression
58
+ this.validateCronExpression(createScheduleDto.cron_expression, createScheduleDto.timezone);
59
+
60
+ // Calculate next execution time
61
+ const nextExecutionAt = this.calculateNextExecution(
62
+ createScheduleDto.cron_expression,
63
+ createScheduleDto.timezone || DEFAULT_TIMEZONE,
64
+ );
65
+
66
+ // Create scheduled workflow entity
67
+ const schedule = this.scheduledWorkflowRepository.create({
68
+ workflow_id: createScheduleDto.workflow_id,
69
+ workflow_name: createScheduleDto.workflow_name,
70
+ name: createScheduleDto.name,
71
+ description: createScheduleDto.description,
72
+ cron_expression: createScheduleDto.cron_expression,
73
+ timezone: createScheduleDto.timezone || DEFAULT_TIMEZONE,
74
+ start_date: createScheduleDto.start_date ? new Date(createScheduleDto.start_date) : null,
75
+ end_date: createScheduleDto.end_date ? new Date(createScheduleDto.end_date) : null,
76
+ max_executions: createScheduleDto.max_executions,
77
+ execution_count: 0,
78
+ next_execution_at: nextExecutionAt,
79
+ schedule_status: SCHEDULE_STATUS_ACTIVE,
80
+ retry_config: createScheduleDto.retry_config || {
81
+ maxRetries: DEFAULT_MAX_RETRIES,
82
+ retryDelay: DEFAULT_RETRY_DELAY,
83
+ backoffMultiplier: DEFAULT_BACKOFF_MULTIPLIER,
84
+ },
85
+ metadata: createScheduleDto.metadata || {},
86
+ is_enabled: createScheduleDto.is_enabled !== false,
87
+ enterprise_id: createScheduleDto.enterprise_id || loggedInUser.enterprise_id,
88
+ level_id: Number(createScheduleDto.level_id) || Number(loggedInUser.level_id),
89
+ level_type: createScheduleDto.level_type || loggedInUser.level_type,
90
+ created_by: loggedInUser.id,
91
+ created_date: new Date(),
92
+ status: createScheduleDto.status || 'ACTIVE',
93
+ });
94
+
95
+ const savedSchedule = await this.scheduledWorkflowRepository.save(schedule);
96
+
97
+ // Add job to Bull queue with cron schedule
98
+ if (savedSchedule.is_enabled && savedSchedule.schedule_status === SCHEDULE_STATUS_ACTIVE) {
99
+ await this.scheduleJob(savedSchedule, loggedInUser);
100
+ }
101
+
102
+ this.logger.log(`Schedule created successfully with ID: ${savedSchedule.id}`);
103
+ return savedSchedule;
104
+ } catch (error) {
105
+ this.logger.error(`Failed to create schedule: ${error.message}`, error.stack);
106
+ throw error;
107
+ }
108
+ }
109
+
110
+ /**
111
+ * 2. Update an existing scheduled workflow
112
+ */
113
+ async updateSchedule(
114
+ updateScheduleDto: UpdateScheduleDto,
115
+ loggedInUser: UserData,
116
+ ): Promise<ScheduledWorkflow> {
117
+ this.logger.log(`Updating schedule ${updateScheduleDto.id} by user ${loggedInUser.id}`);
118
+
119
+ try {
120
+ const schedule = await this.scheduledWorkflowRepository.findOne({
121
+ where: { id: updateScheduleDto.id },
122
+ });
123
+
124
+ if (!schedule) {
125
+ throw new NotFoundException(`Scheduled workflow not found with ID: ${updateScheduleDto.id}`);
126
+ }
127
+
128
+ // Validate cron expression if updated
129
+ if (updateScheduleDto.cron_expression) {
130
+ this.validateCronExpression(
131
+ updateScheduleDto.cron_expression,
132
+ updateScheduleDto.timezone || schedule.timezone,
133
+ );
134
+ }
135
+
136
+ // Update fields
137
+ if (updateScheduleDto.workflow_id !== undefined) {
138
+ schedule.workflow_id = updateScheduleDto.workflow_id;
139
+ }
140
+ if (updateScheduleDto.workflow_name !== undefined) {
141
+ schedule.workflow_name = updateScheduleDto.workflow_name;
142
+ }
143
+ if (updateScheduleDto.name !== undefined) {
144
+ schedule.name = updateScheduleDto.name;
145
+ }
146
+ if (updateScheduleDto.description !== undefined) {
147
+ schedule.description = updateScheduleDto.description;
148
+ }
149
+ if (updateScheduleDto.cron_expression !== undefined) {
150
+ schedule.cron_expression = updateScheduleDto.cron_expression;
151
+ schedule.next_execution_at = this.calculateNextExecution(
152
+ updateScheduleDto.cron_expression,
153
+ updateScheduleDto.timezone || schedule.timezone,
154
+ );
155
+ }
156
+ if (updateScheduleDto.timezone !== undefined) {
157
+ schedule.timezone = updateScheduleDto.timezone;
158
+ }
159
+ if (updateScheduleDto.start_date !== undefined) {
160
+ schedule.start_date = updateScheduleDto.start_date
161
+ ? new Date(updateScheduleDto.start_date)
162
+ : null;
163
+ }
164
+ if (updateScheduleDto.end_date !== undefined) {
165
+ schedule.end_date = updateScheduleDto.end_date ? new Date(updateScheduleDto.end_date) : null;
166
+ }
167
+ if (updateScheduleDto.max_executions !== undefined) {
168
+ schedule.max_executions = updateScheduleDto.max_executions;
169
+ }
170
+ if (updateScheduleDto.schedule_status !== undefined) {
171
+ schedule.schedule_status = updateScheduleDto.schedule_status;
172
+ }
173
+ if (updateScheduleDto.retry_config !== undefined) {
174
+ schedule.retry_config = updateScheduleDto.retry_config;
175
+ }
176
+ if (updateScheduleDto.actions !== undefined) {
177
+ schedule.actions = updateScheduleDto.actions;
178
+ }
179
+ if (updateScheduleDto.metadata !== undefined) {
180
+ schedule.metadata = updateScheduleDto.metadata;
181
+ }
182
+ if (updateScheduleDto.is_enabled !== undefined) {
183
+ schedule.is_enabled = updateScheduleDto.is_enabled;
184
+ }
185
+ if (updateScheduleDto.status !== undefined) {
186
+ schedule.status = updateScheduleDto.status;
187
+ }
188
+
189
+ schedule.modified_by = loggedInUser.id;
190
+ schedule.modified_date = new Date();
191
+
192
+ const updatedSchedule = await this.scheduledWorkflowRepository.save(schedule);
193
+
194
+ // Remove old job and create new one if schedule changed
195
+ if (schedule.job_id) {
196
+ await this.removeJob(schedule.job_id);
197
+ }
198
+
199
+ if (updatedSchedule.is_enabled && updatedSchedule.schedule_status === SCHEDULE_STATUS_ACTIVE) {
200
+ await this.scheduleJob(updatedSchedule, loggedInUser);
201
+ }
202
+
203
+ this.logger.log(`Schedule updated successfully: ${updatedSchedule.id}`);
204
+ return updatedSchedule;
205
+ } catch (error) {
206
+ this.logger.error(`Failed to update schedule: ${error.message}`, error.stack);
207
+ throw error;
208
+ }
209
+ }
210
+
211
+ /**
212
+ * 3. Get a scheduled workflow by ID
213
+ */
214
+ async getScheduleById(scheduleId: number): Promise<ScheduledWorkflow> {
215
+ const schedule = await this.scheduledWorkflowRepository.findOne({
216
+ where: {
217
+ id: scheduleId,
218
+ },
219
+ });
220
+
221
+ if (!schedule) {
222
+ throw new NotFoundException(`Scheduled workflow not found with ID: ${scheduleId}`);
223
+ }
224
+
225
+ return schedule;
226
+ }
227
+
228
+ /**
229
+ * 4. Get all scheduled workflows with pagination and filters
230
+ */
231
+ async getAllSchedules(
232
+ page: number = 1,
233
+ size: number = 10,
234
+ filters: any = {},
235
+ loggedInUser: UserData,
236
+ ): Promise<{ data: ScheduledWorkflow[]; total: number; page: number; size: number }> {
237
+ const skip = (page - 1) * size;
238
+
239
+ const whereConditions: any = {
240
+ enterprise_id: loggedInUser.enterprise_id,
241
+ };
242
+
243
+ if (filters.workflow_id) {
244
+ whereConditions.workflow_id = filters.workflow_id;
245
+ }
246
+ if (filters.schedule_status) {
247
+ whereConditions.schedule_status = filters.schedule_status;
248
+ }
249
+ if (filters.is_enabled !== undefined) {
250
+ whereConditions.is_enabled = filters.is_enabled;
251
+ }
252
+
253
+ const [data, total] = await this.scheduledWorkflowRepository.findAndCount({
254
+ where: whereConditions,
255
+ skip,
256
+ take: size,
257
+ order: { created_date: 'DESC' },
258
+ });
259
+
260
+ return {
261
+ data,
262
+ total,
263
+ page,
264
+ size,
265
+ };
266
+ }
267
+
268
+ /**
269
+ * 5. Pause a scheduled workflow
270
+ */
271
+ async pauseSchedule(scheduleId: number, loggedInUser: UserData): Promise<ScheduledWorkflow> {
272
+ this.logger.log(`Pausing schedule ${scheduleId} by user ${loggedInUser.id}`);
273
+
274
+ const schedule = await this.getScheduleById(scheduleId);
275
+
276
+ if (schedule.schedule_status === SCHEDULE_STATUS_PAUSED) {
277
+ throw new BadRequestException('Schedule is already paused');
278
+ }
279
+
280
+ schedule.schedule_status = SCHEDULE_STATUS_PAUSED;
281
+ schedule.modified_by = loggedInUser.id;
282
+ schedule.modified_date = new Date();
283
+
284
+ const updatedSchedule = await this.scheduledWorkflowRepository.save(schedule);
285
+
286
+ // Remove job from queue
287
+ if (schedule.job_id) {
288
+ await this.removeJob(schedule.job_id);
289
+ updatedSchedule.job_id = null;
290
+ await this.scheduledWorkflowRepository.save(updatedSchedule);
291
+ }
292
+
293
+ this.logger.log(`Schedule paused successfully: ${scheduleId}`);
294
+ return updatedSchedule;
295
+ }
296
+
297
+ /**
298
+ * 6. Resume a paused scheduled workflow
299
+ */
300
+ async resumeSchedule(scheduleId: number, loggedInUser: UserData): Promise<ScheduledWorkflow> {
301
+ this.logger.log(`Resuming schedule ${scheduleId} by user ${loggedInUser.id}`);
302
+
303
+ const schedule = await this.getScheduleById(scheduleId);
304
+
305
+ if (schedule.schedule_status !== SCHEDULE_STATUS_PAUSED) {
306
+ throw new BadRequestException('Schedule is not paused');
307
+ }
308
+
309
+ schedule.schedule_status = SCHEDULE_STATUS_ACTIVE;
310
+ schedule.modified_by = loggedInUser.id;
311
+ schedule.modified_date = new Date();
312
+
313
+ // Recalculate next execution time
314
+ schedule.next_execution_at = this.calculateNextExecution(
315
+ schedule.cron_expression,
316
+ schedule.timezone,
317
+ );
318
+
319
+ const updatedSchedule = await this.scheduledWorkflowRepository.save(schedule);
320
+
321
+ // Re-add job to queue
322
+ if (updatedSchedule.is_enabled) {
323
+ await this.scheduleJob(updatedSchedule, loggedInUser);
324
+ }
325
+
326
+ this.logger.log(`Schedule resumed successfully: ${scheduleId}`);
327
+ return updatedSchedule;
328
+ }
329
+
330
+ /**
331
+ * 7. Delete a scheduled workflow
332
+ */
333
+ async deleteSchedule(scheduleId: number, loggedInUser: UserData): Promise<void> {
334
+ this.logger.log(`Deleting schedule ${scheduleId} by user ${loggedInUser.id}`);
335
+
336
+ const schedule = await this.getScheduleById(scheduleId);
337
+
338
+ // Remove job from queue
339
+ if (schedule.job_id) {
340
+ await this.removeJob(schedule.job_id);
341
+ }
342
+
343
+ // Soft delete by setting status to inactive
344
+ schedule.schedule_status = SCHEDULE_STATUS_INACTIVE;
345
+ schedule.status = 'INACTIVE';
346
+ schedule.is_enabled = false;
347
+ schedule.modified_by = loggedInUser.id;
348
+ schedule.modified_date = new Date();
349
+
350
+ await this.scheduledWorkflowRepository.save(schedule);
351
+
352
+ this.logger.log(`Schedule deleted successfully: ${scheduleId}`);
353
+ }
354
+
355
+ /**
356
+ * 8. Manually trigger a scheduled workflow execution
357
+ */
358
+ async triggerManualExecution(
359
+ scheduleId: number,
360
+ loggedInUser: UserData,
361
+ metadata?: Record<string, any>,
362
+ ): Promise<{ executionLogId: number; jobId: string }> {
363
+ this.logger.log(`Manual trigger for schedule ${scheduleId} by user ${loggedInUser.id}`);
364
+
365
+ const schedule = await this.getScheduleById(scheduleId);
366
+
367
+ const jobData: ScheduleJobData = {
368
+ scheduleId: schedule.id,
369
+ workflowId: schedule.workflow_id,
370
+ workflowName: schedule.workflow_name,
371
+ enterpriseId: schedule.enterprise_id,
372
+ levelId: Number(schedule.level_id),
373
+ levelType: schedule.level_type,
374
+ createdBy: loggedInUser.id,
375
+ triggeredBy: 'MANUAL',
376
+ triggeredAt: new Date(),
377
+ metadata: metadata || {},
378
+ };
379
+
380
+ // Add job to queue immediately (not scheduled)
381
+ const job = await this.scheduleQueue.add(EXECUTE_SCHEDULED_WORKFLOW_JOB, jobData, {
382
+ attempts: schedule.retry_config?.maxRetries || DEFAULT_MAX_RETRIES,
383
+ backoff: {
384
+ type: 'exponential',
385
+ delay: schedule.retry_config?.retryDelay || DEFAULT_RETRY_DELAY,
386
+ },
387
+ });
388
+
389
+ // Create execution log entry
390
+ const executionLog = this.executionLogRepository.create({
391
+ schedule_id: schedule.id,
392
+ workflow_id: schedule.workflow_id,
393
+ job_id: job.id.toString(),
394
+ execution_status: 'PENDING',
395
+ triggered_by: 'MANUAL',
396
+ triggered_by_user_id: loggedInUser.id,
397
+ enterprise_id: schedule.enterprise_id,
398
+ created_by: Number(loggedInUser.id),
399
+ created_date: new Date(),
400
+ status: 'ACTIVE',
401
+ });
402
+
403
+ const savedLog = await this.executionLogRepository.save(executionLog);
404
+
405
+ this.logger.log(`Manual execution triggered for schedule ${scheduleId}, job ID: ${job.id}`);
406
+
407
+ return {
408
+ executionLogId: savedLog.id,
409
+ jobId: job.id.toString(),
410
+ };
411
+ }
412
+
413
+ /**
414
+ * 9. Get execution logs with filters and pagination
415
+ */
416
+ async getExecutionLogs(
417
+ getExecutionLogsDto: GetExecutionLogsDto,
418
+ loggedInUser: UserData,
419
+ ): Promise<{ data: WorkflowExecutionLog[]; total: number; page: number; size: number }> {
420
+ const page = getExecutionLogsDto.page || 1;
421
+ const size = getExecutionLogsDto.size || 10;
422
+ const skip = (page - 1) * size;
423
+
424
+ const whereConditions: any = {
425
+ enterprise_id: getExecutionLogsDto.enterprise_id || loggedInUser.enterprise_id,
426
+ };
427
+
428
+ if (getExecutionLogsDto.schedule_id) {
429
+ whereConditions.schedule_id = getExecutionLogsDto.schedule_id;
430
+ }
431
+ if (getExecutionLogsDto.workflow_id) {
432
+ whereConditions.workflow_id = getExecutionLogsDto.workflow_id;
433
+ }
434
+ if (getExecutionLogsDto.execution_status) {
435
+ whereConditions.execution_status = getExecutionLogsDto.execution_status;
436
+ }
437
+ if (getExecutionLogsDto.execution_statuses && getExecutionLogsDto.execution_statuses.length > 0) {
438
+ whereConditions.execution_status = In(getExecutionLogsDto.execution_statuses);
439
+ }
440
+ if (getExecutionLogsDto.triggered_by) {
441
+ whereConditions.triggered_by = getExecutionLogsDto.triggered_by;
442
+ }
443
+ if (getExecutionLogsDto.triggered_by_user_id) {
444
+ whereConditions.triggered_by_user_id = getExecutionLogsDto.triggered_by_user_id;
445
+ }
446
+
447
+ // Date range filter
448
+ if (getExecutionLogsDto.start_date && getExecutionLogsDto.end_date) {
449
+ whereConditions.created_date = Between(
450
+ new Date(getExecutionLogsDto.start_date),
451
+ new Date(getExecutionLogsDto.end_date),
452
+ );
453
+ }
454
+
455
+ const [data, total] = await this.executionLogRepository.findAndCount({
456
+ where: whereConditions,
457
+ skip,
458
+ take: size,
459
+ order: {
460
+ [getExecutionLogsDto.sortBy || 'created_date']:
461
+ getExecutionLogsDto.sortOrder || 'DESC',
462
+ },
463
+ });
464
+
465
+ return {
466
+ data,
467
+ total,
468
+ page,
469
+ size,
470
+ };
471
+ }
472
+
473
+ /**
474
+ * Get execution statistics for a schedule
475
+ */
476
+ async getExecutionStats(scheduleId: number): Promise<any> {
477
+ const schedule = await this.getScheduleById(scheduleId);
478
+
479
+ const result = await this.executionLogRepository
480
+ .createQueryBuilder('log')
481
+ .select([
482
+ 'COUNT(*) AS total_executions',
483
+ 'SUM(CASE WHEN log.execution_status = \'COMPLETED\' THEN 1 ELSE 0 END) AS successful_executions',
484
+ 'SUM(CASE WHEN log.execution_status = \'FAILED\' THEN 1 ELSE 0 END) AS failed_executions',
485
+ 'SUM(CASE WHEN log.execution_status = \'PENDING\' THEN 1 ELSE 0 END) AS pending_executions',
486
+ 'SUM(CASE WHEN log.execution_status = \'RUNNING\' THEN 1 ELSE 0 END) AS running_executions',
487
+ 'AVG(log.duration_ms) AS average_duration_ms',
488
+ 'SUM(log.total_records) AS total_records_processed',
489
+ ])
490
+ .where('log.schedule_id = :scheduleId', { scheduleId })
491
+ .getRawOne();
492
+ const successRate =
493
+ result.total_executions > 0
494
+ ? (result.successful_executions / result.total_executions) * 100
495
+ : 0;
496
+
497
+ return {
498
+ schedule_id: scheduleId,
499
+ schedule_name: schedule.name,
500
+ total_executions: parseInt(result.total_executions),
501
+ successful_executions: parseInt(result.successful_executions),
502
+ failed_executions: parseInt(result.failed_executions),
503
+ pending_executions: parseInt(result.pending_executions),
504
+ running_executions: parseInt(result.running_executions),
505
+ average_duration_ms: parseFloat(result.average_duration_ms) || 0,
506
+ total_records_processed: parseInt(result.total_records_processed) || 0,
507
+ success_rate_percentage: parseFloat(successRate.toFixed(2)),
508
+ };
509
+ }
510
+
511
+ /**
512
+ * Private helper: Schedule a job in Bull queue
513
+ */
514
+ private async scheduleJob(schedule: ScheduledWorkflow, loggedInUser: UserData): Promise<void> {
515
+ const jobData: ScheduleJobData = {
516
+ scheduleId: schedule.id,
517
+ workflowId: schedule.workflow_id,
518
+ workflowName: schedule.workflow_name,
519
+ enterpriseId: schedule.enterprise_id,
520
+ levelId: Number(schedule.level_id),
521
+ levelType: schedule.level_type,
522
+ createdBy: loggedInUser.id,
523
+ triggeredBy: 'SCHEDULE',
524
+ triggeredAt: new Date(),
525
+ metadata: schedule.metadata || {},
526
+ };
527
+
528
+ const job = await this.scheduleQueue.add(EXECUTE_SCHEDULED_WORKFLOW_JOB, jobData, {
529
+ repeat: {
530
+ cron: schedule.cron_expression,
531
+ tz: schedule.timezone,
532
+ startDate: schedule.start_date || undefined,
533
+ endDate: schedule.end_date || undefined,
534
+ },
535
+ attempts: schedule.retry_config?.maxRetries || DEFAULT_MAX_RETRIES,
536
+ backoff: {
537
+ type: 'exponential',
538
+ delay: schedule.retry_config?.retryDelay || DEFAULT_RETRY_DELAY,
539
+ },
540
+ });
541
+
542
+ schedule.job_id = job.id.toString();
543
+ await this.scheduledWorkflowRepository.save(schedule);
544
+
545
+ this.logger.log(`Job scheduled with ID: ${job.id} for schedule ${schedule.id}`);
546
+ }
547
+
548
+ /**
549
+ * Private helper: Remove a job from Bull queue
550
+ */
551
+ private async removeJob(jobId: string): Promise<void> {
552
+ try {
553
+ const job = await this.scheduleQueue.getJob(jobId);
554
+ if (job) {
555
+ await job.remove();
556
+ this.logger.log(`Job removed: ${jobId}`);
557
+ }
558
+ } catch (error) {
559
+ this.logger.warn(`Failed to remove job ${jobId}: ${error.message}`);
560
+ }
561
+ }
562
+
563
+ /**
564
+ * Private helper: Validate cron expression
565
+ */
566
+ private validateCronExpression(cronExpression: string, timezone: string): void {
567
+ try {
568
+ cronParser.CronExpressionParser.parse(cronExpression, { tz: timezone });
569
+ } catch (error: any) {
570
+ throw new BadRequestException(
571
+ `Invalid cron expression: ${cronExpression}. Error: ${error.message}`,
572
+ );
573
+ }
574
+ }
575
+
576
+ /**
577
+ * Private helper: Calculate next execution time
578
+ */
579
+ private calculateNextExecution(cronExpression: string, timezone: string): Date | null {
580
+ try {
581
+ const interval = cronParser.CronExpressionParser.parse(cronExpression, { tz: timezone });
582
+ return interval.next().toDate();
583
+ } catch (error: any) {
584
+ this.logger.error(`Failed to calculate next execution: ${error.message}`);
585
+ return null;
586
+ }
587
+ }
588
+ }