rez_core 7.1.4 → 7.1.7

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 (447) hide show
  1. package/.prettierrc +3 -3
  2. package/README.md +99 -99
  3. package/dist/module/filter/repository/saved-filter.repository.js +0 -2
  4. package/dist/module/filter/repository/saved-filter.repository.js.map +1 -1
  5. package/dist/module/filter/service/filter.service.js +28 -33
  6. package/dist/module/filter/service/filter.service.js.map +1 -1
  7. package/dist/module/integration/examples/usage.example.js +9 -9
  8. package/dist/module/integration/service/integration.service.d.ts +1 -6
  9. package/dist/module/integration/service/integration.service.js +2 -14
  10. package/dist/module/integration/service/integration.service.js.map +1 -1
  11. package/dist/module/integration/service/oauth.service.js +0 -2
  12. package/dist/module/integration/service/oauth.service.js.map +1 -1
  13. package/dist/module/integration/service/wrapper.service.js +0 -1
  14. package/dist/module/integration/service/wrapper.service.js.map +1 -1
  15. package/dist/module/integration/strategies/email/gmail-api.strategy.js +7 -23
  16. package/dist/module/integration/strategies/email/gmail-api.strategy.js.map +1 -1
  17. package/dist/module/integration/strategies/email/sendgrid-api.strategy.js +5 -8
  18. package/dist/module/integration/strategies/email/sendgrid-api.strategy.js.map +1 -1
  19. package/dist/module/listmaster/controller/list-master.controller.d.ts +21 -6
  20. package/dist/module/listmaster/controller/list-master.controller.js +17 -6
  21. package/dist/module/listmaster/controller/list-master.controller.js.map +1 -1
  22. package/dist/module/listmaster/service/list-master.service.d.ts +9 -4
  23. package/dist/module/listmaster/service/list-master.service.js +54 -45
  24. package/dist/module/listmaster/service/list-master.service.js.map +1 -1
  25. package/dist/module/meta/controller/media.controller.d.ts +0 -3
  26. package/dist/module/meta/controller/media.controller.js +0 -27
  27. package/dist/module/meta/controller/media.controller.js.map +1 -1
  28. package/dist/module/meta/entity/media-data.entity.d.ts +0 -1
  29. package/dist/module/meta/entity/media-data.entity.js +0 -4
  30. package/dist/module/meta/entity/media-data.entity.js.map +1 -1
  31. package/dist/module/meta/repository/attribute-master.repository.js +14 -14
  32. package/dist/module/meta/service/entity-dynamic.service.js +16 -16
  33. package/dist/module/meta/service/entity-dynamic.service.js.map +1 -1
  34. package/dist/module/meta/service/entity-master.service.js +20 -20
  35. package/dist/module/meta/service/entity-table.service.js +3 -5
  36. package/dist/module/meta/service/entity-table.service.js.map +1 -1
  37. package/dist/module/meta/service/media-data.service.d.ts +0 -2
  38. package/dist/module/meta/service/media-data.service.js +0 -8
  39. package/dist/module/meta/service/media-data.service.js.map +1 -1
  40. package/dist/module/meta/service/resolver.service.js +13 -23
  41. package/dist/module/meta/service/resolver.service.js.map +1 -1
  42. package/dist/module/notification/notification.module.js +0 -2
  43. package/dist/module/notification/notification.module.js.map +1 -1
  44. package/dist/module/notification/service/notification.service.d.ts +1 -3
  45. package/dist/module/notification/service/notification.service.js +40 -27
  46. package/dist/module/notification/service/notification.service.js.map +1 -1
  47. package/dist/module/workflow/controller/workflow.controller.js +1 -1
  48. package/dist/module/workflow/controller/workflow.controller.js.map +1 -1
  49. package/dist/module/workflow/repository/action-data.repository.js +3 -10
  50. package/dist/module/workflow/repository/action-data.repository.js.map +1 -1
  51. package/dist/module/workflow/repository/action.repository.js +2 -2
  52. package/dist/module/workflow/repository/activity-log.repository.js +4 -4
  53. package/dist/module/workflow/repository/activity-log.repository.js.map +1 -1
  54. package/dist/module/workflow/repository/comm-template.repository.js +4 -4
  55. package/dist/module/workflow/repository/comm-template.repository.js.map +1 -1
  56. package/dist/module/workflow/repository/stage.repository.js +8 -8
  57. package/dist/module/workflow/repository/task.repository.js +4 -4
  58. package/dist/module/workflow/repository/task.repository.js.map +1 -1
  59. package/dist/module/workflow/service/action-template-mapping.service.js +2 -2
  60. package/dist/module/workflow/service/action.service.js +5 -5
  61. package/dist/module/workflow/service/comm-template.service.js +1 -1
  62. package/dist/module/workflow/service/comm-template.service.js.map +1 -1
  63. package/dist/module/workflow/service/entity-modification.service.d.ts +1 -4
  64. package/dist/module/workflow/service/entity-modification.service.js +5 -9
  65. package/dist/module/workflow/service/entity-modification.service.js.map +1 -1
  66. package/dist/module/workflow/service/populate-workflow.service.d.ts +1 -1
  67. package/dist/module/workflow/service/populate-workflow.service.js +24 -24
  68. package/dist/module/workflow/service/populate-workflow.service.js.map +1 -1
  69. package/dist/module/workflow/service/task.service.js +11 -10
  70. package/dist/module/workflow/service/task.service.js.map +1 -1
  71. package/dist/module/workflow/service/workflow-list-master.service.js +2 -2
  72. package/dist/module/workflow/service/workflow-list-master.service.js.map +1 -1
  73. package/dist/module/workflow-automation/service/schedule-handler.service.js +9 -9
  74. package/dist/module/workflow-automation/service/workflow-automation.service.js +6 -8
  75. package/dist/module/workflow-automation/service/workflow-automation.service.js.map +1 -1
  76. package/dist/tsconfig.build.tsbuildinfo +1 -1
  77. package/dist/utils/service/reflection-helper.service.js +2 -2
  78. package/docs/modules/event-driven-integration-design.md +91 -91
  79. package/docs/modules/integration.md +250 -250
  80. package/eslint.config.mjs +34 -34
  81. package/nest-cli.json +14 -14
  82. package/package.json +128 -128
  83. package/src/app.controller.ts +12 -12
  84. package/src/app.module.ts +62 -62
  85. package/src/app.service.ts +8 -8
  86. package/src/config/bull.config.ts +72 -72
  87. package/src/config/config.module.ts +17 -17
  88. package/src/config/database.config.ts +48 -48
  89. package/src/config/redis.config.ts +55 -55
  90. package/src/constant/attribute.constant.ts +8 -8
  91. package/src/constant/db-data-type.constant.ts +160 -160
  92. package/src/constant/entity.constant.ts +3 -3
  93. package/src/constant/global.constant.ts +67 -67
  94. package/src/constant/status.constant.ts +3 -3
  95. package/src/core.module.ts +96 -96
  96. package/src/decorators/roles.decorator.ts +7 -7
  97. package/src/dtos/response.dto.ts +6 -6
  98. package/src/dtos/response.ts +5 -5
  99. package/src/index.ts +1 -1
  100. package/src/module/auth/auth.module.ts +65 -65
  101. package/src/module/auth/controller/auth.controller.ts +28 -28
  102. package/src/module/auth/dto/user.dto.ts +56 -56
  103. package/src/module/auth/guards/google-auth.guard.ts +9 -9
  104. package/src/module/auth/guards/jwt.guard.ts +22 -22
  105. package/src/module/auth/services/auth.service.ts +56 -56
  106. package/src/module/auth/services/jwt.service.ts +11 -11
  107. package/src/module/auth/strategies/google.strategy.ts +54 -54
  108. package/src/module/auth/strategies/jwt.strategy.ts +65 -65
  109. package/src/module/auth/strategies/local.strategy.ts +13 -13
  110. package/src/module/dashboard/controller/dashboard.controller.ts +38 -38
  111. package/src/module/dashboard/dashboard.module.ts +19 -19
  112. package/src/module/dashboard/entity/dashboard_page_data.entity.ts +23 -23
  113. package/src/module/dashboard/entity/widget_master.entity.ts +15 -15
  114. package/src/module/dashboard/repository/dashboard.repository.ts +49 -49
  115. package/src/module/dashboard/service/dashboard.service.ts +69 -69
  116. package/src/module/eav/EAV_USAGE_GUIDE.md +351 -351
  117. package/src/module/eav/controller/eav.controller.ts +119 -119
  118. package/src/module/eav/dto/eav-operation.dto.ts +62 -62
  119. package/src/module/eav/eav.module.ts +79 -79
  120. package/src/module/eav/entity/eav-boolean.entity.ts +25 -25
  121. package/src/module/eav/entity/eav-date.entity.ts +24 -24
  122. package/src/module/eav/entity/eav-decimal.entity.ts +24 -24
  123. package/src/module/eav/entity/eav-int.entity.ts +24 -24
  124. package/src/module/eav/entity/eav-json.entity.ts +24 -24
  125. package/src/module/eav/entity/eav-text.entity.ts +24 -24
  126. package/src/module/eav/entity/eav-time.entity.ts +24 -24
  127. package/src/module/eav/entity/eav-timestamp.entity.ts +24 -24
  128. package/src/module/eav/entity/eav-varchar.entity.ts +24 -24
  129. package/src/module/eav/interface/eav-strategy.interface.ts +32 -32
  130. package/src/module/eav/repository/eav-boolean.repository.ts +67 -67
  131. package/src/module/eav/repository/eav-date.repository.ts +67 -67
  132. package/src/module/eav/repository/eav-decimal.repository.ts +67 -67
  133. package/src/module/eav/repository/eav-int.repository.ts +67 -67
  134. package/src/module/eav/repository/eav-json.repository.ts +67 -67
  135. package/src/module/eav/repository/eav-text.repository.ts +67 -67
  136. package/src/module/eav/repository/eav-time.repository.ts +67 -67
  137. package/src/module/eav/repository/eav-timestamp.repository.ts +67 -67
  138. package/src/module/eav/repository/eav-varchar.repository.ts +67 -67
  139. package/src/module/eav/service/eav-boolean.service.ts +64 -64
  140. package/src/module/eav/service/eav-date.service.ts +64 -64
  141. package/src/module/eav/service/eav-decimal.service.ts +64 -64
  142. package/src/module/eav/service/eav-factory.service.ts +93 -93
  143. package/src/module/eav/service/eav-int.service.ts +64 -64
  144. package/src/module/eav/service/eav-json.service.ts +64 -64
  145. package/src/module/eav/service/eav-text.service.ts +64 -64
  146. package/src/module/eav/service/eav-time.service.ts +64 -64
  147. package/src/module/eav/service/eav-timestamp.service.ts +64 -64
  148. package/src/module/eav/service/eav-varchar.service.ts +65 -65
  149. package/src/module/eav/service/eav.service.ts +116 -116
  150. package/src/module/entity_json/controller/entity_json.controller.ts +75 -75
  151. package/src/module/entity_json/docs/FlatJson_Filterin_System.md +2803 -2803
  152. package/src/module/entity_json/entity/entityJson.entity.ts +42 -42
  153. package/src/module/entity_json/entity_json.module.ts +22 -22
  154. package/src/module/entity_json/service/entityJson.repository.ts +37 -37
  155. package/src/module/entity_json/service/entity_json.service.ts +492 -492
  156. package/src/module/export/controller/export.controller.ts +83 -83
  157. package/src/module/export/export.module.ts +14 -14
  158. package/src/module/export/service/export.service.ts +107 -107
  159. package/src/module/filter/controller/filter.controller.ts +214 -214
  160. package/src/module/filter/dto/filter-request.dto.ts +41 -41
  161. package/src/module/filter/entity/saved-filter-detail.entity.ts +37 -37
  162. package/src/module/filter/entity/saved-filter-master.entity.ts +30 -30
  163. package/src/module/filter/filter.module.ts +33 -33
  164. package/src/module/filter/repository/saved-filter.repository.ts +247 -249
  165. package/src/module/filter/repository/saved.filter-detail.repository.ts +19 -19
  166. package/src/module/filter/service/filter-evaluator.service.ts +82 -82
  167. package/src/module/filter/service/filter.service.ts +1722 -1752
  168. package/src/module/filter/service/saved-filter.service.ts +164 -164
  169. package/src/module/ics/controller/ics.controller.ts +21 -21
  170. package/src/module/ics/dto/ics.dto.ts +55 -55
  171. package/src/module/ics/ics.module.ts +13 -13
  172. package/src/module/ics/service/ics.service.ts +57 -57
  173. package/src/module/integration/controller/calender-event.controller.ts +31 -31
  174. package/src/module/integration/controller/integration.controller.ts +662 -662
  175. package/src/module/integration/controller/wrapper.controller.ts +37 -37
  176. package/src/module/integration/dto/create-config.dto.ts +526 -526
  177. package/src/module/integration/entity/integration-config.entity.ts +112 -112
  178. package/src/module/integration/entity/integration-entity-mapper.entity.ts +14 -14
  179. package/src/module/integration/entity/integration-source.entity.ts +17 -17
  180. package/src/module/integration/entity/user-integration.entity.ts +71 -71
  181. package/src/module/integration/examples/usage.example.ts +338 -338
  182. package/src/module/integration/factories/base.factory.ts +7 -7
  183. package/src/module/integration/factories/email.factory.ts +49 -49
  184. package/src/module/integration/factories/integration.factory.ts +121 -121
  185. package/src/module/integration/factories/sms.factory.ts +51 -51
  186. package/src/module/integration/factories/telephone.factory.ts +41 -41
  187. package/src/module/integration/factories/whatsapp.factory.ts +56 -56
  188. package/src/module/integration/integration.module.ts +110 -110
  189. package/src/module/integration/service/calendar-event.service.ts +118 -118
  190. package/src/module/integration/service/integration-entity-mapper.service.ts +17 -17
  191. package/src/module/integration/service/integration-queue.service.ts +229 -229
  192. package/src/module/integration/service/integration.service.ts +2632 -2651
  193. package/src/module/integration/service/oauth.service.ts +224 -226
  194. package/src/module/integration/service/wrapper.service.ts +753 -754
  195. package/src/module/integration/strategies/email/gmail-api.strategy.ts +281 -307
  196. package/src/module/integration/strategies/email/outlook-api.strategy.ts +44 -44
  197. package/src/module/integration/strategies/email/outlook.strategy.ts +64 -64
  198. package/src/module/integration/strategies/email/sendgrid-api.strategy.ts +260 -263
  199. package/src/module/integration/strategies/integration.strategy.ts +97 -97
  200. package/src/module/integration/strategies/sms/gupshup-sms.strategy.ts +146 -146
  201. package/src/module/integration/strategies/sms/msg91-sms.strategy.ts +164 -164
  202. package/src/module/integration/strategies/sms/tubelight-sms.strategy.ts +163 -163
  203. package/src/module/integration/strategies/telephone/ozonetel-voice.strategy.ts +238 -238
  204. package/src/module/integration/strategies/telephone/tubelight-voice.strategy.ts +210 -210
  205. package/src/module/integration/strategies/whatsapp/gupshup-whatsapp.strategy.ts +359 -359
  206. package/src/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.ts +372 -372
  207. package/src/module/integration/strategies/whatsapp/whatsapp-cloud.strategy.ts +403 -403
  208. package/src/module/integration/strategies/whatsapp/whatsapp.strategy.ts +57 -57
  209. package/src/module/layout/controller/layout.controller.ts +38 -38
  210. package/src/module/layout/entity/header-items.entity.ts +28 -28
  211. package/src/module/layout/entity/header-section.entity.ts +13 -13
  212. package/src/module/layout/layout.module.ts +20 -20
  213. package/src/module/layout/repository/header-items.repository.ts +18 -18
  214. package/src/module/layout/repository/header-section.repository.ts +16 -16
  215. package/src/module/layout/service/header-section.service.ts +25 -25
  216. package/src/module/layout_preference/controller/layout_preference.controller.ts +76 -76
  217. package/src/module/layout_preference/entity/layout_preference.entity.ts +28 -28
  218. package/src/module/layout_preference/layout_preference.module.ts +22 -22
  219. package/src/module/layout_preference/repository/layout_preference.repository.ts +65 -65
  220. package/src/module/layout_preference/service/layout_preference.service.ts +191 -191
  221. package/src/module/linked_attributes/controller/linked_attributes.controller.ts +137 -137
  222. package/src/module/linked_attributes/dto/create-linked-attribute-smart.dto.ts +54 -54
  223. package/src/module/linked_attributes/entity/linked_attribute.entity.ts +51 -51
  224. package/src/module/linked_attributes/linked_attributes.module.ts +23 -23
  225. package/src/module/linked_attributes/repository/linked_attribute.repository.ts +12 -12
  226. package/src/module/linked_attributes/service/linked_attributes.service.ts +650 -650
  227. package/src/module/linked_attributes/test/linked-attributes.service.spec.ts +244 -244
  228. package/src/module/listmaster/controller/list-master.controller.ts +226 -215
  229. package/src/module/listmaster/entity/list-master-items.entity.ts +30 -30
  230. package/src/module/listmaster/entity/list-master.entity.ts +25 -25
  231. package/src/module/listmaster/listmaster.module.ts +46 -46
  232. package/src/module/listmaster/repository/list-master-items.repository.ts +262 -262
  233. package/src/module/listmaster/repository/list-master.repository.ts +60 -60
  234. package/src/module/listmaster/service/list-master-engine.ts +19 -19
  235. package/src/module/listmaster/service/list-master-extension.interface.ts +4 -4
  236. package/src/module/listmaster/service/list-master-item.service.ts +382 -382
  237. package/src/module/listmaster/service/list-master-registry.ts +15 -15
  238. package/src/module/listmaster/service/list-master.service.ts +760 -774
  239. package/src/module/mapper/controller/field-mapper.controller.ts +76 -76
  240. package/src/module/mapper/controller/mapper.controller.ts +20 -20
  241. package/src/module/mapper/dto/field-mapper.dto.ts +14 -14
  242. package/src/module/mapper/entity/field-lovs.entity.ts +15 -15
  243. package/src/module/mapper/entity/field-mapper.entity.ts +49 -49
  244. package/src/module/mapper/entity/mapper.entity.ts +9 -9
  245. package/src/module/mapper/mapper.module.ts +35 -35
  246. package/src/module/mapper/repository/field-lovs.repository.ts +35 -35
  247. package/src/module/mapper/repository/field-mapper.repository.ts +42 -42
  248. package/src/module/mapper/repository/mapper.repository.ts +32 -32
  249. package/src/module/mapper/service/field-mapper.service.ts +268 -268
  250. package/src/module/mapper/service/mapper.service.ts +80 -80
  251. package/src/module/master/controller/master.controller.ts +71 -71
  252. package/src/module/master/service/master.service.ts +460 -460
  253. package/src/module/master/service/poupulate-meta.service.ts +210 -210
  254. package/src/module/meta/controller/attribute-master.controller.ts +83 -83
  255. package/src/module/meta/controller/entity-dynamic.controller.ts +123 -123
  256. package/src/module/meta/controller/entity-master.controller.ts +41 -41
  257. package/src/module/meta/controller/entity-relation.controller.ts +36 -36
  258. package/src/module/meta/controller/entity.controller.ts +301 -301
  259. package/src/module/meta/controller/entity.public.controller.ts +76 -76
  260. package/src/module/meta/controller/media.controller.ts +135 -162
  261. package/src/module/meta/controller/meta.controller.ts +80 -80
  262. package/src/module/meta/controller/view-master.controller.ts +79 -79
  263. package/src/module/meta/dto/entity-list-data.dto.ts +6 -6
  264. package/src/module/meta/dto/entity-tab.dto.ts +4 -4
  265. package/src/module/meta/dto/entity-table.dto.ts +12 -12
  266. package/src/module/meta/entity/attribute-master.entity.ts +62 -62
  267. package/src/module/meta/entity/base-entity.entity.ts +52 -52
  268. package/src/module/meta/entity/dynamic.entity.ts +5 -5
  269. package/src/module/meta/entity/entity-master.entity.ts +53 -53
  270. package/src/module/meta/entity/entity-relation-data.entity.ts +24 -24
  271. package/src/module/meta/entity/entity-relation.entity.ts +18 -18
  272. package/src/module/meta/entity/entity-table-column.entity.ts +56 -56
  273. package/src/module/meta/entity/entity-table.entity.ts +45 -45
  274. package/src/module/meta/entity/media-data.entity.ts +32 -35
  275. package/src/module/meta/entity/preference.entity.ts +57 -57
  276. package/src/module/meta/entity/view-master.entity.ts +36 -36
  277. package/src/module/meta/entity.module.ts +153 -153
  278. package/src/module/meta/repository/attribute-master.repository.ts +206 -206
  279. package/src/module/meta/repository/entity-attribute-update.repository.ts +48 -48
  280. package/src/module/meta/repository/entity-master.repository.ts +120 -120
  281. package/src/module/meta/repository/entity-relation.repository.ts +36 -36
  282. package/src/module/meta/repository/entity-table-column.repository.ts +39 -39
  283. package/src/module/meta/repository/entity-table.repository.ts +53 -53
  284. package/src/module/meta/repository/media-data.repository.ts +50 -50
  285. package/src/module/meta/repository/preference.repository.ts +20 -20
  286. package/src/module/meta/repository/user-app-mapping.repository.ts +28 -28
  287. package/src/module/meta/repository/view-master.repository.ts +42 -42
  288. package/src/module/meta/service/attribute-master.service.ts +329 -329
  289. package/src/module/meta/service/common.service.ts +9 -9
  290. package/src/module/meta/service/entity-attribute-update.service.ts +26 -26
  291. package/src/module/meta/service/entity-dynamic.service.ts +1037 -1038
  292. package/src/module/meta/service/entity-master.service.ts +288 -288
  293. package/src/module/meta/service/entity-realation-data.service.ts +9 -9
  294. package/src/module/meta/service/entity-relation.service.ts +85 -85
  295. package/src/module/meta/service/entity-service-impl.service.ts +390 -390
  296. package/src/module/meta/service/entity-table-column.service.ts +26 -26
  297. package/src/module/meta/service/entity-table.service.ts +142 -144
  298. package/src/module/meta/service/entity-validation.service.ts +187 -187
  299. package/src/module/meta/service/entity.service.ts +48 -48
  300. package/src/module/meta/service/field-group.service.ts +103 -103
  301. package/src/module/meta/service/media-data.service.ts +385 -397
  302. package/src/module/meta/service/preference.service.ts +16 -16
  303. package/src/module/meta/service/resolver.service.ts +260 -293
  304. package/src/module/meta/service/section-master.service.ts +104 -104
  305. package/src/module/meta/service/update-form-json.service.ts +22 -22
  306. package/src/module/meta/service/user-app-mapping.service.ts +17 -17
  307. package/src/module/meta/service/view-master.service.ts +127 -127
  308. package/src/module/microservice-client/microservice-clients.module.ts +13 -13
  309. package/src/module/microservice-client/service/microservice-client-factory.ts +37 -37
  310. package/src/module/microservice-client/service/microservice-clients.ts +4 -4
  311. package/src/module/notification/controller/notification.controller.ts +58 -58
  312. package/src/module/notification/entity/notification.entity.ts +76 -76
  313. package/src/module/notification/entity/otp.entity.ts +28 -28
  314. package/src/module/notification/firebase-admin.config.ts +22 -22
  315. package/src/module/notification/notification.module.ts +63 -65
  316. package/src/module/notification/repository/otp.repository.ts +27 -27
  317. package/src/module/notification/service/email.service.ts +142 -142
  318. package/src/module/notification/service/notification.service.ts +163 -145
  319. package/src/module/preference_master/entity/preference.entity.ts +25 -25
  320. package/src/module/preference_master/preference.service.ts +27 -27
  321. package/src/module/preference_master/repo/preference.repository.ts +36 -36
  322. package/src/module/third-party-module/entity/third-party-api-registry.entity.ts +52 -52
  323. package/src/module/third-party-module/repository/third-party-api-registry.repository.ts +20 -20
  324. package/src/module/third-party-module/service/api-registry.service.ts +13 -13
  325. package/src/module/third-party-module/third-party.module.ts +12 -12
  326. package/src/module/workflow/controller/action-category.controller.ts +54 -54
  327. package/src/module/workflow/controller/action-resource-mapping.controller.ts +23 -23
  328. package/src/module/workflow/controller/action-template-mapping.controller.ts +35 -35
  329. package/src/module/workflow/controller/action.controller.ts +111 -111
  330. package/src/module/workflow/controller/activity-log.controller.ts +55 -55
  331. package/src/module/workflow/controller/comm-template.controller.ts +43 -43
  332. package/src/module/workflow/controller/entity-modification.controller.ts +35 -35
  333. package/src/module/workflow/controller/form-master.controller.ts +43 -43
  334. package/src/module/workflow/controller/stage-group.controller.ts +49 -49
  335. package/src/module/workflow/controller/stage.controller.ts +51 -51
  336. package/src/module/workflow/controller/task.controller.ts +77 -77
  337. package/src/module/workflow/controller/workflow-list-master.controller.ts +44 -44
  338. package/src/module/workflow/controller/workflow-meta.controller.ts +80 -80
  339. package/src/module/workflow/controller/workflow.controller.ts +66 -66
  340. package/src/module/workflow/entity/action-category.entity.ts +33 -33
  341. package/src/module/workflow/entity/action-data.entity.ts +51 -51
  342. package/src/module/workflow/entity/action-resources-mapping.entity.ts +21 -21
  343. package/src/module/workflow/entity/action-template-mapping.entity.ts +12 -12
  344. package/src/module/workflow/entity/action.entity.ts +48 -48
  345. package/src/module/workflow/entity/activity-log.entity.ts +39 -39
  346. package/src/module/workflow/entity/comm-template.entity.ts +38 -38
  347. package/src/module/workflow/entity/entity-modification.entity.ts +33 -33
  348. package/src/module/workflow/entity/form.entity.ts +21 -21
  349. package/src/module/workflow/entity/stage-action-mapping.entity.ts +12 -12
  350. package/src/module/workflow/entity/stage-group.entity.ts +18 -18
  351. package/src/module/workflow/entity/stage-movement-data.entity.ts +33 -33
  352. package/src/module/workflow/entity/stage.entity.ts +15 -15
  353. package/src/module/workflow/entity/task-data.entity.ts +84 -84
  354. package/src/module/workflow/entity/template-attach-mapper.entity.ts +30 -30
  355. package/src/module/workflow/entity/workflow-data.entity.ts +6 -6
  356. package/src/module/workflow/entity/workflow-level-mapping.entity.ts +18 -18
  357. package/src/module/workflow/entity/workflow.entity.ts +15 -15
  358. package/src/module/workflow/repository/action-category.repository.ts +78 -78
  359. package/src/module/workflow/repository/action-data.repository.ts +345 -353
  360. package/src/module/workflow/repository/action.repository.ts +339 -339
  361. package/src/module/workflow/repository/activity-log.repository.ts +148 -148
  362. package/src/module/workflow/repository/comm-template.repository.ts +157 -157
  363. package/src/module/workflow/repository/form-master.repository.ts +50 -50
  364. package/src/module/workflow/repository/stage-group.repository.ts +186 -186
  365. package/src/module/workflow/repository/stage-movement.repository.ts +217 -217
  366. package/src/module/workflow/repository/stage.repository.ts +160 -160
  367. package/src/module/workflow/repository/task.repository.ts +154 -156
  368. package/src/module/workflow/repository/workflow.repository.ts +42 -42
  369. package/src/module/workflow/service/action-category.service.ts +32 -32
  370. package/src/module/workflow/service/action-data.service.ts +62 -62
  371. package/src/module/workflow/service/action-resources-mapping.service.ts +10 -10
  372. package/src/module/workflow/service/action-template-mapping.service.ts +137 -137
  373. package/src/module/workflow/service/action.service.ts +300 -300
  374. package/src/module/workflow/service/activity-log.service.ts +106 -106
  375. package/src/module/workflow/service/comm-template.service.ts +179 -179
  376. package/src/module/workflow/service/entity-modification.service.ts +55 -63
  377. package/src/module/workflow/service/form-master.service.ts +35 -35
  378. package/src/module/workflow/service/populate-workflow.service.ts +313 -313
  379. package/src/module/workflow/service/stage-action-mapping.service.ts +5 -5
  380. package/src/module/workflow/service/stage-group.service.ts +325 -325
  381. package/src/module/workflow/service/stage.service.ts +196 -196
  382. package/src/module/workflow/service/task.service.ts +547 -546
  383. package/src/module/workflow/service/workflow-list-master.service.ts +68 -68
  384. package/src/module/workflow/service/workflow-meta.service.ts +638 -638
  385. package/src/module/workflow/service/workflow.service.ts +212 -212
  386. package/src/module/workflow/workflow.module.ts +180 -180
  387. package/src/module/workflow-automation/SCHEDULING_GUIDE.md +145 -145
  388. package/src/module/workflow-automation/controller/workflow-automation.controller.ts +43 -43
  389. package/src/module/workflow-automation/entity/workflow-automation-action.entity.ts +26 -26
  390. package/src/module/workflow-automation/entity/workflow-automation.entity.ts +35 -35
  391. package/src/module/workflow-automation/interface/action.decorator.ts +7 -7
  392. package/src/module/workflow-automation/interface/action.interface.ts +5 -5
  393. package/src/module/workflow-automation/service/action-registery.service.ts +35 -35
  394. package/src/module/workflow-automation/service/schedule-handler.service.ts +167 -167
  395. package/src/module/workflow-automation/service/workflow-automation-engine.service.ts +219 -219
  396. package/src/module/workflow-automation/service/workflow-automation.service.ts +486 -486
  397. package/src/module/workflow-automation/workflow-automation.module.ts +55 -55
  398. package/src/module/workflow-schedule/INSTALLATION.md +244 -244
  399. package/src/module/workflow-schedule/MULTI_PROJECT_GUIDE.md +196 -196
  400. package/src/module/workflow-schedule/README.md +422 -422
  401. package/src/module/workflow-schedule/constants/schedule.constants.ts +48 -48
  402. package/src/module/workflow-schedule/controller/workflow-schedule.controller.ts +253 -253
  403. package/src/module/workflow-schedule/docs/CLAUDE_CODE_GUIDE.md +510 -510
  404. package/src/module/workflow-schedule/docs/CLAUDE_CODE_PROMPT.md +362 -362
  405. package/src/module/workflow-schedule/docs/RUN_CLAUDE_CODE.sh +68 -68
  406. package/src/module/workflow-schedule/dto/create-schedule.dto.ts +147 -147
  407. package/src/module/workflow-schedule/dto/get-execution-logs.dto.ts +119 -119
  408. package/src/module/workflow-schedule/dto/update-schedule.dto.ts +96 -96
  409. package/src/module/workflow-schedule/entities/scheduled-workflow.entity.ts +148 -148
  410. package/src/module/workflow-schedule/entities/workflow-execution-log.entity.ts +154 -154
  411. package/src/module/workflow-schedule/interfaces/schedule-job-data.interface.ts +51 -51
  412. package/src/module/workflow-schedule/interfaces/workflow-schedule-options.interface.ts +12 -12
  413. package/src/module/workflow-schedule/processors/schedule.processor.ts +616 -616
  414. package/src/module/workflow-schedule/service/workflow-schedule.service.ts +588 -588
  415. package/src/module/workflow-schedule/workflow-schedule.module.ts +67 -67
  416. package/src/resources/dev.properties.yaml +33 -33
  417. package/src/resources/local.properties.yaml +27 -27
  418. package/src/resources/properties.module.ts +12 -12
  419. package/src/resources/properties.yaml.ts +11 -11
  420. package/src/resources/uat.properties.yaml +31 -31
  421. package/src/table.config.ts +123 -123
  422. package/src/utils/dto/excel-data.dto.ts +14 -14
  423. package/src/utils/dto/excelsheet-data.dto.ts +5 -5
  424. package/src/utils/service/base64util.service.ts +18 -18
  425. package/src/utils/service/clockIDGenUtil.service.ts +21 -21
  426. package/src/utils/service/codeGenerator.service.ts +22 -22
  427. package/src/utils/service/dateUtil.service.ts +17 -17
  428. package/src/utils/service/encryptUtil.service.ts +97 -97
  429. package/src/utils/service/excel-helper.service.ts +72 -72
  430. package/src/utils/service/excelUtil.service.ts +15 -15
  431. package/src/utils/service/file-util.service.ts +11 -11
  432. package/src/utils/service/json-util.service.ts +23 -23
  433. package/src/utils/service/loggingUtil.service.ts +88 -88
  434. package/src/utils/service/reflection-helper.service.ts +62 -62
  435. package/src/utils/service/wbsCodeGen.service.ts +8 -8
  436. package/src/utils/utils.module.ts +27 -27
  437. package/tsconfig.build.json +4 -4
  438. package/tsconfig.json +24 -24
  439. package/.idea/250218_ether_core.iml +0 -12
  440. package/.idea/codeStyles/Project.xml +0 -59
  441. package/.idea/codeStyles/codeStyleConfig.xml +0 -5
  442. package/.idea/modules.xml +0 -8
  443. package/.idea/vcs.xml +0 -6
  444. package/dist/module/notification/repository/notification.repository.d.ts +0 -7
  445. package/dist/module/notification/repository/notification.repository.js +0 -43
  446. package/dist/module/notification/repository/notification.repository.js.map +0 -1
  447. 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
+ ```