@gadmin2n/schematics 0.0.138 → 0.0.140
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/dist/lib/application/files/gadmin2-game-angle-demo/Jenkinsfile +6 -34
- package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/approval.prisma +199 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/system.prisma +9 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/config/prisma/workflow.prisma +191 -14
- package/dist/lib/application/files/gadmin2-game-angle-demo/gitignore +6 -5
- package/dist/lib/application/files/gadmin2-game-angle-demo/readme.md +10 -3
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/migrate-between-pg-schemas.js +6 -4
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/package.json +5 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/prisma.config.ts +12 -3
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/scripts/migrate-human-approval-configs.ts +86 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/workflow-node-types.ts +682 -121
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/seed/workflow.seed.ts +110 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/config/index.ts +28 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/json-body-parser.spec.ts +61 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/json-body-parser.ts +7 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/structured-all-exceptions.filter.spec.ts +54 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/lib/structured-all-exceptions.filter.ts +86 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/main.ts +9 -3
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.controller.ts +89 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.dto.ts +68 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.service.spec.ts +177 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approval-channel.service.ts +283 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/approvalChannel/approvalChannel.module.ts +10 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-executor.spec.ts +42 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-executor.ts +108 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-runtime.controller.ts +101 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/code-runtime.dto.ts +29 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/codeRuntime/codeRuntime.module.ts +21 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-handler.registry.ts +30 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-handler.ts +15 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-runtime.controller.spec.ts +105 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-runtime.controller.ts +96 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-runtime.dto.ts +78 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-signal-outbox.service.spec.ts +56 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-signal-outbox.service.ts +111 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-token.spec.ts +23 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction-token.ts +18 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction.service.spec.ts +240 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction.service.ts +339 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-interaction.types.ts +74 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/external-wait.handler.ts +47 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/externalInteraction.module.ts +41 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/human-approval.handler.spec.ts +70 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/human-approval.handler.ts +76 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/workflow-callback-url.controller.ts +12 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/workflow-callback-url.service.spec.ts +227 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/externalInteraction/workflow-callback-url.service.ts +121 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.controller.ts +160 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.dto.ts +41 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.util.spec.ts +171 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/http-request-runtime.util.ts +245 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/httpRequest/httpRequest.module.ts +22 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-rule-evaluator.spec.ts +68 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-rule-evaluator.ts +126 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-rule.types.ts +34 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-signal-outbox.service.ts +115 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-subject-source.util.spec.ts +45 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/approval-subject-source.util.ts +59 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.controller.ts +72 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.dto.ts +144 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.errors.ts +19 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.external-decision.spec.ts +350 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/human-approval.service.ts +774 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/humanApproval.module.ts +46 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/legacy-approval-config-migration.ts +227 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/outbox-retry.util.ts +14 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/runtime/human-approval-runtime.controller.ts +151 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/runtime/human-approval-runtime.dto.ts +88 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/humanApproval/runtime/runtime-token.guard.ts +43 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/index.ts +21 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-connection.controller.ts +77 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-connection.dto.ts +98 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-connection.service.ts +277 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-secret-cipher.spec.ts +14 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integration-secret-cipher.ts +59 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/integrationConnection/integrationConnection.module.ts +10 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/actor-context.util.ts +27 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/providers/user-group.provider.ts +208 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/providers/user.provider.ts +168 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.controller.spec.ts +157 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.controller.ts +176 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.dto.ts +21 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.errors.ts +78 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.registry.spec.ts +100 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.registry.ts +115 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subject-provider.types.ts +97 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/subjectProvider/subjectProvider.module.ts +34 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/temporalTenantConfig/temporalTenantConfig.controller.spec.ts +89 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/temporalTenantConfig/temporalTenantConfig.controller.ts +4 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/user-group.controller.ts +119 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/user-group.dto.ts +91 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/user-group.errors.ts +34 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/user-group.service.spec.ts +161 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/user-group.service.ts +390 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/userGroup/userGroup.module.ts +10 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/dsl-validate.util.spec.ts +17 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/dsl-validate.util.ts +8 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/parameter-binding.ts +93 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-callable.spec.ts +158 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-callable.ts +155 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-compiler.service.spec.ts +363 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-compiler.service.ts +354 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-compiler.types.ts +43 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-data-edge.util.spec.ts +174 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-data-edge.util.ts +149 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-dsl-comparison.ts +43 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-execution.dto.ts +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-export.dto.ts +4 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-export.service.ts +70 -28
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow-handle-validator.ts +128 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.controller.ts +12 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.module.ts +18 -3
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.service.spec.ts +369 -22
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflow/workflow.service.ts +319 -90
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/node-config-validator.service.spec.ts +79 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/node-config-validator.service.ts +62 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/schema.types.ts +10 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/subject-config-validator.service.spec.ts +124 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/subject-config-validator.service.ts +236 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/widget-catalog.service.spec.ts +49 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/widget-catalog.service.ts +69 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowConfig/workflowConfig.module.ts +20 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/node-instance-config.util.spec.ts +15 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/node-instance-config.util.ts +25 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.controller.ts +103 -11
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.dto.ts +98 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.module.ts +3 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.service.spec.ts +72 -62
- package/dist/lib/application/files/gadmin2-game-angle-demo/server/src/modules/workflowNodeInstance/workflowNodeInstance.service.ts +148 -11
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/package.json +13 -9
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/App.tsx +5 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/authProvider.ts +2 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/BulkActions.tsx +0 -5
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/SearchBar.tsx +26 -18
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/eventList/index.tsx +2 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/logButton/index.tsx +24 -17
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/logList/index.tsx +7 -18
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/auditLog/components/modalDiffViewer/index.tsx +2 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/contexts/color-mode/index.tsx +288 -33
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/contexts/color-mode/themeStyles.ts +97 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/SettingDrawer.tsx +251 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/header.tsx +47 -19
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/layout.tsx +18 -9
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/menuRenderer.tsx +155 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/components/layout/sider.tsx +123 -129
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/config/routeRegistry.tsx +16 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/constants/layout.ts +2 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/AddDataModal.tsx +98 -3
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/AddPageModal.tsx +101 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/DevShell.tsx +8 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/dev-shell/style.css +51 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/form.tsx +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/list.tsx +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/login.ts +40 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/helpers/show.tsx +5 -5
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useDynamicResources.tsx +16 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/hooks/useListPageState.ts +10 -7
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/i18n.ts +4 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/en/common.json +26 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/en/workflow.json +556 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/zh_CN/common.json +26 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/locales/zh_CN/workflow.json +556 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/plugins/devShellPlugin.ts +152 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agenda/index.tsx +6 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agenda/show.tsx +41 -9
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agendaJob/edit.tsx +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agendaJob/list.tsx +10 -8
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/agendaJob/show.tsx +3 -3
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/components/action-cell.css +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/edit.tsx +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/audit/show.tsx +3 -6
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasCell.css +3 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasCell.tsx +45 -13
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasComponentLibrary.tsx +45 -22
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasListPage.tsx +168 -101
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasPage.tsx +248 -74
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CanvasToolbar.tsx +33 -18
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/CodeFloatWindow.tsx +16 -10
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/PublishModal.tsx +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasContextMenuRegistry.tsx +31 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/canvasDefaults.ts +15 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/BarChartDataSourceModal.tsx +16 -11
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/CanvasAiModal.tsx +25 -21
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/ExportModal.tsx +6 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/LineChartDataSourceModal.tsx +9 -10
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/MultiChartConfigModal.tsx +4 -7
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/MultiChartDataSourceModal.tsx +23 -9
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/NumCardDataSourceModal.tsx +16 -11
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/PromptModal.tsx +2 -5
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/RadarChartDataSourceModal.tsx +16 -11
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/TableConfigModal.tsx +2 -9
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/TableDataSourceModal.tsx +23 -12
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/components/canvasModalProps.ts +2 -17
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/sectionCompactor.test.ts +149 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/sectionCompactor.ts +111 -17
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/types.ts +1 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/whiteboardLayout.test.ts +83 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/whiteboardLayout.ts +118 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas/whiteboardName.test.ts +26 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/canvas-page/index.tsx +9 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/edit.tsx +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/list.tsx +10 -8
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/game/show.tsx +3 -6
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/human-approval/DecisionModal.tsx +71 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/human-approval/inbox.tsx +216 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/page/Components/AssignRolesModal.tsx +6 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/permissionReadme/index.tsx +8 -8
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/Components/modal.tsx +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/resource/list.tsx +5 -5
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/role/Components/modal.tsx +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/user/components/show-drawer.tsx +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/ApprovalChannelModal.test.tsx +84 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/ApprovalChannelModal.tsx +141 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/approval-channel.types.ts +16 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/approval-channels/index.tsx +208 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/CreateNodeInstanceDrawer.tsx +154 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/CustomNode.tsx +194 -5
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/DeletableEdge.tsx +76 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/DslView.tsx +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/EnhancedFlowRenderer.tsx +176 -22
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ExecutionStatusNode.test.tsx +62 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ExecutionStatusNode.tsx +94 -5
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ExportModal.tsx +15 -10
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/FlowRenderer.tsx +251 -70
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ImportModal.tsx +18 -24
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/InstanceRequiredDialog.tsx +106 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/LookupConnectionDialog.test.tsx +45 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/LookupConnectionDialog.tsx +43 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NewNodeDefaults.test.tsx +279 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodeEditModal.tsx +6 -7
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodePropertyPanel.test.tsx +335 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/NodePropertyPanel.tsx +433 -237
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/ParameterBindingEditor.tsx +179 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/RunWorkflowModal.tsx +18 -16
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/StatusCards.tsx +20 -16
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/components/VersionPanel.tsx +6 -4
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/connections/ConnectionModal.test.tsx +68 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/connections/ConnectionModal.tsx +367 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/connections/connection.types.ts +21 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/connections/index.tsx +171 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/editor.tsx +38 -22
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/hooks/useNodeInstanceLibrary.ts +41 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/hooks/useWorkflowAgent.ts +6 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/index.tsx +27 -20
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/instance-detail.tsx +8 -11
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/instances.tsx +6 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/components/NodeInstanceForm.tsx +56 -23
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/create.tsx +21 -6
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/edit.tsx +17 -20
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/index.tsx +6 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/SchemaField.tsx +311 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/SchemaForm.test.tsx +218 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/SchemaForm.tsx +83 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/default-widgets.tsx +135 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/schema-defaults.ts +36 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/schema.types.ts +32 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/widget-registry.test.tsx +23 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/schema-form/widget-registry.tsx +52 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/show.tsx +9 -13
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApprovalRequestTriggerConfigEditor.tsx +39 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApprovalRuleEditor.test.tsx +20 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApprovalRuleEditor.tsx +72 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApproverSourceEditor.test.tsx +47 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ApproverSourceEditor.tsx +185 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/CallableInputParametersEditor.test.tsx +102 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/CallableInputParametersEditor.tsx +150 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/CodeConfigEditor.tsx +103 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ExternalRequestConfigEditor.test.tsx +93 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ExternalRequestConfigEditor.tsx +196 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ExternalWaitConfigEditor.tsx +303 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HttpRequestConfigEditor.test.tsx +189 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HttpRequestConfigEditor.tsx +706 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HumanApprovalConfigEditor.test.tsx +86 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/HumanApprovalConfigEditor.tsx +458 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ReturnResultConfigEditor.test.tsx +53 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/ReturnResultConfigEditor.tsx +91 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubjectPicker.test.tsx +61 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubjectPicker.tsx +266 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubmitApprovalResultConfigEditor.tsx +104 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/SubmitExternalResultConfigEditor.tsx +98 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/UserGroupCreateModal.tsx +70 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/UserGroupEditModal.tsx +138 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/approver-source.test.ts +25 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/approver-source.ts +42 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/widgets/subject-provider.api.ts +95 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/show.tsx +15 -11
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/temporal-tenant/index.tsx +49 -8
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/types/parameter-binding.ts +49 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/types.ts +31 -2
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/lookupConnection.test.ts +208 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/lookupConnection.ts +246 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/newNodeConfig.ts +73 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/removeWorkflowEdges.test.ts +34 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/removeWorkflowEdges.ts +18 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveLookupPorts.ts +66 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveOutputs.test.ts +39 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveOutputs.ts +48 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveWorkflowDisplay.test.ts +51 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/utils/resolveWorkflowDisplay.ts +32 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/edit.tsx +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/list.tsx +10 -8
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflowEventOutbox/show.tsx +3 -3
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/antd-theme-vars.css +93 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/antd.css +8 -8
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/fc.css +4 -4
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/index.css +20 -5
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/show-drawer.module.css +3 -3
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/show-page.module.css +3 -3
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/styles/theme-styles.css +81 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/test/setup.ts +5 -0
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/vite.config.ts +1 -7
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/vitest.config.ts +12 -0
- package/package.json +1 -1
- package/dist/lib/application/files/gadmin2-game-angle-demo/web/src/routes/workflow/node-instances/components/DynamicConfigForm.tsx +0 -154
|
@@ -7,9 +7,9 @@ import {
|
|
|
7
7
|
PageMetaDto,
|
|
8
8
|
PageOptionsDto,
|
|
9
9
|
pick,
|
|
10
|
-
UserType,
|
|
11
10
|
} from '@gadmin2n/nest-common';
|
|
12
11
|
import {
|
|
12
|
+
BadRequestException,
|
|
13
13
|
Body,
|
|
14
14
|
Controller,
|
|
15
15
|
Delete,
|
|
@@ -34,8 +34,6 @@ import { Prisma } from '@prisma/client';
|
|
|
34
34
|
import { UseRoles } from 'nest-access-control';
|
|
35
35
|
import { WINSTON_MODULE_PROVIDER } from 'nest-winston';
|
|
36
36
|
import { Logger } from 'winston';
|
|
37
|
-
import { CreateWorkflowNodeInstanceDto } from '../../generated/workflowNodeInstance/dto/create-workflowNodeInstance.dto';
|
|
38
|
-
import { UpdateWorkflowNodeInstanceDto } from '../../generated/workflowNodeInstance/dto/update-workflowNodeInstance.dto';
|
|
39
37
|
import {
|
|
40
38
|
EffectedCount,
|
|
41
39
|
UploadResponse,
|
|
@@ -43,10 +41,19 @@ import {
|
|
|
43
41
|
WorkflowNodeInstanceWhereSelect,
|
|
44
42
|
} from '../../generated/workflowNodeInstance/dto/workflowNodeInstance-types.dto';
|
|
45
43
|
import { WorkflowNodeInstanceEntity } from '../../generated/workflowNodeInstance/entities/workflowNodeInstance.entity';
|
|
44
|
+
import {
|
|
45
|
+
CreateConfiguredNodeInstanceDto,
|
|
46
|
+
LegacyCreateWorkflowNodeInstanceDto,
|
|
47
|
+
UpdateConfiguredNodeInstanceDto,
|
|
48
|
+
} from './workflowNodeInstance.dto';
|
|
46
49
|
import { WorkflowNodeInstanceService } from './workflowNodeInstance.service';
|
|
47
50
|
|
|
48
51
|
import { ConfigService } from '@nestjs/config';
|
|
49
52
|
import { FileInterceptor } from '@nestjs/platform-express';
|
|
53
|
+
import {
|
|
54
|
+
actorContextFromRequest,
|
|
55
|
+
AuthenticatedActorRequest,
|
|
56
|
+
} from '../subjectProvider/actor-context.util';
|
|
50
57
|
|
|
51
58
|
@UseGuards(ACGuard)
|
|
52
59
|
@Controller('workflowNodeInstance')
|
|
@@ -58,6 +65,27 @@ export class WorkflowNodeInstanceController {
|
|
|
58
65
|
@Inject(WINSTON_MODULE_PROVIDER) private readonly logger: Logger,
|
|
59
66
|
) {}
|
|
60
67
|
|
|
68
|
+
@Patch(':id')
|
|
69
|
+
@UseRoles({
|
|
70
|
+
resource: 'workflowNodeInstance',
|
|
71
|
+
action: 'update',
|
|
72
|
+
possession: 'any',
|
|
73
|
+
})
|
|
74
|
+
@ApiOkResponse({ type: WorkflowNodeInstanceEntity })
|
|
75
|
+
async updateConfigured(
|
|
76
|
+
@Param('id', ParseIntPipe) id: number,
|
|
77
|
+
@Body() body: UpdateConfiguredNodeInstanceDto,
|
|
78
|
+
@Req() request: AuthenticatedActorRequest,
|
|
79
|
+
) {
|
|
80
|
+
return new WorkflowNodeInstanceEntity(
|
|
81
|
+
await this.workflowNodeInstanceService.updateConfigured(
|
|
82
|
+
id,
|
|
83
|
+
body,
|
|
84
|
+
this.actorFrom(request),
|
|
85
|
+
),
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
|
|
61
89
|
@Post('createOne')
|
|
62
90
|
@UseRoles({
|
|
63
91
|
resource: 'workflowNodeInstance',
|
|
@@ -66,15 +94,18 @@ export class WorkflowNodeInstanceController {
|
|
|
66
94
|
})
|
|
67
95
|
@ApiCreatedResponse({ type: WorkflowNodeInstanceEntity })
|
|
68
96
|
async createOne(
|
|
69
|
-
@Body() body:
|
|
97
|
+
@Body() body: LegacyCreateWorkflowNodeInstanceDto,
|
|
70
98
|
@ACAttrFilter() acAttrFilter,
|
|
71
|
-
@Req() request:
|
|
99
|
+
@Req() request: AuthenticatedActorRequest,
|
|
72
100
|
) {
|
|
73
|
-
|
|
101
|
+
const configuredInput = this.normalizeLegacyCreate(
|
|
102
|
+
acAttrFilter(body) as LegacyCreateWorkflowNodeInstanceDto,
|
|
103
|
+
);
|
|
74
104
|
return new WorkflowNodeInstanceEntity(
|
|
75
|
-
await this.workflowNodeInstanceService.
|
|
76
|
-
|
|
77
|
-
|
|
105
|
+
await this.workflowNodeInstanceService.createConfigured(
|
|
106
|
+
configuredInput,
|
|
107
|
+
this.actorFrom(request),
|
|
108
|
+
),
|
|
78
109
|
);
|
|
79
110
|
}
|
|
80
111
|
|
|
@@ -136,8 +167,9 @@ export class WorkflowNodeInstanceController {
|
|
|
136
167
|
@ApiNotFoundResponse({ description: 'Cannot found this record.' })
|
|
137
168
|
async updateUnique(
|
|
138
169
|
@Param('id', ParseIntPipe) id: number,
|
|
139
|
-
@Body() body:
|
|
170
|
+
@Body() body: UpdateConfiguredNodeInstanceDto,
|
|
140
171
|
@ACAttrFilter() acAttrFilter,
|
|
172
|
+
@Req() request: AuthenticatedActorRequest,
|
|
141
173
|
) {
|
|
142
174
|
/*
|
|
143
175
|
const origin = (await this.workflowNodeInstanceService.findUnique(id, {
|
|
@@ -156,13 +188,73 @@ export class WorkflowNodeInstanceController {
|
|
|
156
188
|
// 其他个性化逻辑
|
|
157
189
|
*/
|
|
158
190
|
|
|
159
|
-
const item = await this.workflowNodeInstanceService.
|
|
191
|
+
const item = await this.workflowNodeInstanceService.updateConfigured(
|
|
160
192
|
id,
|
|
161
193
|
acAttrFilter(body),
|
|
194
|
+
this.actorFrom(request),
|
|
162
195
|
);
|
|
163
196
|
return new WorkflowNodeInstanceEntity(acAttrFilter(item));
|
|
164
197
|
}
|
|
165
198
|
|
|
199
|
+
private actorFrom(request: AuthenticatedActorRequest) {
|
|
200
|
+
return actorContextFromRequest(request);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
private normalizeLegacyCreate(
|
|
204
|
+
body: LegacyCreateWorkflowNodeInstanceDto,
|
|
205
|
+
): CreateConfiguredNodeInstanceDto {
|
|
206
|
+
const rawNodeTypeId = body.nodeTypeId ?? body.nodeType?.connect?.id;
|
|
207
|
+
const nodeTypeId = this.parsePositiveNodeTypeId(rawNodeTypeId);
|
|
208
|
+
|
|
209
|
+
let config: unknown = body.config;
|
|
210
|
+
if (typeof config === 'string') {
|
|
211
|
+
try {
|
|
212
|
+
config = JSON.parse(config);
|
|
213
|
+
} catch {
|
|
214
|
+
throw new BadRequestException('config must be a JSON object');
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (
|
|
218
|
+
config === null ||
|
|
219
|
+
typeof config !== 'object' ||
|
|
220
|
+
Array.isArray(config)
|
|
221
|
+
) {
|
|
222
|
+
throw new BadRequestException('config must be a JSON object');
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
return {
|
|
226
|
+
nodeTypeId,
|
|
227
|
+
name: body.name,
|
|
228
|
+
...(body.description != null && { description: body.description }),
|
|
229
|
+
config: config as Record<string, unknown>,
|
|
230
|
+
...(body.isEnabled !== undefined && { isEnabled: body.isEnabled }),
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
private parsePositiveNodeTypeId(value: unknown): number {
|
|
235
|
+
if (typeof value === 'number') {
|
|
236
|
+
if (Number.isSafeInteger(value) && value > 0) return value;
|
|
237
|
+
throw new BadRequestException('nodeTypeId must be a positive integer');
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
let integerValue: bigint;
|
|
241
|
+
if (typeof value === 'bigint') {
|
|
242
|
+
integerValue = value;
|
|
243
|
+
} else if (typeof value === 'string' && /^\d+$/.test(value)) {
|
|
244
|
+
integerValue = BigInt(value);
|
|
245
|
+
} else {
|
|
246
|
+
throw new BadRequestException('nodeTypeId must be a positive integer');
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
if (
|
|
250
|
+
integerValue <= BigInt(0) ||
|
|
251
|
+
integerValue > BigInt(Number.MAX_SAFE_INTEGER)
|
|
252
|
+
) {
|
|
253
|
+
throw new BadRequestException('nodeTypeId must be a positive integer');
|
|
254
|
+
}
|
|
255
|
+
return Number(integerValue);
|
|
256
|
+
}
|
|
257
|
+
|
|
166
258
|
@Delete('deleteUnique/:id')
|
|
167
259
|
@UseRoles({
|
|
168
260
|
resource: 'workflowNodeInstance',
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { Transform, Type } from 'class-transformer';
|
|
2
|
+
import {
|
|
3
|
+
IsBoolean,
|
|
4
|
+
IsDefined,
|
|
5
|
+
IsInt,
|
|
6
|
+
IsObject,
|
|
7
|
+
IsOptional,
|
|
8
|
+
IsString,
|
|
9
|
+
ValidateIf,
|
|
10
|
+
ValidateNested,
|
|
11
|
+
} from 'class-validator';
|
|
12
|
+
|
|
13
|
+
class LegacyWorkflowNodeTypeConnectDto {
|
|
14
|
+
@IsDefined()
|
|
15
|
+
id: unknown;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
class LegacyWorkflowNodeTypeRelationDto {
|
|
19
|
+
@IsDefined()
|
|
20
|
+
@ValidateNested()
|
|
21
|
+
@Type(() => LegacyWorkflowNodeTypeConnectDto)
|
|
22
|
+
connect: LegacyWorkflowNodeTypeConnectDto;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export class LegacyCreateWorkflowNodeInstanceDto {
|
|
26
|
+
@ValidateIf((body) => body.nodeTypeId === undefined)
|
|
27
|
+
@IsDefined()
|
|
28
|
+
@ValidateNested()
|
|
29
|
+
@Type(() => LegacyWorkflowNodeTypeRelationDto)
|
|
30
|
+
nodeType?: LegacyWorkflowNodeTypeRelationDto;
|
|
31
|
+
|
|
32
|
+
@ValidateIf((body) => body.nodeType === undefined)
|
|
33
|
+
@IsDefined()
|
|
34
|
+
nodeTypeId?: unknown;
|
|
35
|
+
|
|
36
|
+
@IsString()
|
|
37
|
+
name: string;
|
|
38
|
+
|
|
39
|
+
@IsOptional()
|
|
40
|
+
@IsString()
|
|
41
|
+
description?: string | null;
|
|
42
|
+
|
|
43
|
+
@Transform(({ value }) => {
|
|
44
|
+
if (typeof value !== 'string') return value;
|
|
45
|
+
try {
|
|
46
|
+
return JSON.parse(value);
|
|
47
|
+
} catch {
|
|
48
|
+
return value;
|
|
49
|
+
}
|
|
50
|
+
})
|
|
51
|
+
@IsObject({ message: 'config must be a JSON object' })
|
|
52
|
+
config: Record<string, unknown>;
|
|
53
|
+
|
|
54
|
+
@IsOptional()
|
|
55
|
+
@IsBoolean()
|
|
56
|
+
isEnabled?: boolean;
|
|
57
|
+
|
|
58
|
+
@IsOptional()
|
|
59
|
+
@IsString()
|
|
60
|
+
creator?: string;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export class CreateConfiguredNodeInstanceDto {
|
|
64
|
+
@IsInt()
|
|
65
|
+
nodeTypeId: number;
|
|
66
|
+
|
|
67
|
+
@IsString()
|
|
68
|
+
name: string;
|
|
69
|
+
|
|
70
|
+
@IsOptional()
|
|
71
|
+
@IsString()
|
|
72
|
+
description?: string;
|
|
73
|
+
|
|
74
|
+
@IsObject()
|
|
75
|
+
config: Record<string, unknown>;
|
|
76
|
+
|
|
77
|
+
@IsOptional()
|
|
78
|
+
@IsBoolean()
|
|
79
|
+
isEnabled?: boolean;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export class UpdateConfiguredNodeInstanceDto {
|
|
83
|
+
@IsOptional()
|
|
84
|
+
@IsString()
|
|
85
|
+
name?: string;
|
|
86
|
+
|
|
87
|
+
@IsOptional()
|
|
88
|
+
@IsString()
|
|
89
|
+
description?: string | null;
|
|
90
|
+
|
|
91
|
+
@IsOptional()
|
|
92
|
+
@IsBoolean()
|
|
93
|
+
isEnabled?: boolean;
|
|
94
|
+
|
|
95
|
+
@IsOptional()
|
|
96
|
+
@IsObject()
|
|
97
|
+
config?: Record<string, unknown>;
|
|
98
|
+
}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { Module } from '@nestjs/common';
|
|
2
|
+
import { SubjectProviderModule } from '../subjectProvider/subjectProvider.module';
|
|
3
|
+
import { WorkflowConfigModule } from '../workflowConfig/workflowConfig.module';
|
|
2
4
|
import { WorkflowNodeInstanceController } from './workflowNodeInstance.controller';
|
|
3
5
|
import { WorkflowNodeInstanceService } from './workflowNodeInstance.service';
|
|
4
6
|
|
|
5
7
|
@Module({
|
|
8
|
+
imports: [WorkflowConfigModule, SubjectProviderModule],
|
|
6
9
|
controllers: [WorkflowNodeInstanceController],
|
|
7
10
|
providers: [WorkflowNodeInstanceService],
|
|
8
11
|
exports: [WorkflowNodeInstanceService],
|
|
@@ -1,18 +1,16 @@
|
|
|
1
1
|
/// <reference types="jest" />
|
|
2
|
-
import { ConfigService } from '@nestjs/config';
|
|
3
|
-
import { Test, TestingModule } from '@nestjs/testing';
|
|
4
|
-
import { WINSTON_MODULE_PROVIDER } from 'nest-winston';
|
|
5
|
-
|
|
6
|
-
// Mock nestjs-prisma 模块
|
|
7
|
-
jest.mock('nestjs-prisma', () => ({
|
|
8
|
-
PrismaService: jest.fn(),
|
|
9
|
-
}));
|
|
10
|
-
|
|
11
|
-
import { PrismaService } from 'nestjs-prisma';
|
|
12
2
|
import { WorkflowNodeInstanceService } from './workflowNodeInstance.service';
|
|
13
3
|
|
|
14
|
-
// Mock PrismaService
|
|
15
4
|
const mockPrismaService = {
|
|
5
|
+
audit: {
|
|
6
|
+
create: jest.fn(),
|
|
7
|
+
},
|
|
8
|
+
workflowNodeType: {
|
|
9
|
+
findUnique: jest.fn(),
|
|
10
|
+
},
|
|
11
|
+
integrationConnection: {
|
|
12
|
+
findUnique: jest.fn(),
|
|
13
|
+
},
|
|
16
14
|
workflowNodeInstance: {
|
|
17
15
|
create: jest.fn(),
|
|
18
16
|
createMany: jest.fn(),
|
|
@@ -28,18 +26,16 @@ const mockPrismaService = {
|
|
|
28
26
|
},
|
|
29
27
|
};
|
|
30
28
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
child: jest.fn().mockReturnThis(),
|
|
34
|
-
info: jest.fn(),
|
|
35
|
-
error: jest.fn(),
|
|
36
|
-
warn: jest.fn(),
|
|
37
|
-
debug: jest.fn(),
|
|
29
|
+
const mockNodeConfigValidator = {
|
|
30
|
+
validateOrThrow: jest.fn(),
|
|
38
31
|
};
|
|
39
32
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
33
|
+
const mockWidgetCatalog = {
|
|
34
|
+
assertUiSchemaSupported: jest.fn(),
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const mockSubjectConfigValidator = {
|
|
38
|
+
validateSubjects: jest.fn(),
|
|
43
39
|
};
|
|
44
40
|
|
|
45
41
|
describe('WorkflowNodeInstanceService', () => {
|
|
@@ -50,17 +46,11 @@ describe('WorkflowNodeInstanceService', () => {
|
|
|
50
46
|
// 每个测试前重置所有 mock
|
|
51
47
|
jest.clearAllMocks();
|
|
52
48
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
{ provide: WINSTON_MODULE_PROVIDER, useValue: mockLogger },
|
|
59
|
-
],
|
|
60
|
-
}).compile();
|
|
61
|
-
|
|
62
|
-
service = module.get<WorkflowNodeInstanceService>(
|
|
63
|
-
WorkflowNodeInstanceService,
|
|
49
|
+
service = new WorkflowNodeInstanceService(
|
|
50
|
+
mockPrismaService as any,
|
|
51
|
+
mockNodeConfigValidator as any,
|
|
52
|
+
mockWidgetCatalog as any,
|
|
53
|
+
mockSubjectConfigValidator as any,
|
|
64
54
|
);
|
|
65
55
|
prisma = mockPrismaService;
|
|
66
56
|
});
|
|
@@ -69,45 +59,69 @@ describe('WorkflowNodeInstanceService', () => {
|
|
|
69
59
|
expect(service).toBeDefined();
|
|
70
60
|
});
|
|
71
61
|
|
|
72
|
-
describe('
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
62
|
+
describe('createConfigured', () => {
|
|
63
|
+
const nodeType = {
|
|
64
|
+
id: BigInt(1),
|
|
65
|
+
runtimeKey: 'manual',
|
|
66
|
+
schemaVersion: 1,
|
|
67
|
+
configSchema: { type: 'object' },
|
|
68
|
+
uiSchema: {},
|
|
69
|
+
};
|
|
70
|
+
const input = {
|
|
71
|
+
nodeTypeId: 1,
|
|
72
|
+
name: '测试节点',
|
|
73
|
+
description: '测试描述',
|
|
74
|
+
config: {},
|
|
75
|
+
isEnabled: true,
|
|
76
|
+
};
|
|
77
|
+
const actor = { userId: 'user-1', username: 'tester' };
|
|
78
|
+
|
|
79
|
+
it('should validate and create a configured node instance', async () => {
|
|
80
|
+
const expectedResult = {
|
|
81
|
+
id: BigInt(1),
|
|
82
|
+
...input,
|
|
83
|
+
nodeTypeId: BigInt(1),
|
|
84
|
+
creator: 'tester',
|
|
85
|
+
};
|
|
84
86
|
|
|
87
|
+
prisma.workflowNodeType.findUnique.mockResolvedValue(nodeType);
|
|
85
88
|
prisma.workflowNodeInstance.create.mockResolvedValue(expectedResult);
|
|
89
|
+
prisma.audit.create.mockResolvedValue({});
|
|
86
90
|
|
|
87
|
-
const result = await service.
|
|
91
|
+
const result = await service.createConfigured(input, actor);
|
|
88
92
|
|
|
89
|
-
expect(
|
|
90
|
-
|
|
93
|
+
expect(mockNodeConfigValidator.validateOrThrow).toHaveBeenCalledWith(
|
|
94
|
+
'1:1',
|
|
95
|
+
nodeType.configSchema,
|
|
96
|
+
input.config,
|
|
91
97
|
);
|
|
92
|
-
expect(prisma.workflowNodeInstance.create).
|
|
98
|
+
expect(prisma.workflowNodeInstance.create).toHaveBeenCalledWith({
|
|
99
|
+
data: {
|
|
100
|
+
nodeTypeId: BigInt(1),
|
|
101
|
+
name: input.name,
|
|
102
|
+
description: input.description,
|
|
103
|
+
config: input.config,
|
|
104
|
+
isEnabled: true,
|
|
105
|
+
creator: 'tester',
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
expect(prisma.audit.create).toHaveBeenCalledWith({
|
|
109
|
+
data: expect.objectContaining({
|
|
110
|
+
action: 'CREATE_NODE_INSTANCE',
|
|
111
|
+
resourceId: '1',
|
|
112
|
+
creator: 'tester',
|
|
113
|
+
}),
|
|
114
|
+
});
|
|
93
115
|
expect(result).toEqual(expectedResult);
|
|
94
116
|
});
|
|
95
117
|
|
|
96
118
|
it('should throw error when create fails', async () => {
|
|
97
|
-
const createArgs = {
|
|
98
|
-
data: {
|
|
99
|
-
name: 'test_name',
|
|
100
|
-
config: {},
|
|
101
|
-
creator: 'test_creator',
|
|
102
|
-
code: 'test_code',
|
|
103
|
-
description: 'test_description',
|
|
104
|
-
},
|
|
105
|
-
} as any;
|
|
106
119
|
const error = new Error('Database connection failed');
|
|
107
120
|
|
|
121
|
+
prisma.workflowNodeType.findUnique.mockResolvedValue(nodeType);
|
|
108
122
|
prisma.workflowNodeInstance.create.mockRejectedValue(error);
|
|
109
123
|
|
|
110
|
-
await expect(service.
|
|
124
|
+
await expect(service.createConfigured(input, actor)).rejects.toThrow(
|
|
111
125
|
'Database connection failed',
|
|
112
126
|
);
|
|
113
127
|
});
|
|
@@ -119,14 +133,12 @@ describe('WorkflowNodeInstanceService', () => {
|
|
|
119
133
|
{
|
|
120
134
|
name: 'test_name',
|
|
121
135
|
config: {},
|
|
122
|
-
creator: 'test_creator',
|
|
123
136
|
code: 'test_code',
|
|
124
137
|
description: 'test_description',
|
|
125
138
|
},
|
|
126
139
|
{
|
|
127
140
|
name: 'test_name',
|
|
128
141
|
config: {},
|
|
129
|
-
creator: 'test_creator',
|
|
130
142
|
code: 'test_code',
|
|
131
143
|
description: 'test_description',
|
|
132
144
|
},
|
|
@@ -215,7 +227,6 @@ describe('WorkflowNodeInstanceService', () => {
|
|
|
215
227
|
const data = {
|
|
216
228
|
name: 'test_name',
|
|
217
229
|
config: {},
|
|
218
|
-
creator: 'test_creator',
|
|
219
230
|
code: 'test_code',
|
|
220
231
|
description: 'test_description',
|
|
221
232
|
} as any;
|
|
@@ -240,7 +251,6 @@ describe('WorkflowNodeInstanceService', () => {
|
|
|
240
251
|
data: {
|
|
241
252
|
name: 'test_name',
|
|
242
253
|
config: {},
|
|
243
|
-
creator: 'test_creator',
|
|
244
254
|
code: 'test_code',
|
|
245
255
|
description: 'test_description',
|
|
246
256
|
},
|
|
@@ -1,25 +1,159 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Injectable, NotFoundException } from '@nestjs/common';
|
|
2
2
|
import { Prisma, WorkflowNodeInstance } from '@prisma/client';
|
|
3
|
-
import { WINSTON_MODULE_PROVIDER } from 'nest-winston';
|
|
4
3
|
import { PrismaService } from 'nestjs-prisma';
|
|
5
|
-
import { Logger } from 'winston';
|
|
6
4
|
|
|
7
|
-
import {
|
|
5
|
+
import { ActorContext } from '../subjectProvider/subject-provider.types';
|
|
6
|
+
import { NodeConfigValidatorService } from '../workflowConfig/node-config-validator.service';
|
|
7
|
+
import { JsonSchema } from '../workflowConfig/schema.types';
|
|
8
|
+
import { SubjectConfigValidatorService } from '../workflowConfig/subject-config-validator.service';
|
|
9
|
+
import { WidgetCatalogService } from '../workflowConfig/widget-catalog.service';
|
|
10
|
+
import {
|
|
11
|
+
CreateConfiguredNodeInstanceDto,
|
|
12
|
+
UpdateConfiguredNodeInstanceDto,
|
|
13
|
+
} from './workflowNodeInstance.dto';
|
|
8
14
|
|
|
9
15
|
@Injectable()
|
|
10
16
|
export class WorkflowNodeInstanceService {
|
|
11
17
|
constructor(
|
|
12
18
|
private prisma: PrismaService,
|
|
13
|
-
private readonly
|
|
14
|
-
|
|
19
|
+
private readonly nodeConfigValidator: NodeConfigValidatorService,
|
|
20
|
+
private readonly widgetCatalog: WidgetCatalogService,
|
|
21
|
+
private readonly subjectConfigValidator: SubjectConfigValidatorService,
|
|
15
22
|
) {}
|
|
16
23
|
|
|
17
|
-
async
|
|
18
|
-
|
|
24
|
+
async createConfigured(
|
|
25
|
+
input: CreateConfiguredNodeInstanceDto,
|
|
26
|
+
actor: ActorContext,
|
|
19
27
|
) {
|
|
20
|
-
|
|
21
|
-
|
|
28
|
+
const nodeType = await this.prisma.workflowNodeType.findUnique({
|
|
29
|
+
where: { id: BigInt(input.nodeTypeId) },
|
|
30
|
+
select: {
|
|
31
|
+
id: true,
|
|
32
|
+
runtimeKey: true,
|
|
33
|
+
schemaVersion: true,
|
|
34
|
+
configSchema: true,
|
|
35
|
+
uiSchema: true,
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
if (!nodeType) throw new NotFoundException('Node type not found');
|
|
39
|
+
|
|
40
|
+
await this.validateConfig(nodeType, input.config, actor);
|
|
41
|
+
|
|
42
|
+
const config = input.config as Prisma.InputJsonValue;
|
|
43
|
+
const creator = this.creatorFrom(actor);
|
|
44
|
+
const instance = await this.prisma.workflowNodeInstance.create({
|
|
45
|
+
data: {
|
|
46
|
+
nodeTypeId: BigInt(input.nodeTypeId),
|
|
47
|
+
name: input.name,
|
|
48
|
+
description: input.description,
|
|
49
|
+
config,
|
|
50
|
+
isEnabled: input.isEnabled ?? true,
|
|
51
|
+
creator,
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
await this.createAudit('CREATE_NODE_INSTANCE', instance.id, creator);
|
|
55
|
+
return instance;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
async updateConfigured(
|
|
59
|
+
instanceId: number,
|
|
60
|
+
input: UpdateConfiguredNodeInstanceDto,
|
|
61
|
+
actor: ActorContext,
|
|
62
|
+
) {
|
|
63
|
+
const id = BigInt(instanceId);
|
|
64
|
+
const instance = await this.prisma.workflowNodeInstance.findUnique({
|
|
65
|
+
where: { id },
|
|
66
|
+
select: {
|
|
67
|
+
id: true,
|
|
68
|
+
nodeType: {
|
|
69
|
+
select: {
|
|
70
|
+
id: true,
|
|
71
|
+
runtimeKey: true,
|
|
72
|
+
schemaVersion: true,
|
|
73
|
+
configSchema: true,
|
|
74
|
+
uiSchema: true,
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
if (!instance) throw new NotFoundException('Node instance not found');
|
|
80
|
+
|
|
81
|
+
if (input.config !== undefined)
|
|
82
|
+
await this.validateConfig(instance.nodeType, input.config, actor);
|
|
83
|
+
const data = {
|
|
84
|
+
...(input.name !== undefined && { name: input.name }),
|
|
85
|
+
...(input.description !== undefined && {
|
|
86
|
+
description: input.description,
|
|
87
|
+
}),
|
|
88
|
+
...(input.isEnabled !== undefined && { isEnabled: input.isEnabled }),
|
|
89
|
+
...(input.config !== undefined && {
|
|
90
|
+
config: input.config as Prisma.InputJsonValue,
|
|
91
|
+
}),
|
|
92
|
+
};
|
|
93
|
+
const updated = await this.prisma.workflowNodeInstance.update({
|
|
94
|
+
where: { id: BigInt(instanceId) },
|
|
95
|
+
data,
|
|
96
|
+
});
|
|
97
|
+
await this.createAudit(
|
|
98
|
+
'UPDATE_NODE_INSTANCE',
|
|
99
|
+
updated.id,
|
|
100
|
+
this.creatorFrom(actor),
|
|
101
|
+
);
|
|
102
|
+
return updated;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
private async validateConfig(
|
|
106
|
+
nodeType: {
|
|
107
|
+
id: bigint;
|
|
108
|
+
runtimeKey: string;
|
|
109
|
+
schemaVersion: number;
|
|
110
|
+
configSchema: Prisma.JsonValue;
|
|
111
|
+
uiSchema: Prisma.JsonValue;
|
|
112
|
+
},
|
|
113
|
+
config: unknown,
|
|
114
|
+
actor: ActorContext,
|
|
115
|
+
): Promise<void> {
|
|
116
|
+
const schemaKey = `${nodeType.id}:${nodeType.schemaVersion}`;
|
|
117
|
+
const configSchema = nodeType.configSchema as JsonSchema;
|
|
118
|
+
|
|
119
|
+
this.nodeConfigValidator.validateOrThrow(schemaKey, configSchema, config);
|
|
120
|
+
this.widgetCatalog.assertUiSchemaSupported(nodeType.uiSchema);
|
|
121
|
+
await this.subjectConfigValidator.validateSubjects(
|
|
122
|
+
configSchema,
|
|
123
|
+
config,
|
|
124
|
+
actor,
|
|
22
125
|
);
|
|
126
|
+
if (nodeType.runtimeKey === 'http_request') {
|
|
127
|
+
const connectionRef = (config as Record<string, unknown>)?.connectionRef;
|
|
128
|
+
const connection =
|
|
129
|
+
typeof connectionRef === 'string'
|
|
130
|
+
? await this.prisma.integrationConnection.findUnique({
|
|
131
|
+
where: { code: connectionRef },
|
|
132
|
+
select: { isEnabled: true },
|
|
133
|
+
})
|
|
134
|
+
: null;
|
|
135
|
+
if (!connection?.isEnabled)
|
|
136
|
+
throw new NotFoundException(
|
|
137
|
+
'HTTP Request Connection was not found or is disabled',
|
|
138
|
+
);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
private creatorFrom(actor: ActorContext): string {
|
|
143
|
+
return actor.username ?? actor.userId;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
private async createAudit(action: string, instanceId: bigint, actor: string) {
|
|
147
|
+
await this.prisma.audit.create({
|
|
148
|
+
data: {
|
|
149
|
+
creator: actor,
|
|
150
|
+
authorName: actor,
|
|
151
|
+
action,
|
|
152
|
+
resource: 'workflowNodeInstance',
|
|
153
|
+
resourceId: String(instanceId),
|
|
154
|
+
data: JSON.stringify({ instanceId: String(instanceId) }),
|
|
155
|
+
},
|
|
156
|
+
});
|
|
23
157
|
}
|
|
24
158
|
|
|
25
159
|
async createMany(data: Prisma.WorkflowNodeInstanceCreateManyArgs['data']) {
|
|
@@ -150,7 +284,10 @@ export class WorkflowNodeInstanceService {
|
|
|
150
284
|
if (!dsl?.nodes || !Array.isArray(dsl.nodes)) continue;
|
|
151
285
|
|
|
152
286
|
for (const node of dsl.nodes) {
|
|
153
|
-
if (
|
|
287
|
+
if (
|
|
288
|
+
node.source?.instanceId === targetId ||
|
|
289
|
+
node.instanceRef?.instanceId === targetId
|
|
290
|
+
) {
|
|
154
291
|
results.push({
|
|
155
292
|
workflowId: String(wf.id),
|
|
156
293
|
workflowName: wf.name,
|