rez_core 7.1.1 → 7.1.2

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