rez_core 7.1.4 → 7.1.5

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 (455) 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 +58 -58
  4. package/.idea/codeStyles/codeStyleConfig.xml +4 -4
  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 +7 -7
  12. package/.idea/prettier.xml +6 -0
  13. package/.idea/vcs.xml +5 -5
  14. package/.prettierrc +3 -3
  15. package/README.md +99 -99
  16. package/dist/module/filter/repository/saved-filter.repository.js +0 -2
  17. package/dist/module/filter/repository/saved-filter.repository.js.map +1 -1
  18. package/dist/module/filter/service/filter.service.js +28 -33
  19. package/dist/module/filter/service/filter.service.js.map +1 -1
  20. package/dist/module/integration/examples/usage.example.js +9 -9
  21. package/dist/module/integration/service/integration.service.d.ts +1 -6
  22. package/dist/module/integration/service/integration.service.js +2 -14
  23. package/dist/module/integration/service/integration.service.js.map +1 -1
  24. package/dist/module/integration/service/oauth.service.js +0 -2
  25. package/dist/module/integration/service/oauth.service.js.map +1 -1
  26. package/dist/module/integration/service/wrapper.service.js +0 -1
  27. package/dist/module/integration/service/wrapper.service.js.map +1 -1
  28. package/dist/module/integration/strategies/email/gmail-api.strategy.js +7 -23
  29. package/dist/module/integration/strategies/email/gmail-api.strategy.js.map +1 -1
  30. package/dist/module/integration/strategies/email/sendgrid-api.strategy.js +5 -8
  31. package/dist/module/integration/strategies/email/sendgrid-api.strategy.js.map +1 -1
  32. package/dist/module/listmaster/controller/list-master.controller.d.ts +21 -6
  33. package/dist/module/listmaster/controller/list-master.controller.js +17 -6
  34. package/dist/module/listmaster/controller/list-master.controller.js.map +1 -1
  35. package/dist/module/listmaster/service/list-master.service.d.ts +9 -4
  36. package/dist/module/listmaster/service/list-master.service.js +54 -45
  37. package/dist/module/listmaster/service/list-master.service.js.map +1 -1
  38. package/dist/module/meta/controller/media.controller.d.ts +0 -3
  39. package/dist/module/meta/controller/media.controller.js +0 -27
  40. package/dist/module/meta/controller/media.controller.js.map +1 -1
  41. package/dist/module/meta/entity/media-data.entity.d.ts +0 -1
  42. package/dist/module/meta/entity/media-data.entity.js +0 -4
  43. package/dist/module/meta/entity/media-data.entity.js.map +1 -1
  44. package/dist/module/meta/repository/attribute-master.repository.js +14 -14
  45. package/dist/module/meta/service/entity-dynamic.service.js +16 -16
  46. package/dist/module/meta/service/entity-dynamic.service.js.map +1 -1
  47. package/dist/module/meta/service/entity-master.service.js +20 -20
  48. package/dist/module/meta/service/media-data.service.d.ts +0 -2
  49. package/dist/module/meta/service/media-data.service.js +0 -8
  50. package/dist/module/meta/service/media-data.service.js.map +1 -1
  51. package/dist/module/meta/service/resolver.service.js +13 -23
  52. package/dist/module/meta/service/resolver.service.js.map +1 -1
  53. package/dist/module/notification/notification.module.js +0 -2
  54. package/dist/module/notification/notification.module.js.map +1 -1
  55. package/dist/module/notification/service/notification.service.d.ts +1 -3
  56. package/dist/module/notification/service/notification.service.js +40 -27
  57. package/dist/module/notification/service/notification.service.js.map +1 -1
  58. package/dist/module/workflow/controller/workflow.controller.js +1 -1
  59. package/dist/module/workflow/controller/workflow.controller.js.map +1 -1
  60. package/dist/module/workflow/repository/action-data.repository.js +3 -10
  61. package/dist/module/workflow/repository/action-data.repository.js.map +1 -1
  62. package/dist/module/workflow/repository/action.repository.js +2 -2
  63. package/dist/module/workflow/repository/activity-log.repository.js +4 -4
  64. package/dist/module/workflow/repository/activity-log.repository.js.map +1 -1
  65. package/dist/module/workflow/repository/comm-template.repository.js +4 -4
  66. package/dist/module/workflow/repository/comm-template.repository.js.map +1 -1
  67. package/dist/module/workflow/repository/stage.repository.js +8 -8
  68. package/dist/module/workflow/repository/task.repository.js +4 -4
  69. package/dist/module/workflow/repository/task.repository.js.map +1 -1
  70. package/dist/module/workflow/service/action-template-mapping.service.js +2 -2
  71. package/dist/module/workflow/service/action.service.js +5 -5
  72. package/dist/module/workflow/service/comm-template.service.js +1 -1
  73. package/dist/module/workflow/service/comm-template.service.js.map +1 -1
  74. package/dist/module/workflow/service/entity-modification.service.d.ts +1 -4
  75. package/dist/module/workflow/service/entity-modification.service.js +5 -9
  76. package/dist/module/workflow/service/entity-modification.service.js.map +1 -1
  77. package/dist/module/workflow/service/populate-workflow.service.d.ts +1 -1
  78. package/dist/module/workflow/service/populate-workflow.service.js +24 -24
  79. package/dist/module/workflow/service/populate-workflow.service.js.map +1 -1
  80. package/dist/module/workflow/service/task.service.js +11 -10
  81. package/dist/module/workflow/service/task.service.js.map +1 -1
  82. package/dist/module/workflow/service/workflow-list-master.service.js +2 -2
  83. package/dist/module/workflow/service/workflow-list-master.service.js.map +1 -1
  84. package/dist/module/workflow-automation/service/schedule-handler.service.js +9 -9
  85. package/dist/module/workflow-automation/service/workflow-automation.service.js +6 -8
  86. package/dist/module/workflow-automation/service/workflow-automation.service.js.map +1 -1
  87. package/dist/tsconfig.build.tsbuildinfo +1 -1
  88. package/dist/utils/service/reflection-helper.service.js +2 -2
  89. package/docs/modules/event-driven-integration-design.md +91 -91
  90. package/docs/modules/integration.md +250 -250
  91. package/eslint.config.mjs +34 -34
  92. package/nest-cli.json +14 -14
  93. package/package.json +128 -128
  94. package/server.log +850 -0
  95. package/src/app.controller.ts +12 -12
  96. package/src/app.module.ts +62 -62
  97. package/src/app.service.ts +8 -8
  98. package/src/config/bull.config.ts +72 -72
  99. package/src/config/config.module.ts +17 -17
  100. package/src/config/database.config.ts +48 -48
  101. package/src/config/redis.config.ts +55 -55
  102. package/src/constant/attribute.constant.ts +8 -8
  103. package/src/constant/db-data-type.constant.ts +160 -160
  104. package/src/constant/entity.constant.ts +3 -3
  105. package/src/constant/global.constant.ts +67 -67
  106. package/src/constant/status.constant.ts +3 -3
  107. package/src/core.module.ts +96 -96
  108. package/src/decorators/roles.decorator.ts +7 -7
  109. package/src/dtos/response.dto.ts +6 -6
  110. package/src/dtos/response.ts +5 -5
  111. package/src/index.ts +1 -1
  112. package/src/module/auth/auth.module.ts +65 -65
  113. package/src/module/auth/controller/auth.controller.ts +28 -28
  114. package/src/module/auth/dto/user.dto.ts +56 -56
  115. package/src/module/auth/guards/google-auth.guard.ts +9 -9
  116. package/src/module/auth/guards/jwt.guard.ts +22 -22
  117. package/src/module/auth/services/auth.service.ts +56 -56
  118. package/src/module/auth/services/jwt.service.ts +11 -11
  119. package/src/module/auth/strategies/google.strategy.ts +54 -54
  120. package/src/module/auth/strategies/jwt.strategy.ts +65 -65
  121. package/src/module/auth/strategies/local.strategy.ts +13 -13
  122. package/src/module/dashboard/controller/dashboard.controller.ts +38 -38
  123. package/src/module/dashboard/dashboard.module.ts +19 -19
  124. package/src/module/dashboard/entity/dashboard_page_data.entity.ts +23 -23
  125. package/src/module/dashboard/entity/widget_master.entity.ts +15 -15
  126. package/src/module/dashboard/repository/dashboard.repository.ts +49 -49
  127. package/src/module/dashboard/service/dashboard.service.ts +69 -69
  128. package/src/module/eav/EAV_USAGE_GUIDE.md +351 -351
  129. package/src/module/eav/controller/eav.controller.ts +119 -119
  130. package/src/module/eav/dto/eav-operation.dto.ts +62 -62
  131. package/src/module/eav/eav.module.ts +79 -79
  132. package/src/module/eav/entity/eav-boolean.entity.ts +25 -25
  133. package/src/module/eav/entity/eav-date.entity.ts +24 -24
  134. package/src/module/eav/entity/eav-decimal.entity.ts +24 -24
  135. package/src/module/eav/entity/eav-int.entity.ts +24 -24
  136. package/src/module/eav/entity/eav-json.entity.ts +24 -24
  137. package/src/module/eav/entity/eav-text.entity.ts +24 -24
  138. package/src/module/eav/entity/eav-time.entity.ts +24 -24
  139. package/src/module/eav/entity/eav-timestamp.entity.ts +24 -24
  140. package/src/module/eav/entity/eav-varchar.entity.ts +24 -24
  141. package/src/module/eav/interface/eav-strategy.interface.ts +32 -32
  142. package/src/module/eav/repository/eav-boolean.repository.ts +67 -67
  143. package/src/module/eav/repository/eav-date.repository.ts +67 -67
  144. package/src/module/eav/repository/eav-decimal.repository.ts +67 -67
  145. package/src/module/eav/repository/eav-int.repository.ts +67 -67
  146. package/src/module/eav/repository/eav-json.repository.ts +67 -67
  147. package/src/module/eav/repository/eav-text.repository.ts +67 -67
  148. package/src/module/eav/repository/eav-time.repository.ts +67 -67
  149. package/src/module/eav/repository/eav-timestamp.repository.ts +67 -67
  150. package/src/module/eav/repository/eav-varchar.repository.ts +67 -67
  151. package/src/module/eav/service/eav-boolean.service.ts +64 -64
  152. package/src/module/eav/service/eav-date.service.ts +64 -64
  153. package/src/module/eav/service/eav-decimal.service.ts +64 -64
  154. package/src/module/eav/service/eav-factory.service.ts +93 -93
  155. package/src/module/eav/service/eav-int.service.ts +64 -64
  156. package/src/module/eav/service/eav-json.service.ts +64 -64
  157. package/src/module/eav/service/eav-text.service.ts +64 -64
  158. package/src/module/eav/service/eav-time.service.ts +64 -64
  159. package/src/module/eav/service/eav-timestamp.service.ts +64 -64
  160. package/src/module/eav/service/eav-varchar.service.ts +65 -65
  161. package/src/module/eav/service/eav.service.ts +116 -116
  162. package/src/module/entity_json/controller/entity_json.controller.ts +75 -75
  163. package/src/module/entity_json/docs/FlatJson_Filterin_System.md +2803 -2803
  164. package/src/module/entity_json/entity/entityJson.entity.ts +42 -42
  165. package/src/module/entity_json/entity_json.module.ts +22 -22
  166. package/src/module/entity_json/service/entityJson.repository.ts +37 -37
  167. package/src/module/entity_json/service/entity_json.service.ts +492 -492
  168. package/src/module/export/controller/export.controller.ts +83 -83
  169. package/src/module/export/export.module.ts +14 -14
  170. package/src/module/export/service/export.service.ts +107 -107
  171. package/src/module/filter/controller/filter.controller.ts +214 -214
  172. package/src/module/filter/dto/filter-request.dto.ts +41 -41
  173. package/src/module/filter/entity/saved-filter-detail.entity.ts +37 -37
  174. package/src/module/filter/entity/saved-filter-master.entity.ts +30 -30
  175. package/src/module/filter/filter.module.ts +33 -33
  176. package/src/module/filter/repository/saved-filter.repository.ts +247 -249
  177. package/src/module/filter/repository/saved.filter-detail.repository.ts +19 -19
  178. package/src/module/filter/service/filter-evaluator.service.ts +82 -82
  179. package/src/module/filter/service/filter.service.ts +1722 -1752
  180. package/src/module/filter/service/saved-filter.service.ts +164 -164
  181. package/src/module/ics/controller/ics.controller.ts +21 -21
  182. package/src/module/ics/dto/ics.dto.ts +55 -55
  183. package/src/module/ics/ics.module.ts +13 -13
  184. package/src/module/ics/service/ics.service.ts +57 -57
  185. package/src/module/integration/controller/calender-event.controller.ts +31 -31
  186. package/src/module/integration/controller/integration.controller.ts +662 -662
  187. package/src/module/integration/controller/wrapper.controller.ts +37 -37
  188. package/src/module/integration/dto/create-config.dto.ts +526 -526
  189. package/src/module/integration/entity/integration-config.entity.ts +112 -112
  190. package/src/module/integration/entity/integration-entity-mapper.entity.ts +14 -14
  191. package/src/module/integration/entity/integration-source.entity.ts +17 -17
  192. package/src/module/integration/entity/user-integration.entity.ts +71 -71
  193. package/src/module/integration/examples/usage.example.ts +338 -338
  194. package/src/module/integration/factories/base.factory.ts +7 -7
  195. package/src/module/integration/factories/email.factory.ts +49 -49
  196. package/src/module/integration/factories/integration.factory.ts +121 -121
  197. package/src/module/integration/factories/sms.factory.ts +51 -51
  198. package/src/module/integration/factories/telephone.factory.ts +41 -41
  199. package/src/module/integration/factories/whatsapp.factory.ts +56 -56
  200. package/src/module/integration/integration.module.ts +110 -110
  201. package/src/module/integration/service/calendar-event.service.ts +118 -118
  202. package/src/module/integration/service/integration-entity-mapper.service.ts +17 -17
  203. package/src/module/integration/service/integration-queue.service.ts +229 -229
  204. package/src/module/integration/service/integration.service.ts +2632 -2651
  205. package/src/module/integration/service/oauth.service.ts +224 -226
  206. package/src/module/integration/service/wrapper.service.ts +753 -754
  207. package/src/module/integration/strategies/email/gmail-api.strategy.ts +281 -307
  208. package/src/module/integration/strategies/email/outlook-api.strategy.ts +44 -44
  209. package/src/module/integration/strategies/email/outlook.strategy.ts +64 -64
  210. package/src/module/integration/strategies/email/sendgrid-api.strategy.ts +260 -263
  211. package/src/module/integration/strategies/integration.strategy.ts +97 -97
  212. package/src/module/integration/strategies/sms/gupshup-sms.strategy.ts +146 -146
  213. package/src/module/integration/strategies/sms/msg91-sms.strategy.ts +164 -164
  214. package/src/module/integration/strategies/sms/tubelight-sms.strategy.ts +163 -163
  215. package/src/module/integration/strategies/telephone/ozonetel-voice.strategy.ts +238 -238
  216. package/src/module/integration/strategies/telephone/tubelight-voice.strategy.ts +210 -210
  217. package/src/module/integration/strategies/whatsapp/gupshup-whatsapp.strategy.ts +359 -359
  218. package/src/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.ts +372 -372
  219. package/src/module/integration/strategies/whatsapp/whatsapp-cloud.strategy.ts +403 -403
  220. package/src/module/integration/strategies/whatsapp/whatsapp.strategy.ts +57 -57
  221. package/src/module/layout/controller/layout.controller.ts +38 -38
  222. package/src/module/layout/entity/header-items.entity.ts +28 -28
  223. package/src/module/layout/entity/header-section.entity.ts +13 -13
  224. package/src/module/layout/layout.module.ts +20 -20
  225. package/src/module/layout/repository/header-items.repository.ts +18 -18
  226. package/src/module/layout/repository/header-section.repository.ts +16 -16
  227. package/src/module/layout/service/header-section.service.ts +25 -25
  228. package/src/module/layout_preference/controller/layout_preference.controller.ts +76 -76
  229. package/src/module/layout_preference/entity/layout_preference.entity.ts +28 -28
  230. package/src/module/layout_preference/layout_preference.module.ts +22 -22
  231. package/src/module/layout_preference/repository/layout_preference.repository.ts +65 -65
  232. package/src/module/layout_preference/service/layout_preference.service.ts +191 -191
  233. package/src/module/linked_attributes/controller/linked_attributes.controller.ts +137 -137
  234. package/src/module/linked_attributes/dto/create-linked-attribute-smart.dto.ts +54 -54
  235. package/src/module/linked_attributes/entity/linked_attribute.entity.ts +51 -51
  236. package/src/module/linked_attributes/linked_attributes.module.ts +23 -23
  237. package/src/module/linked_attributes/repository/linked_attribute.repository.ts +12 -12
  238. package/src/module/linked_attributes/service/linked_attributes.service.ts +650 -650
  239. package/src/module/linked_attributes/test/linked-attributes.service.spec.ts +244 -244
  240. package/src/module/listmaster/controller/list-master.controller.ts +226 -215
  241. package/src/module/listmaster/entity/list-master-items.entity.ts +30 -30
  242. package/src/module/listmaster/entity/list-master.entity.ts +25 -25
  243. package/src/module/listmaster/listmaster.module.ts +46 -46
  244. package/src/module/listmaster/repository/list-master-items.repository.ts +262 -262
  245. package/src/module/listmaster/repository/list-master.repository.ts +60 -60
  246. package/src/module/listmaster/service/list-master-engine.ts +19 -19
  247. package/src/module/listmaster/service/list-master-extension.interface.ts +4 -4
  248. package/src/module/listmaster/service/list-master-item.service.ts +382 -382
  249. package/src/module/listmaster/service/list-master-registry.ts +15 -15
  250. package/src/module/listmaster/service/list-master.service.ts +760 -774
  251. package/src/module/mapper/controller/field-mapper.controller.ts +76 -76
  252. package/src/module/mapper/controller/mapper.controller.ts +20 -20
  253. package/src/module/mapper/dto/field-mapper.dto.ts +14 -14
  254. package/src/module/mapper/entity/field-lovs.entity.ts +15 -15
  255. package/src/module/mapper/entity/field-mapper.entity.ts +49 -49
  256. package/src/module/mapper/entity/mapper.entity.ts +9 -9
  257. package/src/module/mapper/mapper.module.ts +35 -35
  258. package/src/module/mapper/repository/field-lovs.repository.ts +35 -35
  259. package/src/module/mapper/repository/field-mapper.repository.ts +42 -42
  260. package/src/module/mapper/repository/mapper.repository.ts +32 -32
  261. package/src/module/mapper/service/field-mapper.service.ts +268 -268
  262. package/src/module/mapper/service/mapper.service.ts +80 -80
  263. package/src/module/master/controller/master.controller.ts +71 -71
  264. package/src/module/master/service/master.service.ts +460 -460
  265. package/src/module/master/service/poupulate-meta.service.ts +210 -210
  266. package/src/module/meta/controller/attribute-master.controller.ts +83 -83
  267. package/src/module/meta/controller/entity-dynamic.controller.ts +123 -123
  268. package/src/module/meta/controller/entity-master.controller.ts +41 -41
  269. package/src/module/meta/controller/entity-relation.controller.ts +36 -36
  270. package/src/module/meta/controller/entity.controller.ts +301 -301
  271. package/src/module/meta/controller/entity.public.controller.ts +76 -76
  272. package/src/module/meta/controller/media.controller.ts +135 -162
  273. package/src/module/meta/controller/meta.controller.ts +80 -80
  274. package/src/module/meta/controller/view-master.controller.ts +79 -79
  275. package/src/module/meta/dto/entity-list-data.dto.ts +6 -6
  276. package/src/module/meta/dto/entity-tab.dto.ts +4 -4
  277. package/src/module/meta/dto/entity-table.dto.ts +12 -12
  278. package/src/module/meta/entity/attribute-master.entity.ts +62 -62
  279. package/src/module/meta/entity/base-entity.entity.ts +52 -52
  280. package/src/module/meta/entity/dynamic.entity.ts +5 -5
  281. package/src/module/meta/entity/entity-master.entity.ts +53 -53
  282. package/src/module/meta/entity/entity-relation-data.entity.ts +24 -24
  283. package/src/module/meta/entity/entity-relation.entity.ts +18 -18
  284. package/src/module/meta/entity/entity-table-column.entity.ts +56 -56
  285. package/src/module/meta/entity/entity-table.entity.ts +45 -45
  286. package/src/module/meta/entity/media-data.entity.ts +32 -35
  287. package/src/module/meta/entity/preference.entity.ts +57 -57
  288. package/src/module/meta/entity/view-master.entity.ts +36 -36
  289. package/src/module/meta/entity.module.ts +153 -153
  290. package/src/module/meta/repository/attribute-master.repository.ts +206 -206
  291. package/src/module/meta/repository/entity-attribute-update.repository.ts +48 -48
  292. package/src/module/meta/repository/entity-master.repository.ts +120 -120
  293. package/src/module/meta/repository/entity-relation.repository.ts +36 -36
  294. package/src/module/meta/repository/entity-table-column.repository.ts +39 -39
  295. package/src/module/meta/repository/entity-table.repository.ts +53 -53
  296. package/src/module/meta/repository/media-data.repository.ts +50 -50
  297. package/src/module/meta/repository/preference.repository.ts +20 -20
  298. package/src/module/meta/repository/user-app-mapping.repository.ts +28 -28
  299. package/src/module/meta/repository/view-master.repository.ts +42 -42
  300. package/src/module/meta/service/attribute-master.service.ts +329 -329
  301. package/src/module/meta/service/common.service.ts +9 -9
  302. package/src/module/meta/service/entity-attribute-update.service.ts +26 -26
  303. package/src/module/meta/service/entity-dynamic.service.ts +1037 -1038
  304. package/src/module/meta/service/entity-master.service.ts +288 -288
  305. package/src/module/meta/service/entity-realation-data.service.ts +9 -9
  306. package/src/module/meta/service/entity-relation.service.ts +85 -85
  307. package/src/module/meta/service/entity-service-impl.service.ts +390 -390
  308. package/src/module/meta/service/entity-table-column.service.ts +26 -26
  309. package/src/module/meta/service/entity-table.service.ts +144 -144
  310. package/src/module/meta/service/entity-validation.service.ts +187 -187
  311. package/src/module/meta/service/entity.service.ts +48 -48
  312. package/src/module/meta/service/field-group.service.ts +103 -103
  313. package/src/module/meta/service/media-data.service.ts +385 -397
  314. package/src/module/meta/service/preference.service.ts +16 -16
  315. package/src/module/meta/service/resolver.service.ts +260 -293
  316. package/src/module/meta/service/section-master.service.ts +104 -104
  317. package/src/module/meta/service/update-form-json.service.ts +22 -22
  318. package/src/module/meta/service/user-app-mapping.service.ts +17 -17
  319. package/src/module/meta/service/view-master.service.ts +127 -127
  320. package/src/module/microservice-client/microservice-clients.module.ts +13 -13
  321. package/src/module/microservice-client/service/microservice-client-factory.ts +37 -37
  322. package/src/module/microservice-client/service/microservice-clients.ts +4 -4
  323. package/src/module/notification/controller/notification.controller.ts +58 -58
  324. package/src/module/notification/entity/notification.entity.ts +76 -76
  325. package/src/module/notification/entity/otp.entity.ts +28 -28
  326. package/src/module/notification/firebase-admin.config.ts +22 -22
  327. package/src/module/notification/notification.module.ts +63 -65
  328. package/src/module/notification/repository/otp.repository.ts +27 -27
  329. package/src/module/notification/service/email.service.ts +142 -142
  330. package/src/module/notification/service/notification.service.ts +163 -145
  331. package/src/module/preference_master/entity/preference.entity.ts +25 -25
  332. package/src/module/preference_master/preference.service.ts +27 -27
  333. package/src/module/preference_master/repo/preference.repository.ts +36 -36
  334. package/src/module/third-party-module/entity/third-party-api-registry.entity.ts +52 -52
  335. package/src/module/third-party-module/repository/third-party-api-registry.repository.ts +20 -20
  336. package/src/module/third-party-module/service/api-registry.service.ts +13 -13
  337. package/src/module/third-party-module/third-party.module.ts +12 -12
  338. package/src/module/workflow/controller/action-category.controller.ts +54 -54
  339. package/src/module/workflow/controller/action-resource-mapping.controller.ts +23 -23
  340. package/src/module/workflow/controller/action-template-mapping.controller.ts +35 -35
  341. package/src/module/workflow/controller/action.controller.ts +111 -111
  342. package/src/module/workflow/controller/activity-log.controller.ts +55 -55
  343. package/src/module/workflow/controller/comm-template.controller.ts +43 -43
  344. package/src/module/workflow/controller/entity-modification.controller.ts +35 -35
  345. package/src/module/workflow/controller/form-master.controller.ts +43 -43
  346. package/src/module/workflow/controller/stage-group.controller.ts +49 -49
  347. package/src/module/workflow/controller/stage.controller.ts +51 -51
  348. package/src/module/workflow/controller/task.controller.ts +77 -77
  349. package/src/module/workflow/controller/workflow-list-master.controller.ts +44 -44
  350. package/src/module/workflow/controller/workflow-meta.controller.ts +80 -80
  351. package/src/module/workflow/controller/workflow.controller.ts +66 -66
  352. package/src/module/workflow/entity/action-category.entity.ts +33 -33
  353. package/src/module/workflow/entity/action-data.entity.ts +51 -51
  354. package/src/module/workflow/entity/action-resources-mapping.entity.ts +21 -21
  355. package/src/module/workflow/entity/action-template-mapping.entity.ts +12 -12
  356. package/src/module/workflow/entity/action.entity.ts +48 -48
  357. package/src/module/workflow/entity/activity-log.entity.ts +39 -39
  358. package/src/module/workflow/entity/comm-template.entity.ts +38 -38
  359. package/src/module/workflow/entity/entity-modification.entity.ts +33 -33
  360. package/src/module/workflow/entity/form.entity.ts +21 -21
  361. package/src/module/workflow/entity/stage-action-mapping.entity.ts +12 -12
  362. package/src/module/workflow/entity/stage-group.entity.ts +18 -18
  363. package/src/module/workflow/entity/stage-movement-data.entity.ts +33 -33
  364. package/src/module/workflow/entity/stage.entity.ts +15 -15
  365. package/src/module/workflow/entity/task-data.entity.ts +84 -84
  366. package/src/module/workflow/entity/template-attach-mapper.entity.ts +30 -30
  367. package/src/module/workflow/entity/workflow-data.entity.ts +6 -6
  368. package/src/module/workflow/entity/workflow-level-mapping.entity.ts +18 -18
  369. package/src/module/workflow/entity/workflow.entity.ts +15 -15
  370. package/src/module/workflow/repository/action-category.repository.ts +78 -78
  371. package/src/module/workflow/repository/action-data.repository.ts +345 -353
  372. package/src/module/workflow/repository/action.repository.ts +339 -339
  373. package/src/module/workflow/repository/activity-log.repository.ts +148 -148
  374. package/src/module/workflow/repository/comm-template.repository.ts +157 -157
  375. package/src/module/workflow/repository/form-master.repository.ts +50 -50
  376. package/src/module/workflow/repository/stage-group.repository.ts +186 -186
  377. package/src/module/workflow/repository/stage-movement.repository.ts +217 -217
  378. package/src/module/workflow/repository/stage.repository.ts +160 -160
  379. package/src/module/workflow/repository/task.repository.ts +154 -156
  380. package/src/module/workflow/repository/workflow.repository.ts +42 -42
  381. package/src/module/workflow/service/action-category.service.ts +32 -32
  382. package/src/module/workflow/service/action-data.service.ts +62 -62
  383. package/src/module/workflow/service/action-resources-mapping.service.ts +10 -10
  384. package/src/module/workflow/service/action-template-mapping.service.ts +137 -137
  385. package/src/module/workflow/service/action.service.ts +300 -300
  386. package/src/module/workflow/service/activity-log.service.ts +106 -106
  387. package/src/module/workflow/service/comm-template.service.ts +179 -179
  388. package/src/module/workflow/service/entity-modification.service.ts +55 -63
  389. package/src/module/workflow/service/form-master.service.ts +35 -35
  390. package/src/module/workflow/service/populate-workflow.service.ts +313 -313
  391. package/src/module/workflow/service/stage-action-mapping.service.ts +5 -5
  392. package/src/module/workflow/service/stage-group.service.ts +325 -325
  393. package/src/module/workflow/service/stage.service.ts +196 -196
  394. package/src/module/workflow/service/task.service.ts +547 -546
  395. package/src/module/workflow/service/workflow-list-master.service.ts +68 -68
  396. package/src/module/workflow/service/workflow-meta.service.ts +638 -638
  397. package/src/module/workflow/service/workflow.service.ts +212 -212
  398. package/src/module/workflow/workflow.module.ts +180 -180
  399. package/src/module/workflow-automation/SCHEDULING_GUIDE.md +145 -145
  400. package/src/module/workflow-automation/controller/workflow-automation.controller.ts +43 -43
  401. package/src/module/workflow-automation/entity/workflow-automation-action.entity.ts +26 -26
  402. package/src/module/workflow-automation/entity/workflow-automation.entity.ts +35 -35
  403. package/src/module/workflow-automation/interface/action.decorator.ts +7 -7
  404. package/src/module/workflow-automation/interface/action.interface.ts +5 -5
  405. package/src/module/workflow-automation/service/action-registery.service.ts +35 -35
  406. package/src/module/workflow-automation/service/schedule-handler.service.ts +167 -167
  407. package/src/module/workflow-automation/service/workflow-automation-engine.service.ts +219 -219
  408. package/src/module/workflow-automation/service/workflow-automation.service.ts +486 -486
  409. package/src/module/workflow-automation/workflow-automation.module.ts +55 -55
  410. package/src/module/workflow-schedule/INSTALLATION.md +244 -244
  411. package/src/module/workflow-schedule/MULTI_PROJECT_GUIDE.md +196 -196
  412. package/src/module/workflow-schedule/README.md +422 -422
  413. package/src/module/workflow-schedule/constants/schedule.constants.ts +48 -48
  414. package/src/module/workflow-schedule/controller/workflow-schedule.controller.ts +253 -253
  415. package/src/module/workflow-schedule/docs/CLAUDE_CODE_GUIDE.md +510 -510
  416. package/src/module/workflow-schedule/docs/CLAUDE_CODE_PROMPT.md +362 -362
  417. package/src/module/workflow-schedule/docs/RUN_CLAUDE_CODE.sh +68 -68
  418. package/src/module/workflow-schedule/dto/create-schedule.dto.ts +147 -147
  419. package/src/module/workflow-schedule/dto/get-execution-logs.dto.ts +119 -119
  420. package/src/module/workflow-schedule/dto/update-schedule.dto.ts +96 -96
  421. package/src/module/workflow-schedule/entities/scheduled-workflow.entity.ts +148 -148
  422. package/src/module/workflow-schedule/entities/workflow-execution-log.entity.ts +154 -154
  423. package/src/module/workflow-schedule/interfaces/schedule-job-data.interface.ts +51 -51
  424. package/src/module/workflow-schedule/interfaces/workflow-schedule-options.interface.ts +12 -12
  425. package/src/module/workflow-schedule/processors/schedule.processor.ts +616 -616
  426. package/src/module/workflow-schedule/service/workflow-schedule.service.ts +588 -588
  427. package/src/module/workflow-schedule/workflow-schedule.module.ts +67 -67
  428. package/src/resources/dev.properties.yaml +33 -33
  429. package/src/resources/local.properties.yaml +27 -27
  430. package/src/resources/properties.module.ts +12 -12
  431. package/src/resources/properties.yaml.ts +11 -11
  432. package/src/resources/uat.properties.yaml +31 -31
  433. package/src/table.config.ts +123 -123
  434. package/src/utils/dto/excel-data.dto.ts +14 -14
  435. package/src/utils/dto/excelsheet-data.dto.ts +5 -5
  436. package/src/utils/service/base64util.service.ts +18 -18
  437. package/src/utils/service/clockIDGenUtil.service.ts +21 -21
  438. package/src/utils/service/codeGenerator.service.ts +22 -22
  439. package/src/utils/service/dateUtil.service.ts +17 -17
  440. package/src/utils/service/encryptUtil.service.ts +97 -97
  441. package/src/utils/service/excel-helper.service.ts +72 -72
  442. package/src/utils/service/excelUtil.service.ts +15 -15
  443. package/src/utils/service/file-util.service.ts +11 -11
  444. package/src/utils/service/json-util.service.ts +23 -23
  445. package/src/utils/service/loggingUtil.service.ts +88 -88
  446. package/src/utils/service/reflection-helper.service.ts +62 -62
  447. package/src/utils/service/wbsCodeGen.service.ts +8 -8
  448. package/src/utils/utils.module.ts +27 -27
  449. package/tsconfig.build.json +4 -4
  450. package/tsconfig.json +24 -24
  451. package/.idea/250218_ether_core.iml +0 -12
  452. package/dist/module/notification/repository/notification.repository.d.ts +0 -7
  453. package/dist/module/notification/repository/notification.repository.js +0 -43
  454. package/dist/module/notification/repository/notification.repository.js.map +0 -1
  455. package/src/module/notification/repository/notification.repository.ts +0 -33
@@ -1,351 +1,351 @@
1
- # EAV Module Usage Guide
2
-
3
- ## Overview
4
-
5
- The EAV (Entity-Attribute-Value) module provides a flexible way to store dynamic attributes for entities using different data types. It implements the **Strategy Pattern** and **Factory Pattern** for clean, maintainable code.
6
-
7
- ## Architecture
8
-
9
- ```mermaid
10
- graph TD
11
- A[EavService - Orchestrator] --> B[EavFactoryService]
12
- B --> C[IEavStrategy Interface]
13
- C --> D[EavVarcharService]
14
- C --> E[EavIntService]
15
- C --> F[EavBooleanService]
16
- C --> G[EavDecimalService]
17
- C --> H[EavTextService]
18
- C --> I[EavJsonService]
19
- C --> J[EavDateService]
20
- C --> K[EavTimeService]
21
- C --> L[EavTimestampService]
22
- ```
23
-
24
- ## Supported Data Types
25
-
26
- - `varchar` / `string` - String values
27
- - `int` / `integer` - Integer values
28
- - `boolean` / `bool` - Boolean values
29
- - `decimal` / `float` - Decimal/Float values
30
- - `text` - Large text values
31
- - `json` - JSON objects
32
- - `date` - Date values
33
- - `time` - Time values
34
- - `timestamp` / `datetime` - Timestamp values
35
-
36
- ## Basic Usage
37
-
38
- ### 1. Import the Module
39
-
40
- ```typescript
41
- import { Module } from '@nestjs/common';
42
- import { EavModule } from './module/eav/eav.module';
43
-
44
- @Module({
45
- imports: [EavModule],
46
- })
47
- export class AppModule {}
48
- ```
49
-
50
- ### 2. Inject the Service
51
-
52
- ```typescript
53
- import { Injectable } from '@nestjs/common';
54
- import { EavService } from './module/eav/service/eav.service';
55
-
56
- @Injectable()
57
- export class YourService {
58
- constructor(private readonly eavService: EavService) {}
59
- }
60
- ```
61
-
62
- ### 3. Perform CRUD Operations
63
-
64
- #### Create a Record
65
-
66
- ```typescript
67
- // Create a varchar attribute
68
- const result = await this.eavService.create('varchar', {
69
- entity_type: 'user',
70
- entity_id: 123,
71
- key: 'nickname',
72
- value: 'JohnDoe',
73
- }, 1); // modifiedBy user ID
74
-
75
- // Create an integer attribute
76
- await this.eavService.create('int', {
77
- entity_type: 'product',
78
- entity_id: 456,
79
- key: 'stock_quantity',
80
- value: 100,
81
- });
82
-
83
- // Create a JSON attribute
84
- await this.eavService.create('json', {
85
- entity_type: 'user',
86
- entity_id: 123,
87
- key: 'preferences',
88
- value: { theme: 'dark', language: 'en' },
89
- });
90
- ```
91
-
92
- #### Find One Record
93
-
94
- ```typescript
95
- const attribute = await this.eavService.findOne('varchar', {
96
- entity_type: 'user',
97
- entity_id: 123,
98
- key: 'nickname',
99
- });
100
-
101
- console.log(attribute.value); // 'JohnDoe'
102
- ```
103
-
104
- #### Find All Records
105
-
106
- ```typescript
107
- // Find all attributes for a specific entity
108
- const userAttributes = await this.eavService.findAll('varchar', {
109
- entity_type: 'user',
110
- entity_id: 123,
111
- });
112
-
113
- // Find all attributes of a type for an entity type
114
- const allUserVarchars = await this.eavService.findAll('varchar', {
115
- entity_type: 'user',
116
- });
117
- ```
118
-
119
- #### Update a Record
120
-
121
- ```typescript
122
- const updated = await this.eavService.update(
123
- 'varchar',
124
- {
125
- entity_type: 'user',
126
- entity_id: 123,
127
- key: 'nickname',
128
- },
129
- {
130
- value: 'JaneDoe',
131
- },
132
- 1, // modifiedBy user ID
133
- );
134
- ```
135
-
136
- #### Delete a Record
137
-
138
- ```typescript
139
- const deleted = await this.eavService.delete('varchar', {
140
- entity_type: 'user',
141
- entity_id: 123,
142
- key: 'nickname',
143
- });
144
-
145
- console.log(deleted); // true if deleted, false otherwise
146
- ```
147
-
148
- #### Upsert (Create or Update)
149
-
150
- ```typescript
151
- // Will create if doesn't exist, update if exists
152
- const result = await this.eavService.upsert('varchar', {
153
- entity_type: 'user',
154
- entity_id: 123,
155
- key: 'nickname',
156
- value: 'UpdatedNickname',
157
- }, 1);
158
- ```
159
-
160
- ## Advanced Usage
161
-
162
- ### Using the Factory Directly
163
-
164
- If you need more control, you can inject the factory service:
165
-
166
- ```typescript
167
- import { EavFactoryService } from './module/eav/service/eav-factory.service';
168
-
169
- @Injectable()
170
- export class YourService {
171
- constructor(private readonly eavFactory: EavFactoryService) {}
172
-
173
- async customOperation() {
174
- // Get the service for a specific type
175
- const varcharService = this.eavFactory.getService('varchar');
176
-
177
- // Use the service directly
178
- const result = await varcharService.create({
179
- entity_type: 'custom',
180
- entity_id: 999,
181
- key: 'custom_key',
182
- value: 'custom_value',
183
- });
184
- }
185
- }
186
- ```
187
-
188
- ### Type Checking
189
-
190
- ```typescript
191
- // Check if a type is supported
192
- const isSupported = this.eavService.isTypeSupported('varchar'); // true
193
- const notSupported = this.eavService.isTypeSupported('unknown'); // false
194
-
195
- // Get all supported types
196
- const types = this.eavService.getSupportedTypes();
197
- console.log(types); // ['varchar', 'string', 'int', 'integer', ...]
198
- ```
199
-
200
- ## REST API Examples (Using the Controller)
201
-
202
- ### Create
203
- ```bash
204
- POST /eav/varchar?modifiedBy=1
205
- Content-Type: application/json
206
-
207
- {
208
- "entity_type": "user",
209
- "entity_id": 123,
210
- "key": "nickname",
211
- "value": "JohnDoe"
212
- }
213
- ```
214
-
215
- ### Find One
216
- ```bash
217
- GET /eav/varchar/find-one?entity_type=user&entity_id=123&key=nickname
218
- ```
219
-
220
- ### Find All
221
- ```bash
222
- GET /eav/varchar?entity_type=user&entity_id=123
223
- ```
224
-
225
- ### Update
226
- ```bash
227
- PUT /eav/varchar?entity_type=user&entity_id=123&key=nickname&modifiedBy=1
228
- Content-Type: application/json
229
-
230
- {
231
- "value": "JaneDoe"
232
- }
233
- ```
234
-
235
- ### Delete
236
- ```bash
237
- DELETE /eav/varchar?entity_type=user&entity_id=123&key=nickname
238
- ```
239
-
240
- ### Upsert
241
- ```bash
242
- POST /eav/varchar/upsert?modifiedBy=1
243
- Content-Type: application/json
244
-
245
- {
246
- "entity_type": "user",
247
- "entity_id": 123,
248
- "key": "nickname",
249
- "value": "UpdatedNickname"
250
- }
251
- ```
252
-
253
- ### Get Supported Types
254
- ```bash
255
- GET /eav/meta/supported-types
256
- ```
257
-
258
- ## Design Pattern Benefits
259
-
260
- ### Strategy Pattern
261
- - Each data type has its own service implementing `IEavStrategy`
262
- - Easy to add new data types without modifying existing code
263
- - Each service is independently testable
264
-
265
- ### Factory Pattern
266
- - `EavFactoryService` resolves the correct service based on data type
267
- - Centralizes service selection logic
268
- - Supports type aliases (e.g., 'string' → 'varchar')
269
-
270
- ### Facade Pattern
271
- - `EavService` provides a simple, unified interface
272
- - Hides complexity of service resolution
273
- - Makes it easy for consumers to use the module
274
-
275
- ## Error Handling
276
-
277
- The factory will throw a `BadRequestException` if an unsupported data type is provided:
278
-
279
- ```typescript
280
- try {
281
- await this.eavService.create('unsupported_type', {...});
282
- } catch (error) {
283
- // BadRequestException: Unsupported data type: unsupported_type
284
- }
285
- ```
286
-
287
- ## Best Practices
288
-
289
- 1. **Always specify the correct data type** - Use the appropriate type for your data
290
- 2. **Use upsert when appropriate** - Simplifies create-or-update logic
291
- 3. **Track modifications** - Pass `modifiedBy` to track who made changes
292
- 4. **Validate input** - The DTOs include validation decorators
293
- 5. **Handle errors** - Always wrap calls in try-catch for production code
294
-
295
- ## Example: Complete User Preferences System
296
-
297
- ```typescript
298
- @Injectable()
299
- export class UserPreferencesService {
300
- constructor(private readonly eavService: EavService) {}
301
-
302
- async setPreference(userId: number, key: string, value: any, type: string) {
303
- return await this.eavService.upsert(type, {
304
- entity_type: 'user_preferences',
305
- entity_id: userId,
306
- key,
307
- value,
308
- }, userId);
309
- }
310
-
311
- async getPreference(userId: number, key: string, type: string) {
312
- return await this.eavService.findOne(type, {
313
- entity_type: 'user_preferences',
314
- entity_id: userId,
315
- key,
316
- });
317
- }
318
-
319
- async getAllPreferences(userId: number) {
320
- // Get preferences from different types
321
- const varchars = await this.eavService.findAll('varchar', {
322
- entity_type: 'user_preferences',
323
- entity_id: userId,
324
- });
325
-
326
- const booleans = await this.eavService.findAll('boolean', {
327
- entity_type: 'user_preferences',
328
- entity_id: userId,
329
- });
330
-
331
- const jsons = await this.eavService.findAll('json', {
332
- entity_type: 'user_preferences',
333
- entity_id: userId,
334
- });
335
-
336
- return {
337
- strings: varchars,
338
- flags: booleans,
339
- objects: jsons,
340
- };
341
- }
342
-
343
- async deletePreference(userId: number, key: string, type: string) {
344
- return await this.eavService.delete(type, {
345
- entity_type: 'user_preferences',
346
- entity_id: userId,
347
- key,
348
- });
349
- }
350
- }
351
- ```
1
+ # EAV Module Usage Guide
2
+
3
+ ## Overview
4
+
5
+ The EAV (Entity-Attribute-Value) module provides a flexible way to store dynamic attributes for entities using different data types. It implements the **Strategy Pattern** and **Factory Pattern** for clean, maintainable code.
6
+
7
+ ## Architecture
8
+
9
+ ```mermaid
10
+ graph TD
11
+ A[EavService - Orchestrator] --> B[EavFactoryService]
12
+ B --> C[IEavStrategy Interface]
13
+ C --> D[EavVarcharService]
14
+ C --> E[EavIntService]
15
+ C --> F[EavBooleanService]
16
+ C --> G[EavDecimalService]
17
+ C --> H[EavTextService]
18
+ C --> I[EavJsonService]
19
+ C --> J[EavDateService]
20
+ C --> K[EavTimeService]
21
+ C --> L[EavTimestampService]
22
+ ```
23
+
24
+ ## Supported Data Types
25
+
26
+ - `varchar` / `string` - String values
27
+ - `int` / `integer` - Integer values
28
+ - `boolean` / `bool` - Boolean values
29
+ - `decimal` / `float` - Decimal/Float values
30
+ - `text` - Large text values
31
+ - `json` - JSON objects
32
+ - `date` - Date values
33
+ - `time` - Time values
34
+ - `timestamp` / `datetime` - Timestamp values
35
+
36
+ ## Basic Usage
37
+
38
+ ### 1. Import the Module
39
+
40
+ ```typescript
41
+ import { Module } from '@nestjs/common';
42
+ import { EavModule } from './module/eav/eav.module';
43
+
44
+ @Module({
45
+ imports: [EavModule],
46
+ })
47
+ export class AppModule {}
48
+ ```
49
+
50
+ ### 2. Inject the Service
51
+
52
+ ```typescript
53
+ import { Injectable } from '@nestjs/common';
54
+ import { EavService } from './module/eav/service/eav.service';
55
+
56
+ @Injectable()
57
+ export class YourService {
58
+ constructor(private readonly eavService: EavService) {}
59
+ }
60
+ ```
61
+
62
+ ### 3. Perform CRUD Operations
63
+
64
+ #### Create a Record
65
+
66
+ ```typescript
67
+ // Create a varchar attribute
68
+ const result = await this.eavService.create('varchar', {
69
+ entity_type: 'user',
70
+ entity_id: 123,
71
+ key: 'nickname',
72
+ value: 'JohnDoe',
73
+ }, 1); // modifiedBy user ID
74
+
75
+ // Create an integer attribute
76
+ await this.eavService.create('int', {
77
+ entity_type: 'product',
78
+ entity_id: 456,
79
+ key: 'stock_quantity',
80
+ value: 100,
81
+ });
82
+
83
+ // Create a JSON attribute
84
+ await this.eavService.create('json', {
85
+ entity_type: 'user',
86
+ entity_id: 123,
87
+ key: 'preferences',
88
+ value: { theme: 'dark', language: 'en' },
89
+ });
90
+ ```
91
+
92
+ #### Find One Record
93
+
94
+ ```typescript
95
+ const attribute = await this.eavService.findOne('varchar', {
96
+ entity_type: 'user',
97
+ entity_id: 123,
98
+ key: 'nickname',
99
+ });
100
+
101
+ console.log(attribute.value); // 'JohnDoe'
102
+ ```
103
+
104
+ #### Find All Records
105
+
106
+ ```typescript
107
+ // Find all attributes for a specific entity
108
+ const userAttributes = await this.eavService.findAll('varchar', {
109
+ entity_type: 'user',
110
+ entity_id: 123,
111
+ });
112
+
113
+ // Find all attributes of a type for an entity type
114
+ const allUserVarchars = await this.eavService.findAll('varchar', {
115
+ entity_type: 'user',
116
+ });
117
+ ```
118
+
119
+ #### Update a Record
120
+
121
+ ```typescript
122
+ const updated = await this.eavService.update(
123
+ 'varchar',
124
+ {
125
+ entity_type: 'user',
126
+ entity_id: 123,
127
+ key: 'nickname',
128
+ },
129
+ {
130
+ value: 'JaneDoe',
131
+ },
132
+ 1, // modifiedBy user ID
133
+ );
134
+ ```
135
+
136
+ #### Delete a Record
137
+
138
+ ```typescript
139
+ const deleted = await this.eavService.delete('varchar', {
140
+ entity_type: 'user',
141
+ entity_id: 123,
142
+ key: 'nickname',
143
+ });
144
+
145
+ console.log(deleted); // true if deleted, false otherwise
146
+ ```
147
+
148
+ #### Upsert (Create or Update)
149
+
150
+ ```typescript
151
+ // Will create if doesn't exist, update if exists
152
+ const result = await this.eavService.upsert('varchar', {
153
+ entity_type: 'user',
154
+ entity_id: 123,
155
+ key: 'nickname',
156
+ value: 'UpdatedNickname',
157
+ }, 1);
158
+ ```
159
+
160
+ ## Advanced Usage
161
+
162
+ ### Using the Factory Directly
163
+
164
+ If you need more control, you can inject the factory service:
165
+
166
+ ```typescript
167
+ import { EavFactoryService } from './module/eav/service/eav-factory.service';
168
+
169
+ @Injectable()
170
+ export class YourService {
171
+ constructor(private readonly eavFactory: EavFactoryService) {}
172
+
173
+ async customOperation() {
174
+ // Get the service for a specific type
175
+ const varcharService = this.eavFactory.getService('varchar');
176
+
177
+ // Use the service directly
178
+ const result = await varcharService.create({
179
+ entity_type: 'custom',
180
+ entity_id: 999,
181
+ key: 'custom_key',
182
+ value: 'custom_value',
183
+ });
184
+ }
185
+ }
186
+ ```
187
+
188
+ ### Type Checking
189
+
190
+ ```typescript
191
+ // Check if a type is supported
192
+ const isSupported = this.eavService.isTypeSupported('varchar'); // true
193
+ const notSupported = this.eavService.isTypeSupported('unknown'); // false
194
+
195
+ // Get all supported types
196
+ const types = this.eavService.getSupportedTypes();
197
+ console.log(types); // ['varchar', 'string', 'int', 'integer', ...]
198
+ ```
199
+
200
+ ## REST API Examples (Using the Controller)
201
+
202
+ ### Create
203
+ ```bash
204
+ POST /eav/varchar?modifiedBy=1
205
+ Content-Type: application/json
206
+
207
+ {
208
+ "entity_type": "user",
209
+ "entity_id": 123,
210
+ "key": "nickname",
211
+ "value": "JohnDoe"
212
+ }
213
+ ```
214
+
215
+ ### Find One
216
+ ```bash
217
+ GET /eav/varchar/find-one?entity_type=user&entity_id=123&key=nickname
218
+ ```
219
+
220
+ ### Find All
221
+ ```bash
222
+ GET /eav/varchar?entity_type=user&entity_id=123
223
+ ```
224
+
225
+ ### Update
226
+ ```bash
227
+ PUT /eav/varchar?entity_type=user&entity_id=123&key=nickname&modifiedBy=1
228
+ Content-Type: application/json
229
+
230
+ {
231
+ "value": "JaneDoe"
232
+ }
233
+ ```
234
+
235
+ ### Delete
236
+ ```bash
237
+ DELETE /eav/varchar?entity_type=user&entity_id=123&key=nickname
238
+ ```
239
+
240
+ ### Upsert
241
+ ```bash
242
+ POST /eav/varchar/upsert?modifiedBy=1
243
+ Content-Type: application/json
244
+
245
+ {
246
+ "entity_type": "user",
247
+ "entity_id": 123,
248
+ "key": "nickname",
249
+ "value": "UpdatedNickname"
250
+ }
251
+ ```
252
+
253
+ ### Get Supported Types
254
+ ```bash
255
+ GET /eav/meta/supported-types
256
+ ```
257
+
258
+ ## Design Pattern Benefits
259
+
260
+ ### Strategy Pattern
261
+ - Each data type has its own service implementing `IEavStrategy`
262
+ - Easy to add new data types without modifying existing code
263
+ - Each service is independently testable
264
+
265
+ ### Factory Pattern
266
+ - `EavFactoryService` resolves the correct service based on data type
267
+ - Centralizes service selection logic
268
+ - Supports type aliases (e.g., 'string' → 'varchar')
269
+
270
+ ### Facade Pattern
271
+ - `EavService` provides a simple, unified interface
272
+ - Hides complexity of service resolution
273
+ - Makes it easy for consumers to use the module
274
+
275
+ ## Error Handling
276
+
277
+ The factory will throw a `BadRequestException` if an unsupported data type is provided:
278
+
279
+ ```typescript
280
+ try {
281
+ await this.eavService.create('unsupported_type', {...});
282
+ } catch (error) {
283
+ // BadRequestException: Unsupported data type: unsupported_type
284
+ }
285
+ ```
286
+
287
+ ## Best Practices
288
+
289
+ 1. **Always specify the correct data type** - Use the appropriate type for your data
290
+ 2. **Use upsert when appropriate** - Simplifies create-or-update logic
291
+ 3. **Track modifications** - Pass `modifiedBy` to track who made changes
292
+ 4. **Validate input** - The DTOs include validation decorators
293
+ 5. **Handle errors** - Always wrap calls in try-catch for production code
294
+
295
+ ## Example: Complete User Preferences System
296
+
297
+ ```typescript
298
+ @Injectable()
299
+ export class UserPreferencesService {
300
+ constructor(private readonly eavService: EavService) {}
301
+
302
+ async setPreference(userId: number, key: string, value: any, type: string) {
303
+ return await this.eavService.upsert(type, {
304
+ entity_type: 'user_preferences',
305
+ entity_id: userId,
306
+ key,
307
+ value,
308
+ }, userId);
309
+ }
310
+
311
+ async getPreference(userId: number, key: string, type: string) {
312
+ return await this.eavService.findOne(type, {
313
+ entity_type: 'user_preferences',
314
+ entity_id: userId,
315
+ key,
316
+ });
317
+ }
318
+
319
+ async getAllPreferences(userId: number) {
320
+ // Get preferences from different types
321
+ const varchars = await this.eavService.findAll('varchar', {
322
+ entity_type: 'user_preferences',
323
+ entity_id: userId,
324
+ });
325
+
326
+ const booleans = await this.eavService.findAll('boolean', {
327
+ entity_type: 'user_preferences',
328
+ entity_id: userId,
329
+ });
330
+
331
+ const jsons = await this.eavService.findAll('json', {
332
+ entity_type: 'user_preferences',
333
+ entity_id: userId,
334
+ });
335
+
336
+ return {
337
+ strings: varchars,
338
+ flags: booleans,
339
+ objects: jsons,
340
+ };
341
+ }
342
+
343
+ async deletePreference(userId: number, key: string, type: string) {
344
+ return await this.eavService.delete(type, {
345
+ entity_type: 'user_preferences',
346
+ entity_id: userId,
347
+ key,
348
+ });
349
+ }
350
+ }
351
+ ```