rez_core 7.1.3 → 7.1.4

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