rez_core 5.0.181 → 6.5.0
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.
- package/.claude/settings.local.json +26 -0
- package/.idea/250218_nodejs_core.iml +8 -11
- package/.idea/codeStyles/Project.xml +58 -58
- package/.idea/codeStyles/codeStyleConfig.xml +4 -4
- package/.idea/copilot.data.migration.agent.xml +6 -0
- package/.idea/copilot.data.migration.ask.xml +6 -0
- package/.idea/copilot.data.migration.ask2agent.xml +6 -0
- package/.idea/copilot.data.migration.edit.xml +6 -0
- package/.idea/inspectionProfiles/Project_Default.xml +1 -1
- package/.idea/misc.xml +6 -0
- package/.idea/modules.xml +7 -7
- package/.idea/prettier.xml +5 -5
- package/.idea/vcs.xml +5 -5
- package/.prettierrc +3 -3
- package/README.md +99 -99
- package/dist/module/auth/guards/role.guard.js +3 -3
- package/dist/module/enterprise/controller/enterprise.controller.d.ts +12 -0
- package/dist/module/enterprise/controller/enterprise.controller.js +57 -0
- package/dist/module/enterprise/controller/enterprise.controller.js.map +1 -0
- package/dist/module/enterprise/controller/organization.controller.d.ts +11 -1
- package/dist/module/enterprise/controller/organization.controller.js +62 -2
- package/dist/module/enterprise/controller/organization.controller.js.map +1 -1
- package/dist/module/enterprise/enterprise.module.js +2 -1
- package/dist/module/enterprise/enterprise.module.js.map +1 -1
- package/dist/module/enterprise/entity/enterprise.entity.d.ts +1 -3
- package/dist/module/enterprise/entity/enterprise.entity.js +4 -12
- package/dist/module/enterprise/entity/enterprise.entity.js.map +1 -1
- package/dist/module/enterprise/entity/organization.entity.d.ts +1 -17
- package/dist/module/enterprise/entity/organization.entity.js +4 -72
- package/dist/module/enterprise/entity/organization.entity.js.map +1 -1
- package/dist/module/enterprise/repository/enterprise.repository.d.ts +2 -2
- package/dist/module/enterprise/repository/enterprise.repository.js +9 -4
- package/dist/module/enterprise/repository/enterprise.repository.js.map +1 -1
- package/dist/module/enterprise/service/enterprise.service.d.ts +2 -2
- package/dist/module/enterprise/service/enterprise.service.js +4 -4
- package/dist/module/enterprise/service/enterprise.service.js.map +1 -1
- package/dist/module/enterprise/service/organization.service.d.ts +2 -2
- package/dist/module/enterprise/service/organization.service.js +97 -20
- package/dist/module/enterprise/service/organization.service.js.map +1 -1
- package/dist/module/filter/entity/saved-filter-master.entity.d.ts +1 -0
- package/dist/module/filter/entity/saved-filter-master.entity.js +4 -0
- package/dist/module/filter/entity/saved-filter-master.entity.js.map +1 -1
- package/dist/module/filter/repository/saved-filter.repository.js +2 -0
- package/dist/module/filter/repository/saved-filter.repository.js.map +1 -1
- package/dist/module/filter/service/filter.service.js +19 -19
- package/dist/module/integration/examples/usage.example.js +9 -9
- package/dist/module/meta/repository/attribute-master.repository.js +8 -8
- package/dist/module/meta/service/entity-dynamic.service.js +16 -16
- package/dist/module/meta/service/media-data.service.js +6 -6
- package/dist/module/meta/service/resolver.service.js +11 -11
- package/dist/module/module/repository/menu.repository.js +4 -4
- package/dist/module/notification/service/notification.service.js +6 -6
- package/dist/module/user/controller/login.controller.js +18 -18
- package/dist/module/workflow/repository/action.repository.js +2 -2
- package/dist/module/workflow/repository/stage.repository.js +8 -8
- package/dist/module/workflow/service/action-template-mapping.service.js +2 -2
- package/dist/module/workflow/service/action.service.js +5 -5
- package/dist/module/workflow/service/entity-modification.service.js +2 -2
- package/dist/module/workflow/service/task.service.js +8 -8
- package/dist/module/workflow-automation/service/schedule-handler.service.js +9 -9
- package/dist/table.config.d.ts +1 -2
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/dist/utils/service/reflection-helper.service.js +2 -2
- package/docs/modules/event-driven-integration-design.md +91 -91
- package/docs/modules/integration.md +250 -250
- package/eslint.config.mjs +34 -34
- package/nest-cli.json +14 -14
- package/package.json +125 -125
- package/server.log +850 -0
- package/src/app.controller.ts +12 -12
- package/src/app.module.ts +68 -68
- package/src/app.service.ts +8 -8
- package/src/config/bull.config.ts +69 -69
- package/src/config/config.module.ts +17 -17
- package/src/config/database.config.ts +48 -48
- package/src/constant/global.constant.ts +67 -67
- package/src/core.module.ts +94 -94
- package/src/decorators/roles.decorator.ts +7 -7
- package/src/dtos/response.dto.ts +6 -6
- package/src/dtos/response.ts +5 -5
- package/src/index.ts +1 -1
- package/src/module/auth/auth.module.ts +49 -49
- package/src/module/auth/controller/auth.controller.ts +28 -28
- package/src/module/auth/guards/google-auth.guard.ts +9 -9
- package/src/module/auth/guards/jwt.guard.ts +22 -22
- package/src/module/auth/guards/role.guard.ts +68 -68
- package/src/module/auth/services/auth.service.ts +56 -56
- package/src/module/auth/services/jwt.service.ts +11 -11
- package/src/module/auth/strategies/google.strategy.ts +54 -54
- package/src/module/auth/strategies/jwt.strategy.ts +58 -58
- package/src/module/auth/strategies/local.strategy.ts +13 -13
- package/src/module/dashboard/controller/dashboard.controller.ts +38 -38
- package/src/module/dashboard/dashboard.module.ts +21 -21
- package/src/module/dashboard/entity/dashboard_page_data.entity.ts +27 -27
- package/src/module/dashboard/entity/widget_master.entity.ts +18 -18
- package/src/module/dashboard/repository/dashboard.repository.ts +49 -49
- package/src/module/dashboard/service/dashboard.service.ts +72 -72
- package/src/module/enterprise/controller/enterprise.controller.ts +40 -0
- package/src/module/enterprise/controller/organization.controller.ts +93 -36
- package/src/module/enterprise/enterprise.module.ts +46 -45
- package/src/module/enterprise/entity/enterprise.entity.ts +31 -37
- package/src/module/enterprise/entity/organization-app-mapping.entity.ts +13 -13
- package/src/module/enterprise/entity/organization.entity.ts +40 -92
- package/src/module/enterprise/repository/enterprise.repository.ts +39 -31
- package/src/module/enterprise/repository/organization.repository.ts +26 -26
- package/src/module/enterprise/repository/school.repository.ts +272 -272
- package/src/module/enterprise/service/brand.service.ts +5 -5
- package/src/module/enterprise/service/enterprise.service.ts +22 -16
- package/src/module/enterprise/service/organization-app-mapping.service.ts +4 -4
- package/src/module/enterprise/service/organization.service.ts +262 -145
- package/src/module/entity_json/controller/entity_json.controller.ts +47 -47
- package/src/module/entity_json/entity/entityJson.entity.ts +39 -39
- package/src/module/entity_json/entity_json.module.ts +18 -18
- package/src/module/entity_json/service/entityJson.repository.ts +37 -37
- package/src/module/entity_json/service/entity_json.service.ts +241 -241
- package/src/module/export/controller/export.controller.ts +83 -83
- package/src/module/export/export.module.ts +14 -14
- package/src/module/export/service/export.service.ts +105 -105
- package/src/module/filter/controller/filter.controller.ts +87 -87
- package/src/module/filter/dto/filter-request.dto.ts +39 -39
- package/src/module/filter/entity/saved-filter-detail.entity.ts +41 -41
- package/src/module/filter/entity/saved-filter-master.entity.ts +35 -32
- package/src/module/filter/filter.module.ts +33 -33
- package/src/module/filter/repository/saved-filter.repository.ts +247 -258
- package/src/module/filter/repository/saved.filter-detail.repository.ts +19 -19
- package/src/module/filter/service/filter-evaluator.service.ts +82 -82
- package/src/module/filter/service/filter.service.ts +1316 -1316
- package/src/module/filter/service/saved-filter.service.ts +164 -164
- package/src/module/ics/controller/ics.controller.ts +21 -21
- package/src/module/ics/dto/ics.dto.ts +55 -55
- package/src/module/ics/ics.module.ts +13 -13
- package/src/module/ics/service/ics.service.ts +57 -57
- package/src/module/integration/controller/calender-event.controller.ts +31 -31
- package/src/module/integration/controller/integration.controller.ts +662 -662
- package/src/module/integration/controller/wrapper.controller.ts +37 -37
- package/src/module/integration/dto/create-config.dto.ts +526 -526
- package/src/module/integration/entity/integration-config.entity.ts +112 -112
- package/src/module/integration/entity/integration-entity-mapper.entity.ts +14 -14
- package/src/module/integration/entity/integration-source.entity.ts +17 -17
- package/src/module/integration/entity/user-integration.entity.ts +71 -71
- package/src/module/integration/examples/usage.example.ts +338 -338
- package/src/module/integration/factories/base.factory.ts +7 -7
- package/src/module/integration/factories/email.factory.ts +49 -49
- package/src/module/integration/factories/integration.factory.ts +121 -121
- package/src/module/integration/factories/sms.factory.ts +51 -51
- package/src/module/integration/factories/telephone.factory.ts +41 -41
- package/src/module/integration/factories/whatsapp.factory.ts +56 -56
- package/src/module/integration/integration.module.ts +110 -110
- package/src/module/integration/service/calendar-event.service.ts +118 -118
- package/src/module/integration/service/integration-entity-mapper.service.ts +17 -17
- package/src/module/integration/service/integration-queue.service.ts +229 -229
- package/src/module/integration/service/integration.service.ts +2634 -2634
- package/src/module/integration/service/oauth.service.ts +224 -224
- package/src/module/integration/service/wrapper.service.ts +753 -753
- package/src/module/integration/strategies/email/gmail-api.strategy.ts +280 -280
- package/src/module/integration/strategies/email/outlook-api.strategy.ts +44 -44
- package/src/module/integration/strategies/email/outlook.strategy.ts +64 -64
- package/src/module/integration/strategies/email/sendgrid-api.strategy.ts +260 -260
- package/src/module/integration/strategies/integration.strategy.ts +97 -97
- package/src/module/integration/strategies/sms/gupshup-sms.strategy.ts +146 -146
- package/src/module/integration/strategies/sms/msg91-sms.strategy.ts +164 -164
- package/src/module/integration/strategies/sms/tubelight-sms.strategy.ts +163 -163
- package/src/module/integration/strategies/telephone/ozonetel-voice.strategy.ts +238 -238
- package/src/module/integration/strategies/telephone/tubelight-voice.strategy.ts +210 -210
- package/src/module/integration/strategies/whatsapp/gupshup-whatsapp.strategy.ts +359 -359
- package/src/module/integration/strategies/whatsapp/tubelight-whatsapp.strategy.ts +372 -372
- package/src/module/integration/strategies/whatsapp/whatsapp-cloud.strategy.ts +403 -403
- package/src/module/integration/strategies/whatsapp/whatsapp.strategy.ts +57 -57
- package/src/module/layout/controller/layout.controller.ts +47 -47
- package/src/module/layout/entity/header-items.entity.ts +28 -28
- package/src/module/layout/entity/header-section.entity.ts +19 -19
- package/src/module/layout/layout.module.ts +21 -21
- package/src/module/layout/repository/header-items.repository.ts +18 -18
- package/src/module/layout/repository/header-section.repository.ts +22 -22
- package/src/module/layout/service/header-section.service.ts +25 -25
- package/src/module/layout_preference/controller/layout_preference.controller.ts +76 -76
- package/src/module/layout_preference/entity/layout_preference.entity.ts +28 -28
- package/src/module/layout_preference/layout_preference.module.ts +22 -22
- package/src/module/layout_preference/repository/layout_preference.repository.ts +65 -65
- package/src/module/layout_preference/service/layout_preference.service.ts +191 -191
- package/src/module/lead/controller/lead.controller.ts +30 -30
- package/src/module/lead/lead.module.ts +14 -14
- package/src/module/lead/repository/lead.repository.ts +41 -41
- package/src/module/lead/service/lead.service.ts +54 -54
- package/src/module/linked_attributes/controller/linked_attributes.controller.ts +37 -37
- package/src/module/linked_attributes/entity/linked_attribute.entity.ts +51 -51
- package/src/module/linked_attributes/linked_attributes.module.ts +16 -16
- package/src/module/linked_attributes/repository/linked_attribute.repository.ts +12 -12
- package/src/module/linked_attributes/service/linked_attributes.service.ts +73 -73
- package/src/module/listmaster/controller/list-master.controller.ts +230 -230
- package/src/module/listmaster/entity/list-master-items.entity.ts +43 -43
- package/src/module/listmaster/entity/list-master.entity.ts +33 -33
- package/src/module/listmaster/listmaster.module.ts +46 -46
- package/src/module/listmaster/repository/list-master-items.repository.ts +173 -173
- package/src/module/listmaster/repository/list-master.repository.ts +56 -56
- package/src/module/listmaster/service/list-master-engine.ts +19 -19
- package/src/module/listmaster/service/list-master-extension.interface.ts +4 -4
- package/src/module/listmaster/service/list-master-item.service.ts +280 -280
- package/src/module/listmaster/service/list-master-registry.ts +15 -15
- package/src/module/listmaster/service/list-master.service.ts +527 -527
- package/src/module/mapper/controller/field-mapper.controller.ts +76 -76
- package/src/module/mapper/controller/mapper.controller.ts +20 -20
- package/src/module/mapper/dto/field-mapper.dto.ts +14 -14
- package/src/module/mapper/entity/field-lovs.entity.ts +19 -19
- package/src/module/mapper/entity/field-mapper.entity.ts +53 -53
- package/src/module/mapper/entity/mapper.entity.ts +16 -16
- package/src/module/mapper/mapper.module.ts +35 -35
- package/src/module/mapper/repository/field-lovs.repository.ts +35 -35
- package/src/module/mapper/repository/field-mapper.repository.ts +42 -42
- package/src/module/mapper/repository/mapper.repository.ts +32 -32
- package/src/module/mapper/service/field-mapper.service.ts +269 -269
- package/src/module/mapper/service/mapper.service.ts +80 -80
- package/src/module/master/controller/master.controller.ts +74 -74
- package/src/module/master/service/master.service.ts +484 -484
- package/src/module/meta/controller/app-master.controller.ts +38 -38
- package/src/module/meta/controller/attribute-master.controller.ts +84 -84
- package/src/module/meta/controller/entity-dynamic.controller.ts +125 -125
- package/src/module/meta/controller/entity-master.controller.ts +41 -41
- package/src/module/meta/controller/entity-relation.controller.ts +36 -36
- package/src/module/meta/controller/entity.controller.ts +308 -308
- package/src/module/meta/controller/entity.public.controller.ts +75 -75
- package/src/module/meta/controller/media.controller.ts +135 -135
- package/src/module/meta/controller/meta.controller.ts +101 -101
- package/src/module/meta/controller/view-master.controller.ts +79 -79
- package/src/module/meta/dto/entity-list-data.dto.ts +6 -6
- package/src/module/meta/dto/entity-tab.dto.ts +4 -4
- package/src/module/meta/dto/entity-table.dto.ts +12 -12
- package/src/module/meta/entity/app-master.entity.ts +37 -37
- package/src/module/meta/entity/attribute-master.entity.ts +92 -92
- package/src/module/meta/entity/base-entity.entity.ts +75 -75
- package/src/module/meta/entity/entity-master.entity.ts +85 -85
- package/src/module/meta/entity/entity-relation-data.entity.ts +29 -29
- package/src/module/meta/entity/entity-relation.entity.ts +23 -23
- package/src/module/meta/entity/entity-table-column.entity.ts +61 -61
- package/src/module/meta/entity/entity-table.entity.ts +50 -50
- package/src/module/meta/entity/media-data.entity.ts +32 -32
- package/src/module/meta/entity/preference.entity.ts +62 -62
- package/src/module/meta/entity/view-master.entity.ts +41 -41
- package/src/module/meta/entity.module.ts +165 -165
- package/src/module/meta/repository/app-master.repository.ts +20 -20
- package/src/module/meta/repository/attribute-master.repository.ts +164 -164
- package/src/module/meta/repository/entity-attribute-update.repository.ts +48 -48
- package/src/module/meta/repository/entity-master.repository.ts +120 -120
- package/src/module/meta/repository/entity-relation.repository.ts +22 -22
- package/src/module/meta/repository/entity-table-column.repository.ts +39 -39
- package/src/module/meta/repository/entity-table.repository.ts +53 -53
- package/src/module/meta/repository/media-data.repository.ts +50 -50
- package/src/module/meta/repository/preference.repository.ts +20 -20
- package/src/module/meta/repository/user-app-mapping.repository.ts +28 -28
- package/src/module/meta/repository/view-master.repository.ts +42 -42
- package/src/module/meta/service/app-master.service.ts +37 -37
- package/src/module/meta/service/attribute-master.service.ts +132 -132
- package/src/module/meta/service/common.service.ts +9 -9
- package/src/module/meta/service/entity-attribute-update.service.ts +26 -26
- package/src/module/meta/service/entity-dynamic.service.ts +824 -824
- package/src/module/meta/service/entity-master.service.ts +171 -171
- package/src/module/meta/service/entity-realation-data.service.ts +9 -9
- package/src/module/meta/service/entity-relation.service.ts +74 -74
- package/src/module/meta/service/entity-service-impl.service.ts +388 -388
- package/src/module/meta/service/entity-table-column.service.ts +26 -26
- package/src/module/meta/service/entity-table.service.ts +157 -157
- package/src/module/meta/service/entity-validation.service.ts +188 -188
- package/src/module/meta/service/entity.service.ts +49 -49
- package/src/module/meta/service/field-group.service.ts +103 -103
- package/src/module/meta/service/media-data.service.ts +591 -591
- package/src/module/meta/service/populate-meta.service.ts +222 -222
- package/src/module/meta/service/preference.service.ts +16 -16
- package/src/module/meta/service/resolver.service.ts +280 -280
- package/src/module/meta/service/section-master.service.ts +104 -104
- package/src/module/meta/service/update-form-json.service.ts +22 -22
- package/src/module/meta/service/user-app-mapping.service.ts +17 -17
- package/src/module/meta/service/view-master.service.ts +127 -127
- package/src/module/microservice-client/microservice-clients.module.ts +13 -13
- package/src/module/microservice-client/service/microservice-client-factory.ts +37 -37
- package/src/module/microservice-client/service/microservice-clients.ts +4 -4
- package/src/module/module/controller/menu.controller.ts +15 -15
- package/src/module/module/controller/module-access.controller.ts +133 -133
- package/src/module/module/entity/menu.entity.ts +43 -43
- package/src/module/module/entity/module-access.entity.ts +25 -25
- package/src/module/module/entity/module-action.entity.ts +17 -17
- package/src/module/module/entity/module.entity.ts +52 -52
- package/src/module/module/module.module.ts +42 -42
- package/src/module/module/repository/menu.repository.ts +186 -186
- package/src/module/module/repository/module-access.repository.ts +344 -344
- package/src/module/module/service/menu.service.ts +82 -82
- package/src/module/module/service/module-access.service.ts +189 -189
- package/src/module/notification/controller/notification.controller.ts +58 -58
- package/src/module/notification/controller/otp.controller.ts +117 -117
- package/src/module/notification/entity/notification.entity.ts +26 -26
- package/src/module/notification/entity/otp.entity.ts +28 -28
- package/src/module/notification/firebase-admin.config.ts +22 -22
- package/src/module/notification/notification.module.ts +69 -69
- package/src/module/notification/repository/otp.repository.ts +27 -27
- package/src/module/notification/service/email.service.ts +127 -127
- package/src/module/notification/service/notification.service.ts +164 -164
- package/src/module/notification/service/otp.service.ts +133 -133
- package/src/module/third-party-module/entity/third-party-api-registry.entity.ts +52 -52
- package/src/module/third-party-module/repository/third-party-api-registry.repository.ts +20 -20
- package/src/module/third-party-module/service/api-registry.service.ts +13 -13
- package/src/module/third-party-module/third-party.module.ts +12 -12
- package/src/module/user/controller/login.controller.ts +198 -198
- package/src/module/user/controller/user.controller.ts +40 -40
- package/src/module/user/dto/create-user.dto.ts +62 -62
- package/src/module/user/dto/update-user.dto.ts +4 -4
- package/src/module/user/entity/role.entity.ts +33 -33
- package/src/module/user/entity/user-role-mapping.entity.ts +38 -38
- package/src/module/user/entity/user-session.entity.ts +73 -73
- package/src/module/user/entity/user.entity.ts +62 -62
- package/src/module/user/repository/role.repository.ts +96 -96
- package/src/module/user/repository/user-role-mapping.repository.ts +126 -126
- package/src/module/user/repository/user.repository.ts +50 -50
- package/src/module/user/repository/userSession.repository.ts +33 -33
- package/src/module/user/service/login.service.ts +326 -326
- package/src/module/user/service/role.service.ts +197 -197
- package/src/module/user/service/user-role-mapping.service.ts +98 -98
- package/src/module/user/service/user-session.service.ts +200 -200
- package/src/module/user/service/user.service.ts +368 -368
- package/src/module/user/user.module.ts +65 -65
- package/src/module/workflow/controller/action-category.controller.ts +54 -54
- package/src/module/workflow/controller/action-resource-mapping.controller.ts +23 -23
- package/src/module/workflow/controller/action-template-mapping.controller.ts +35 -35
- package/src/module/workflow/controller/action.controller.ts +111 -111
- package/src/module/workflow/controller/activity-log.controller.ts +55 -55
- package/src/module/workflow/controller/comm-template.controller.ts +43 -43
- package/src/module/workflow/controller/entity-modification.controller.ts +35 -35
- package/src/module/workflow/controller/form-master.controller.ts +43 -43
- package/src/module/workflow/controller/stage-group.controller.ts +49 -49
- package/src/module/workflow/controller/stage.controller.ts +51 -51
- package/src/module/workflow/controller/task.controller.ts +77 -77
- package/src/module/workflow/controller/workflow-list-master.controller.ts +44 -44
- package/src/module/workflow/controller/workflow-meta.controller.ts +80 -80
- package/src/module/workflow/controller/workflow.controller.ts +67 -67
- package/src/module/workflow/entity/action-category.entity.ts +38 -38
- package/src/module/workflow/entity/action-data.entity.ts +55 -55
- package/src/module/workflow/entity/action-resources-mapping.entity.ts +29 -29
- package/src/module/workflow/entity/action-template-mapping.entity.ts +17 -17
- package/src/module/workflow/entity/action.entity.ts +53 -53
- package/src/module/workflow/entity/activity-log.entity.ts +43 -43
- package/src/module/workflow/entity/comm-template.entity.ts +43 -43
- package/src/module/workflow/entity/entity-modification.entity.ts +38 -38
- package/src/module/workflow/entity/form.entity.ts +25 -25
- package/src/module/workflow/entity/stage-action-mapping.entity.ts +17 -17
- package/src/module/workflow/entity/stage-group.entity.ts +23 -23
- package/src/module/workflow/entity/stage-movement-data.entity.ts +38 -38
- package/src/module/workflow/entity/stage.entity.ts +20 -20
- package/src/module/workflow/entity/task-data.entity.ts +88 -88
- package/src/module/workflow/entity/template-attach-mapper.entity.ts +30 -30
- package/src/module/workflow/entity/workflow-data.entity.ts +11 -11
- package/src/module/workflow/entity/workflow-level-mapping.entity.ts +18 -18
- package/src/module/workflow/entity/workflow.entity.ts +20 -20
- package/src/module/workflow/repository/action-category.repository.ts +79 -79
- package/src/module/workflow/repository/action-data.repository.ts +347 -347
- package/src/module/workflow/repository/action.repository.ts +339 -339
- package/src/module/workflow/repository/activity-log.repository.ts +148 -148
- package/src/module/workflow/repository/comm-template.repository.ts +157 -157
- package/src/module/workflow/repository/form-master.repository.ts +50 -50
- package/src/module/workflow/repository/stage-group.repository.ts +186 -186
- package/src/module/workflow/repository/stage-movement.repository.ts +217 -217
- package/src/module/workflow/repository/stage.repository.ts +160 -160
- package/src/module/workflow/repository/task.repository.ts +154 -154
- package/src/module/workflow/repository/workflow.repository.ts +42 -42
- package/src/module/workflow/service/action-category.service.ts +33 -33
- package/src/module/workflow/service/action-data.service.ts +62 -62
- package/src/module/workflow/service/action-resources-mapping.service.ts +10 -10
- package/src/module/workflow/service/action-template-mapping.service.ts +137 -137
- package/src/module/workflow/service/action.service.ts +302 -302
- package/src/module/workflow/service/activity-log.service.ts +107 -107
- package/src/module/workflow/service/comm-template.service.ts +181 -181
- package/src/module/workflow/service/entity-modification.service.ts +61 -61
- package/src/module/workflow/service/form-master.service.ts +35 -35
- package/src/module/workflow/service/populate-workflow.service.ts +320 -320
- package/src/module/workflow/service/stage-action-mapping.service.ts +5 -5
- package/src/module/workflow/service/stage-group.service.ts +325 -325
- package/src/module/workflow/service/stage.service.ts +197 -197
- package/src/module/workflow/service/task.service.ts +551 -551
- package/src/module/workflow/service/workflow-list-master.service.ts +68 -68
- package/src/module/workflow/service/workflow-meta.service.ts +640 -640
- package/src/module/workflow/service/workflow.service.ts +213 -213
- package/src/module/workflow/workflow.module.ts +180 -180
- package/src/module/workflow-automation/SCHEDULING_GUIDE.md +145 -145
- package/src/module/workflow-automation/controller/workflow-automation.controller.ts +43 -43
- package/src/module/workflow-automation/entity/workflow-automation-action.entity.ts +26 -26
- package/src/module/workflow-automation/entity/workflow-automation.entity.ts +40 -40
- package/src/module/workflow-automation/interface/action.decorator.ts +7 -7
- package/src/module/workflow-automation/interface/action.interface.ts +5 -5
- package/src/module/workflow-automation/service/action-registery.service.ts +35 -35
- package/src/module/workflow-automation/service/schedule-handler.service.ts +168 -168
- package/src/module/workflow-automation/service/workflow-automation-engine.service.ts +219 -219
- package/src/module/workflow-automation/service/workflow-automation.service.ts +476 -476
- package/src/module/workflow-automation/workflow-automation.module.ts +54 -54
- package/src/module/workflow-schedule/INSTALLATION.md +244 -244
- package/src/module/workflow-schedule/MULTI_PROJECT_GUIDE.md +196 -196
- package/src/module/workflow-schedule/README.md +422 -422
- package/src/module/workflow-schedule/constants/schedule.constants.ts +48 -48
- package/src/module/workflow-schedule/controller/workflow-schedule.controller.ts +253 -253
- package/src/module/workflow-schedule/docs/CLAUDE_CODE_GUIDE.md +510 -510
- package/src/module/workflow-schedule/docs/CLAUDE_CODE_PROMPT.md +362 -362
- package/src/module/workflow-schedule/docs/RUN_CLAUDE_CODE.sh +68 -68
- package/src/module/workflow-schedule/dto/create-schedule.dto.ts +147 -147
- package/src/module/workflow-schedule/dto/get-execution-logs.dto.ts +119 -119
- package/src/module/workflow-schedule/dto/update-schedule.dto.ts +96 -96
- package/src/module/workflow-schedule/entities/scheduled-workflow.entity.ts +148 -148
- package/src/module/workflow-schedule/entities/workflow-execution-log.entity.ts +154 -154
- package/src/module/workflow-schedule/interfaces/schedule-job-data.interface.ts +53 -53
- package/src/module/workflow-schedule/interfaces/workflow-schedule-options.interface.ts +12 -12
- package/src/module/workflow-schedule/processors/schedule.processor.ts +620 -620
- package/src/module/workflow-schedule/service/workflow-schedule.service.ts +597 -597
- package/src/module/workflow-schedule/workflow-schedule.module.ts +67 -67
- package/src/resources/dev.properties.yaml +31 -31
- package/src/resources/local.properties.yaml +27 -27
- package/src/resources/properties.module.ts +12 -12
- package/src/resources/properties.yaml.ts +11 -11
- package/src/resources/uat.properties.yaml +31 -31
- package/src/table.config.ts +133 -133
- package/src/utils/dto/excel-data.dto.ts +14 -14
- package/src/utils/dto/excelsheet-data.dto.ts +5 -5
- package/src/utils/service/base64util.service.ts +18 -18
- package/src/utils/service/clockIDGenUtil.service.ts +21 -21
- package/src/utils/service/codeGenerator.service.ts +22 -22
- package/src/utils/service/dateUtil.service.ts +17 -17
- package/src/utils/service/encryptUtil.service.ts +97 -97
- package/src/utils/service/excel-helper.service.ts +72 -72
- package/src/utils/service/excelUtil.service.ts +15 -15
- package/src/utils/service/file-util.service.ts +11 -11
- package/src/utils/service/json-util.service.ts +23 -23
- package/src/utils/service/loggingUtil.service.ts +88 -88
- package/src/utils/service/reflection-helper.service.ts +62 -62
- package/src/utils/service/wbsCodeGen.service.ts +8 -8
- package/src/utils/utils.module.ts +27 -27
- package/tsconfig.build.json +4 -4
- package/tsconfig.json +24 -24
|
@@ -1,422 +1,422 @@
|
|
|
1
|
-
# Workflow Schedule Module
|
|
2
|
-
|
|
3
|
-
A comprehensive NestJS module for scheduling and executing workflows using Bull queues and Redis.
|
|
4
|
-
|
|
5
|
-
## Features
|
|
6
|
-
|
|
7
|
-
- ✅ Schedule workflows with cron expressions
|
|
8
|
-
- ✅ Timezone support (IANA timezone format)
|
|
9
|
-
- ✅ Pause/resume schedules
|
|
10
|
-
- ✅ Manual trigger execution
|
|
11
|
-
- ✅ Comprehensive execution logging
|
|
12
|
-
- ✅ Retry with exponential backoff
|
|
13
|
-
- ✅ Batch processing (100 records per batch)
|
|
14
|
-
- ✅ Multiple action types:
|
|
15
|
-
- Send Email
|
|
16
|
-
- Update Records
|
|
17
|
-
- Create Tasks
|
|
18
|
-
- Send Notifications
|
|
19
|
-
|
|
20
|
-
## Installation
|
|
21
|
-
|
|
22
|
-
### 1. Install Required Dependencies
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
npm install @nestjs/bull bull redis cron-parser
|
|
26
|
-
npm install --save-dev @types/bull
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
Note: `cron-parser` includes its own TypeScript definitions, so no separate `@types` package is needed.
|
|
30
|
-
|
|
31
|
-
### 2. Configure Redis
|
|
32
|
-
|
|
33
|
-
Add Redis configuration to your `.env` file:
|
|
34
|
-
|
|
35
|
-
```env
|
|
36
|
-
REDIS_HOST=localhost
|
|
37
|
-
REDIS_PORT=6379
|
|
38
|
-
REDIS_PASSWORD=
|
|
39
|
-
REDIS_DB=0
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
### 3. Run Migrations
|
|
43
|
-
|
|
44
|
-
The module includes three migrations:
|
|
45
|
-
|
|
46
|
-
1. **AddWorkflowTypeColumn** - Adds `workflow_type` to `cr_wf_master` table
|
|
47
|
-
2. **CreateScheduledWorkflowsTable** - Creates `cr_wf_scheduled_workflow` table
|
|
48
|
-
3. **CreateWorkflowExecutionLogsTable** - Creates `cr_wf_execution_log` table
|
|
49
|
-
|
|
50
|
-
To run migrations:
|
|
51
|
-
|
|
52
|
-
```bash
|
|
53
|
-
# Using TypeORM CLI
|
|
54
|
-
npx typeorm migration:run -d src/config/database.config.ts
|
|
55
|
-
|
|
56
|
-
# Or using npm script (if configured)
|
|
57
|
-
npm run migration:run
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
### 4. Start Redis Server
|
|
61
|
-
|
|
62
|
-
Make sure Redis is running:
|
|
63
|
-
|
|
64
|
-
```bash
|
|
65
|
-
# If using Docker
|
|
66
|
-
docker run -d -p 6379:6379 redis
|
|
67
|
-
|
|
68
|
-
# If installed locally
|
|
69
|
-
redis-server
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
## Module Structure
|
|
73
|
-
|
|
74
|
-
```
|
|
75
|
-
src/module/workflow-schedule/
|
|
76
|
-
├── constants/
|
|
77
|
-
│ └── schedule.constants.ts # Constants and enums
|
|
78
|
-
├── interfaces/
|
|
79
|
-
│ └── schedule-job-data.interface.ts # TypeScript interfaces
|
|
80
|
-
├── entities/
|
|
81
|
-
│ ├── scheduled-workflow.entity.ts # ScheduledWorkflow entity
|
|
82
|
-
│ └── workflow-execution-log.entity.ts # WorkflowExecutionLog entity
|
|
83
|
-
├── dto/
|
|
84
|
-
│ ├── create-schedule.dto.ts # Create schedule DTO
|
|
85
|
-
│ ├── update-schedule.dto.ts # Update schedule DTO
|
|
86
|
-
│ └── get-execution-logs.dto.ts # Query execution logs DTO
|
|
87
|
-
├── processors/
|
|
88
|
-
│ └── schedule.processor.ts # Bull job processor
|
|
89
|
-
├── service/
|
|
90
|
-
│ └── workflow-schedule.service.ts # Business logic (9 methods)
|
|
91
|
-
├── controller/
|
|
92
|
-
│ └── workflow-schedule.controller.ts # REST API (9 endpoints)
|
|
93
|
-
└── workflow-schedule.module.ts # Module definition
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
## API Endpoints
|
|
97
|
-
|
|
98
|
-
### 1. Create Schedule
|
|
99
|
-
```http
|
|
100
|
-
POST /workflow-schedule/create
|
|
101
|
-
Authorization: Bearer <token>
|
|
102
|
-
|
|
103
|
-
{
|
|
104
|
-
"workflow_id": 1,
|
|
105
|
-
"workflow_name": "Daily Lead Assignment",
|
|
106
|
-
"name": "Assign leads every morning",
|
|
107
|
-
"description": "Automatically assign new leads to sales team",
|
|
108
|
-
"cron_expression": "0 9 * * 1-5",
|
|
109
|
-
"timezone": "Asia/Kolkata",
|
|
110
|
-
"actions": [
|
|
111
|
-
{
|
|
112
|
-
"actionType": "UPDATE_RECORDS",
|
|
113
|
-
"targetEntityType": "LEAD",
|
|
114
|
-
"actionConfig": {
|
|
115
|
-
"updateFields": {
|
|
116
|
-
"status": "ASSIGNED"
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
]
|
|
121
|
-
}
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
### 2. Update Schedule
|
|
125
|
-
```http
|
|
126
|
-
PUT /workflow-schedule/update
|
|
127
|
-
|
|
128
|
-
{
|
|
129
|
-
"id": 1,
|
|
130
|
-
"cron_expression": "0 10 * * 1-5"
|
|
131
|
-
}
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
### 3. Get Schedule by ID
|
|
135
|
-
```http
|
|
136
|
-
GET /workflow-schedule/:id
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
### 4. Get All Schedules
|
|
140
|
-
```http
|
|
141
|
-
GET /workflow-schedule/list?page=1&size=10&schedule_status=ACTIVE
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
### 5. Pause Schedule
|
|
145
|
-
```http
|
|
146
|
-
POST /workflow-schedule/:id/pause
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
### 6. Resume Schedule
|
|
150
|
-
```http
|
|
151
|
-
POST /workflow-schedule/:id/resume
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
### 7. Delete Schedule
|
|
155
|
-
```http
|
|
156
|
-
DELETE /workflow-schedule/:id
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
### 8. Manual Trigger
|
|
160
|
-
```http
|
|
161
|
-
POST /workflow-schedule/:id/trigger
|
|
162
|
-
|
|
163
|
-
{
|
|
164
|
-
"metadata": {
|
|
165
|
-
"triggered_reason": "Testing"
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
### 9. Get Execution Logs
|
|
171
|
-
```http
|
|
172
|
-
POST /workflow-schedule/execution-logs
|
|
173
|
-
|
|
174
|
-
{
|
|
175
|
-
"schedule_id": 1,
|
|
176
|
-
"execution_status": "COMPLETED",
|
|
177
|
-
"page": 1,
|
|
178
|
-
"size": 10
|
|
179
|
-
}
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
### 10. Get Execution Statistics
|
|
183
|
-
```http
|
|
184
|
-
GET /workflow-schedule/:id/stats
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
## Service Methods
|
|
188
|
-
|
|
189
|
-
The `WorkflowScheduleService` provides 9 core methods:
|
|
190
|
-
|
|
191
|
-
1. **createSchedule** - Create a new scheduled workflow
|
|
192
|
-
2. **updateSchedule** - Update an existing schedule
|
|
193
|
-
3. **getScheduleById** - Get schedule by ID
|
|
194
|
-
4. **getAllSchedules** - Get all schedules with pagination
|
|
195
|
-
5. **pauseSchedule** - Pause a running schedule
|
|
196
|
-
6. **resumeSchedule** - Resume a paused schedule
|
|
197
|
-
7. **deleteSchedule** - Delete (soft delete) a schedule
|
|
198
|
-
8. **triggerManualExecution** - Manually trigger execution
|
|
199
|
-
9. **getExecutionLogs** - Query execution logs with filters
|
|
200
|
-
|
|
201
|
-
## Cron Expression Examples
|
|
202
|
-
|
|
203
|
-
```javascript
|
|
204
|
-
// Every day at 9 AM
|
|
205
|
-
"0 9 * * *"
|
|
206
|
-
|
|
207
|
-
// Every weekday at 9 AM
|
|
208
|
-
"0 9 * * 1-5"
|
|
209
|
-
|
|
210
|
-
// Every hour
|
|
211
|
-
"0 * * * *"
|
|
212
|
-
|
|
213
|
-
// Every 30 minutes
|
|
214
|
-
"*/30 * * * *"
|
|
215
|
-
|
|
216
|
-
// First day of every month at midnight
|
|
217
|
-
"0 0 1 * *"
|
|
218
|
-
|
|
219
|
-
// Every Monday at 8 AM
|
|
220
|
-
"0 8 * * 1"
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
## Action Types
|
|
224
|
-
|
|
225
|
-
### 1. Send Email
|
|
226
|
-
```json
|
|
227
|
-
{
|
|
228
|
-
"actionType": "SEND_EMAIL",
|
|
229
|
-
"targetEntityType": "USR",
|
|
230
|
-
"actionConfig": {
|
|
231
|
-
"subject": "Weekly Report",
|
|
232
|
-
"template": "weekly-report-template",
|
|
233
|
-
"from": "noreply@example.com"
|
|
234
|
-
},
|
|
235
|
-
"filterCriteria": {
|
|
236
|
-
"status": "ACTIVE"
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
### 2. Update Records
|
|
242
|
-
```json
|
|
243
|
-
{
|
|
244
|
-
"actionType": "UPDATE_RECORDS",
|
|
245
|
-
"targetEntityType": "LEAD",
|
|
246
|
-
"actionConfig": {
|
|
247
|
-
"updateFields": {
|
|
248
|
-
"status": "FOLLOW_UP",
|
|
249
|
-
"last_contacted": "NOW()"
|
|
250
|
-
}
|
|
251
|
-
},
|
|
252
|
-
"filterCriteria": {
|
|
253
|
-
"status": "NEW"
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
```
|
|
257
|
-
|
|
258
|
-
### 3. Create Task
|
|
259
|
-
```json
|
|
260
|
-
{
|
|
261
|
-
"actionType": "CREATE_TASK",
|
|
262
|
-
"targetEntityType": "LEAD",
|
|
263
|
-
"actionConfig": {
|
|
264
|
-
"taskName": "Follow up with lead",
|
|
265
|
-
"taskDescription": "Scheduled follow-up task"
|
|
266
|
-
},
|
|
267
|
-
"filterCriteria": {
|
|
268
|
-
"status": "QUALIFIED"
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
```
|
|
272
|
-
|
|
273
|
-
### 4. Send Notification
|
|
274
|
-
```json
|
|
275
|
-
{
|
|
276
|
-
"actionType": "SEND_NOTIFICATION",
|
|
277
|
-
"targetEntityType": "USR",
|
|
278
|
-
"actionConfig": {
|
|
279
|
-
"eventType": "WORKFLOW_SCHEDULED",
|
|
280
|
-
"message": "Your weekly report is ready"
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
```
|
|
284
|
-
|
|
285
|
-
## Retry Configuration
|
|
286
|
-
|
|
287
|
-
```json
|
|
288
|
-
{
|
|
289
|
-
"retry_config": {
|
|
290
|
-
"maxRetries": 3,
|
|
291
|
-
"retryDelay": 5000,
|
|
292
|
-
"backoffMultiplier": 2
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
```
|
|
296
|
-
|
|
297
|
-
This will retry failed jobs:
|
|
298
|
-
- 1st retry: after 5 seconds
|
|
299
|
-
- 2nd retry: after 10 seconds (5 * 2)
|
|
300
|
-
- 3rd retry: after 20 seconds (10 * 2)
|
|
301
|
-
|
|
302
|
-
## Monitoring
|
|
303
|
-
|
|
304
|
-
### Check Queue Status
|
|
305
|
-
|
|
306
|
-
Bull provides a web UI for monitoring queues:
|
|
307
|
-
|
|
308
|
-
```bash
|
|
309
|
-
npm install bull-board
|
|
310
|
-
```
|
|
311
|
-
|
|
312
|
-
### View Execution Logs
|
|
313
|
-
|
|
314
|
-
Use the execution logs API to monitor:
|
|
315
|
-
- Success rate
|
|
316
|
-
- Failed executions
|
|
317
|
-
- Average execution time
|
|
318
|
-
- Records processed
|
|
319
|
-
|
|
320
|
-
```http
|
|
321
|
-
GET /workflow-schedule/:id/stats
|
|
322
|
-
```
|
|
323
|
-
|
|
324
|
-
## Database Schema
|
|
325
|
-
|
|
326
|
-
### cr_wf_scheduled_workflow
|
|
327
|
-
- Stores schedule configuration
|
|
328
|
-
- Includes cron expression, timezone, retry config
|
|
329
|
-
- Tracks execution count and next execution time
|
|
330
|
-
|
|
331
|
-
### cr_wf_execution_log
|
|
332
|
-
- Logs every execution
|
|
333
|
-
- Tracks success/failure status
|
|
334
|
-
- Records processing metrics
|
|
335
|
-
- Stores error details
|
|
336
|
-
|
|
337
|
-
## Environment Variables
|
|
338
|
-
|
|
339
|
-
```env
|
|
340
|
-
# Redis Configuration
|
|
341
|
-
REDIS_HOST=localhost
|
|
342
|
-
REDIS_PORT=6379
|
|
343
|
-
REDIS_PASSWORD=
|
|
344
|
-
REDIS_DB=0
|
|
345
|
-
|
|
346
|
-
# Database Configuration
|
|
347
|
-
DB_HOST=localhost
|
|
348
|
-
DB_PORT=3306
|
|
349
|
-
DB_USER=root
|
|
350
|
-
DB_PASS=password
|
|
351
|
-
DB_NAME=core
|
|
352
|
-
```
|
|
353
|
-
|
|
354
|
-
## Testing
|
|
355
|
-
|
|
356
|
-
### Manual Testing
|
|
357
|
-
|
|
358
|
-
1. Create a schedule with a simple cron (e.g., every minute: `* * * * *`)
|
|
359
|
-
2. Check execution logs after 1-2 minutes
|
|
360
|
-
3. Test pause/resume functionality
|
|
361
|
-
4. Test manual trigger
|
|
362
|
-
5. Verify retry mechanism by creating failing actions
|
|
363
|
-
|
|
364
|
-
### Unit Testing
|
|
365
|
-
|
|
366
|
-
```typescript
|
|
367
|
-
import { Test } from '@nestjs/testing';
|
|
368
|
-
import { WorkflowScheduleService } from './workflow-schedule.service';
|
|
369
|
-
|
|
370
|
-
describe('WorkflowScheduleService', () => {
|
|
371
|
-
let service: WorkflowScheduleService;
|
|
372
|
-
|
|
373
|
-
beforeEach(async () => {
|
|
374
|
-
const module = await Test.createTestingModule({
|
|
375
|
-
providers: [WorkflowScheduleService],
|
|
376
|
-
}).compile();
|
|
377
|
-
|
|
378
|
-
service = module.get<WorkflowScheduleService>(WorkflowScheduleService);
|
|
379
|
-
});
|
|
380
|
-
|
|
381
|
-
it('should create a schedule', async () => {
|
|
382
|
-
// Test implementation
|
|
383
|
-
});
|
|
384
|
-
});
|
|
385
|
-
```
|
|
386
|
-
|
|
387
|
-
## Troubleshooting
|
|
388
|
-
|
|
389
|
-
### Redis Connection Issues
|
|
390
|
-
- Verify Redis is running: `redis-cli ping`
|
|
391
|
-
- Check Redis connection settings in `.env`
|
|
392
|
-
|
|
393
|
-
### Jobs Not Processing
|
|
394
|
-
- Check Bull queue status
|
|
395
|
-
- Verify cron expression is valid
|
|
396
|
-
- Check schedule is enabled and active
|
|
397
|
-
|
|
398
|
-
### Migration Issues
|
|
399
|
-
- Ensure database user has CREATE/ALTER permissions
|
|
400
|
-
- Run migrations in order (1, 2, 3)
|
|
401
|
-
|
|
402
|
-
## Performance Considerations
|
|
403
|
-
|
|
404
|
-
- **Batch Size**: Default is 100 records. Adjust based on your use case.
|
|
405
|
-
- **Retry Strategy**: Balance between retry attempts and system load.
|
|
406
|
-
- **Redis Memory**: Monitor Redis memory usage for large queues.
|
|
407
|
-
- **Database Indexes**: Migrations include optimized indexes.
|
|
408
|
-
|
|
409
|
-
## Security
|
|
410
|
-
|
|
411
|
-
- All endpoints are protected with `JwtAuthGuard`
|
|
412
|
-
- Organization-level data isolation
|
|
413
|
-
- Soft delete for schedules (audit trail)
|
|
414
|
-
- Execution logs retention (configurable)
|
|
415
|
-
|
|
416
|
-
## Support
|
|
417
|
-
|
|
418
|
-
For issues or questions:
|
|
419
|
-
1. Check the logs: `src/module/workflow-schedule/`
|
|
420
|
-
2. Review Bull queue status
|
|
421
|
-
3. Check Redis connection
|
|
422
|
-
4. Verify database migrations ran successfully
|
|
1
|
+
# Workflow Schedule Module
|
|
2
|
+
|
|
3
|
+
A comprehensive NestJS module for scheduling and executing workflows using Bull queues and Redis.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- ✅ Schedule workflows with cron expressions
|
|
8
|
+
- ✅ Timezone support (IANA timezone format)
|
|
9
|
+
- ✅ Pause/resume schedules
|
|
10
|
+
- ✅ Manual trigger execution
|
|
11
|
+
- ✅ Comprehensive execution logging
|
|
12
|
+
- ✅ Retry with exponential backoff
|
|
13
|
+
- ✅ Batch processing (100 records per batch)
|
|
14
|
+
- ✅ Multiple action types:
|
|
15
|
+
- Send Email
|
|
16
|
+
- Update Records
|
|
17
|
+
- Create Tasks
|
|
18
|
+
- Send Notifications
|
|
19
|
+
|
|
20
|
+
## Installation
|
|
21
|
+
|
|
22
|
+
### 1. Install Required Dependencies
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npm install @nestjs/bull bull redis cron-parser
|
|
26
|
+
npm install --save-dev @types/bull
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Note: `cron-parser` includes its own TypeScript definitions, so no separate `@types` package is needed.
|
|
30
|
+
|
|
31
|
+
### 2. Configure Redis
|
|
32
|
+
|
|
33
|
+
Add Redis configuration to your `.env` file:
|
|
34
|
+
|
|
35
|
+
```env
|
|
36
|
+
REDIS_HOST=localhost
|
|
37
|
+
REDIS_PORT=6379
|
|
38
|
+
REDIS_PASSWORD=
|
|
39
|
+
REDIS_DB=0
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### 3. Run Migrations
|
|
43
|
+
|
|
44
|
+
The module includes three migrations:
|
|
45
|
+
|
|
46
|
+
1. **AddWorkflowTypeColumn** - Adds `workflow_type` to `cr_wf_master` table
|
|
47
|
+
2. **CreateScheduledWorkflowsTable** - Creates `cr_wf_scheduled_workflow` table
|
|
48
|
+
3. **CreateWorkflowExecutionLogsTable** - Creates `cr_wf_execution_log` table
|
|
49
|
+
|
|
50
|
+
To run migrations:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
# Using TypeORM CLI
|
|
54
|
+
npx typeorm migration:run -d src/config/database.config.ts
|
|
55
|
+
|
|
56
|
+
# Or using npm script (if configured)
|
|
57
|
+
npm run migration:run
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### 4. Start Redis Server
|
|
61
|
+
|
|
62
|
+
Make sure Redis is running:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
# If using Docker
|
|
66
|
+
docker run -d -p 6379:6379 redis
|
|
67
|
+
|
|
68
|
+
# If installed locally
|
|
69
|
+
redis-server
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Module Structure
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
src/module/workflow-schedule/
|
|
76
|
+
├── constants/
|
|
77
|
+
│ └── schedule.constants.ts # Constants and enums
|
|
78
|
+
├── interfaces/
|
|
79
|
+
│ └── schedule-job-data.interface.ts # TypeScript interfaces
|
|
80
|
+
├── entities/
|
|
81
|
+
│ ├── scheduled-workflow.entity.ts # ScheduledWorkflow entity
|
|
82
|
+
│ └── workflow-execution-log.entity.ts # WorkflowExecutionLog entity
|
|
83
|
+
├── dto/
|
|
84
|
+
│ ├── create-schedule.dto.ts # Create schedule DTO
|
|
85
|
+
│ ├── update-schedule.dto.ts # Update schedule DTO
|
|
86
|
+
│ └── get-execution-logs.dto.ts # Query execution logs DTO
|
|
87
|
+
├── processors/
|
|
88
|
+
│ └── schedule.processor.ts # Bull job processor
|
|
89
|
+
├── service/
|
|
90
|
+
│ └── workflow-schedule.service.ts # Business logic (9 methods)
|
|
91
|
+
├── controller/
|
|
92
|
+
│ └── workflow-schedule.controller.ts # REST API (9 endpoints)
|
|
93
|
+
└── workflow-schedule.module.ts # Module definition
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## API Endpoints
|
|
97
|
+
|
|
98
|
+
### 1. Create Schedule
|
|
99
|
+
```http
|
|
100
|
+
POST /workflow-schedule/create
|
|
101
|
+
Authorization: Bearer <token>
|
|
102
|
+
|
|
103
|
+
{
|
|
104
|
+
"workflow_id": 1,
|
|
105
|
+
"workflow_name": "Daily Lead Assignment",
|
|
106
|
+
"name": "Assign leads every morning",
|
|
107
|
+
"description": "Automatically assign new leads to sales team",
|
|
108
|
+
"cron_expression": "0 9 * * 1-5",
|
|
109
|
+
"timezone": "Asia/Kolkata",
|
|
110
|
+
"actions": [
|
|
111
|
+
{
|
|
112
|
+
"actionType": "UPDATE_RECORDS",
|
|
113
|
+
"targetEntityType": "LEAD",
|
|
114
|
+
"actionConfig": {
|
|
115
|
+
"updateFields": {
|
|
116
|
+
"status": "ASSIGNED"
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
]
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### 2. Update Schedule
|
|
125
|
+
```http
|
|
126
|
+
PUT /workflow-schedule/update
|
|
127
|
+
|
|
128
|
+
{
|
|
129
|
+
"id": 1,
|
|
130
|
+
"cron_expression": "0 10 * * 1-5"
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### 3. Get Schedule by ID
|
|
135
|
+
```http
|
|
136
|
+
GET /workflow-schedule/:id
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### 4. Get All Schedules
|
|
140
|
+
```http
|
|
141
|
+
GET /workflow-schedule/list?page=1&size=10&schedule_status=ACTIVE
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### 5. Pause Schedule
|
|
145
|
+
```http
|
|
146
|
+
POST /workflow-schedule/:id/pause
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### 6. Resume Schedule
|
|
150
|
+
```http
|
|
151
|
+
POST /workflow-schedule/:id/resume
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### 7. Delete Schedule
|
|
155
|
+
```http
|
|
156
|
+
DELETE /workflow-schedule/:id
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### 8. Manual Trigger
|
|
160
|
+
```http
|
|
161
|
+
POST /workflow-schedule/:id/trigger
|
|
162
|
+
|
|
163
|
+
{
|
|
164
|
+
"metadata": {
|
|
165
|
+
"triggered_reason": "Testing"
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### 9. Get Execution Logs
|
|
171
|
+
```http
|
|
172
|
+
POST /workflow-schedule/execution-logs
|
|
173
|
+
|
|
174
|
+
{
|
|
175
|
+
"schedule_id": 1,
|
|
176
|
+
"execution_status": "COMPLETED",
|
|
177
|
+
"page": 1,
|
|
178
|
+
"size": 10
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### 10. Get Execution Statistics
|
|
183
|
+
```http
|
|
184
|
+
GET /workflow-schedule/:id/stats
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## Service Methods
|
|
188
|
+
|
|
189
|
+
The `WorkflowScheduleService` provides 9 core methods:
|
|
190
|
+
|
|
191
|
+
1. **createSchedule** - Create a new scheduled workflow
|
|
192
|
+
2. **updateSchedule** - Update an existing schedule
|
|
193
|
+
3. **getScheduleById** - Get schedule by ID
|
|
194
|
+
4. **getAllSchedules** - Get all schedules with pagination
|
|
195
|
+
5. **pauseSchedule** - Pause a running schedule
|
|
196
|
+
6. **resumeSchedule** - Resume a paused schedule
|
|
197
|
+
7. **deleteSchedule** - Delete (soft delete) a schedule
|
|
198
|
+
8. **triggerManualExecution** - Manually trigger execution
|
|
199
|
+
9. **getExecutionLogs** - Query execution logs with filters
|
|
200
|
+
|
|
201
|
+
## Cron Expression Examples
|
|
202
|
+
|
|
203
|
+
```javascript
|
|
204
|
+
// Every day at 9 AM
|
|
205
|
+
"0 9 * * *"
|
|
206
|
+
|
|
207
|
+
// Every weekday at 9 AM
|
|
208
|
+
"0 9 * * 1-5"
|
|
209
|
+
|
|
210
|
+
// Every hour
|
|
211
|
+
"0 * * * *"
|
|
212
|
+
|
|
213
|
+
// Every 30 minutes
|
|
214
|
+
"*/30 * * * *"
|
|
215
|
+
|
|
216
|
+
// First day of every month at midnight
|
|
217
|
+
"0 0 1 * *"
|
|
218
|
+
|
|
219
|
+
// Every Monday at 8 AM
|
|
220
|
+
"0 8 * * 1"
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
## Action Types
|
|
224
|
+
|
|
225
|
+
### 1. Send Email
|
|
226
|
+
```json
|
|
227
|
+
{
|
|
228
|
+
"actionType": "SEND_EMAIL",
|
|
229
|
+
"targetEntityType": "USR",
|
|
230
|
+
"actionConfig": {
|
|
231
|
+
"subject": "Weekly Report",
|
|
232
|
+
"template": "weekly-report-template",
|
|
233
|
+
"from": "noreply@example.com"
|
|
234
|
+
},
|
|
235
|
+
"filterCriteria": {
|
|
236
|
+
"status": "ACTIVE"
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
### 2. Update Records
|
|
242
|
+
```json
|
|
243
|
+
{
|
|
244
|
+
"actionType": "UPDATE_RECORDS",
|
|
245
|
+
"targetEntityType": "LEAD",
|
|
246
|
+
"actionConfig": {
|
|
247
|
+
"updateFields": {
|
|
248
|
+
"status": "FOLLOW_UP",
|
|
249
|
+
"last_contacted": "NOW()"
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
"filterCriteria": {
|
|
253
|
+
"status": "NEW"
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
### 3. Create Task
|
|
259
|
+
```json
|
|
260
|
+
{
|
|
261
|
+
"actionType": "CREATE_TASK",
|
|
262
|
+
"targetEntityType": "LEAD",
|
|
263
|
+
"actionConfig": {
|
|
264
|
+
"taskName": "Follow up with lead",
|
|
265
|
+
"taskDescription": "Scheduled follow-up task"
|
|
266
|
+
},
|
|
267
|
+
"filterCriteria": {
|
|
268
|
+
"status": "QUALIFIED"
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### 4. Send Notification
|
|
274
|
+
```json
|
|
275
|
+
{
|
|
276
|
+
"actionType": "SEND_NOTIFICATION",
|
|
277
|
+
"targetEntityType": "USR",
|
|
278
|
+
"actionConfig": {
|
|
279
|
+
"eventType": "WORKFLOW_SCHEDULED",
|
|
280
|
+
"message": "Your weekly report is ready"
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
## Retry Configuration
|
|
286
|
+
|
|
287
|
+
```json
|
|
288
|
+
{
|
|
289
|
+
"retry_config": {
|
|
290
|
+
"maxRetries": 3,
|
|
291
|
+
"retryDelay": 5000,
|
|
292
|
+
"backoffMultiplier": 2
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
This will retry failed jobs:
|
|
298
|
+
- 1st retry: after 5 seconds
|
|
299
|
+
- 2nd retry: after 10 seconds (5 * 2)
|
|
300
|
+
- 3rd retry: after 20 seconds (10 * 2)
|
|
301
|
+
|
|
302
|
+
## Monitoring
|
|
303
|
+
|
|
304
|
+
### Check Queue Status
|
|
305
|
+
|
|
306
|
+
Bull provides a web UI for monitoring queues:
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
npm install bull-board
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
### View Execution Logs
|
|
313
|
+
|
|
314
|
+
Use the execution logs API to monitor:
|
|
315
|
+
- Success rate
|
|
316
|
+
- Failed executions
|
|
317
|
+
- Average execution time
|
|
318
|
+
- Records processed
|
|
319
|
+
|
|
320
|
+
```http
|
|
321
|
+
GET /workflow-schedule/:id/stats
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
## Database Schema
|
|
325
|
+
|
|
326
|
+
### cr_wf_scheduled_workflow
|
|
327
|
+
- Stores schedule configuration
|
|
328
|
+
- Includes cron expression, timezone, retry config
|
|
329
|
+
- Tracks execution count and next execution time
|
|
330
|
+
|
|
331
|
+
### cr_wf_execution_log
|
|
332
|
+
- Logs every execution
|
|
333
|
+
- Tracks success/failure status
|
|
334
|
+
- Records processing metrics
|
|
335
|
+
- Stores error details
|
|
336
|
+
|
|
337
|
+
## Environment Variables
|
|
338
|
+
|
|
339
|
+
```env
|
|
340
|
+
# Redis Configuration
|
|
341
|
+
REDIS_HOST=localhost
|
|
342
|
+
REDIS_PORT=6379
|
|
343
|
+
REDIS_PASSWORD=
|
|
344
|
+
REDIS_DB=0
|
|
345
|
+
|
|
346
|
+
# Database Configuration
|
|
347
|
+
DB_HOST=localhost
|
|
348
|
+
DB_PORT=3306
|
|
349
|
+
DB_USER=root
|
|
350
|
+
DB_PASS=password
|
|
351
|
+
DB_NAME=core
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
## Testing
|
|
355
|
+
|
|
356
|
+
### Manual Testing
|
|
357
|
+
|
|
358
|
+
1. Create a schedule with a simple cron (e.g., every minute: `* * * * *`)
|
|
359
|
+
2. Check execution logs after 1-2 minutes
|
|
360
|
+
3. Test pause/resume functionality
|
|
361
|
+
4. Test manual trigger
|
|
362
|
+
5. Verify retry mechanism by creating failing actions
|
|
363
|
+
|
|
364
|
+
### Unit Testing
|
|
365
|
+
|
|
366
|
+
```typescript
|
|
367
|
+
import { Test } from '@nestjs/testing';
|
|
368
|
+
import { WorkflowScheduleService } from './workflow-schedule.service';
|
|
369
|
+
|
|
370
|
+
describe('WorkflowScheduleService', () => {
|
|
371
|
+
let service: WorkflowScheduleService;
|
|
372
|
+
|
|
373
|
+
beforeEach(async () => {
|
|
374
|
+
const module = await Test.createTestingModule({
|
|
375
|
+
providers: [WorkflowScheduleService],
|
|
376
|
+
}).compile();
|
|
377
|
+
|
|
378
|
+
service = module.get<WorkflowScheduleService>(WorkflowScheduleService);
|
|
379
|
+
});
|
|
380
|
+
|
|
381
|
+
it('should create a schedule', async () => {
|
|
382
|
+
// Test implementation
|
|
383
|
+
});
|
|
384
|
+
});
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
## Troubleshooting
|
|
388
|
+
|
|
389
|
+
### Redis Connection Issues
|
|
390
|
+
- Verify Redis is running: `redis-cli ping`
|
|
391
|
+
- Check Redis connection settings in `.env`
|
|
392
|
+
|
|
393
|
+
### Jobs Not Processing
|
|
394
|
+
- Check Bull queue status
|
|
395
|
+
- Verify cron expression is valid
|
|
396
|
+
- Check schedule is enabled and active
|
|
397
|
+
|
|
398
|
+
### Migration Issues
|
|
399
|
+
- Ensure database user has CREATE/ALTER permissions
|
|
400
|
+
- Run migrations in order (1, 2, 3)
|
|
401
|
+
|
|
402
|
+
## Performance Considerations
|
|
403
|
+
|
|
404
|
+
- **Batch Size**: Default is 100 records. Adjust based on your use case.
|
|
405
|
+
- **Retry Strategy**: Balance between retry attempts and system load.
|
|
406
|
+
- **Redis Memory**: Monitor Redis memory usage for large queues.
|
|
407
|
+
- **Database Indexes**: Migrations include optimized indexes.
|
|
408
|
+
|
|
409
|
+
## Security
|
|
410
|
+
|
|
411
|
+
- All endpoints are protected with `JwtAuthGuard`
|
|
412
|
+
- Organization-level data isolation
|
|
413
|
+
- Soft delete for schedules (audit trail)
|
|
414
|
+
- Execution logs retention (configurable)
|
|
415
|
+
|
|
416
|
+
## Support
|
|
417
|
+
|
|
418
|
+
For issues or questions:
|
|
419
|
+
1. Check the logs: `src/module/workflow-schedule/`
|
|
420
|
+
2. Review Bull queue status
|
|
421
|
+
3. Check Redis connection
|
|
422
|
+
4. Verify database migrations ran successfully
|