From efa2017bb604e7bd4fa1e773563f1056c126cdaf Mon Sep 17 00:00:00 2001 From: Omri Levy <61207713+Omri-Levy@users.noreply.github.com> Date: Wed, 6 Mar 2024 16:39:24 +0200 Subject: [PATCH] Associated companies fixes (#2159) * fix(*): associated companies bug fixes * feat(*): added a flag to enable the initiate kyb button for associated * feat(*): version packages * fix(workflows-service): fixed missing test dependency --- apps/backoffice-v2/CHANGELOG.md | 9 +++ apps/backoffice-v2/package.json | 8 +- .../domains/workflow-definitions/fetchers.ts | 1 + .../useAssociatedCompaniesBlock.tsx | 5 +- .../useDefaultBlocksLogic.tsx | 2 + .../useKybExampleBlocksLogic.tsx | 2 + apps/kyb-app/CHANGELOG.md | 8 ++ apps/kyb-app/package.json | 6 +- examples/headless-example/CHANGELOG.md | 8 ++ examples/headless-example/package.json | 6 +- packages/common/CHANGELOG.md | 6 ++ packages/common/package.json | 2 +- packages/common/src/index.ts | 1 + packages/common/src/utils/index.ts | 1 + .../common/src/utils/zod-builder/index.ts | 1 + .../src/utils/zod-builder/zod-builder.ts | 6 ++ packages/workflow-core/.eslintrc.cjs | 3 + packages/workflow-core/CHANGELOG.md | 8 ++ packages/workflow-core/package.json | 4 +- .../plugins/common-plugin/iterative-plugin.ts | 7 +- .../helpers-transformer.ts | 27 +++++-- pnpm-lock.yaml | 32 ++++---- sdks/web-ui-sdk/CHANGELOG.md | 7 ++ sdks/web-ui-sdk/package.json | 4 +- sdks/workflow-browser-sdk/CHANGELOG.md | 8 ++ sdks/workflow-browser-sdk/package.json | 6 +- sdks/workflow-node-sdk/CHANGELOG.md | 7 ++ sdks/workflow-node-sdk/package.json | 4 +- services/workflows-service/CHANGELOG.md | 9 +++ services/workflows-service/package.json | 8 +- .../workflows-service/prisma/data-migrations | 2 +- .../scripts/workflows/dynamic-ui-workflow.ts | 11 +++ ...yb-with-associated-companies-definition.ts | 22 ++++++ .../business/business.repository.intg.test.ts | 74 +++++++++++++++++++ .../src/business/business.repository.ts | 13 +++- .../workflows-service/src/business/schemas.ts | 63 ++++++++++++++++ .../workflows-service/src/common/schemas.ts | 16 ++++ .../end-user.controller.external.intg.test.ts | 2 + .../src/end-user/end-user.module.ts | 2 + .../src/filter/dtos/temp-zod-schemas.ts | 8 +- .../src/workflow/schemas/zod-schemas.ts | 1 + ...kflow-runtime-data.repository.intg.test.ts | 2 + .../workflow.controller.internal.intg.test.ts | 2 + .../src/workflow/workflow.module.ts | 4 +- .../workflow/workflow.service.intg.test.ts | 4 +- .../src/workflow/workflow.service.ts | 6 +- .../workflow/workflow.service.unit.test.ts | 3 + websites/docs/package.json | 2 +- 48 files changed, 385 insertions(+), 58 deletions(-) create mode 100644 packages/common/src/utils/zod-builder/index.ts create mode 100644 packages/common/src/utils/zod-builder/zod-builder.ts create mode 100644 services/workflows-service/src/business/business.repository.intg.test.ts create mode 100644 services/workflows-service/src/business/schemas.ts create mode 100644 services/workflows-service/src/common/schemas.ts diff --git a/apps/backoffice-v2/CHANGELOG.md b/apps/backoffice-v2/CHANGELOG.md index 578beb3531..ab2fe1c66f 100644 --- a/apps/backoffice-v2/CHANGELOG.md +++ b/apps/backoffice-v2/CHANGELOG.md @@ -1,5 +1,14 @@ # @ballerine/backoffice-v2 +## 0.5.53 + +### Patch Changes + +- Updated dependencies + - @ballerine/common@0.7.47 + - @ballerine/workflow-browser-sdk@0.5.47 + - @ballerine/workflow-node-sdk@0.5.47 + ## 0.5.52 ### Patch Changes diff --git a/apps/backoffice-v2/package.json b/apps/backoffice-v2/package.json index 119c385233..ef1069722a 100644 --- a/apps/backoffice-v2/package.json +++ b/apps/backoffice-v2/package.json @@ -1,6 +1,6 @@ { "name": "@ballerine/backoffice-v2", - "version": "0.5.52", + "version": "0.5.53", "description": "Ballerine - Backoffice", "homepage": "https://github.com/ballerine-io/ballerine", "repository": { @@ -51,10 +51,10 @@ }, "dependencies": { "@ballerine/blocks": "0.1.28", - "@ballerine/common": "0.7.46", + "@ballerine/common": "0.7.47", "@ballerine/ui": "^0.3.30", - "@ballerine/workflow-browser-sdk": "0.5.46", - "@ballerine/workflow-node-sdk": "0.5.46", + "@ballerine/workflow-browser-sdk": "0.5.47", + "@ballerine/workflow-node-sdk": "0.5.47", "@fontsource/inter": "^4.5.15", "@formkit/auto-animate": "1.0.0-beta.5", "@hookform/resolvers": "^3.1.0", diff --git a/apps/backoffice-v2/src/domains/workflow-definitions/fetchers.ts b/apps/backoffice-v2/src/domains/workflow-definitions/fetchers.ts index e619f252b4..648dd8538b 100644 --- a/apps/backoffice-v2/src/domains/workflow-definitions/fetchers.ts +++ b/apps/backoffice-v2/src/domains/workflow-definitions/fetchers.ts @@ -18,6 +18,7 @@ export const WorkflowDefinitionConfigSchema = z .object({ enableManualCreation: z.boolean().default(false), isManualCreation: z.boolean().default(false), + isAssociatedCompanyKybEnabled: z.boolean().default(false), }) .passthrough() .nullable(); diff --git a/apps/backoffice-v2/src/lib/blocks/hooks/useAssosciatedCompaniesBlock/useAssociatedCompaniesBlock.tsx b/apps/backoffice-v2/src/lib/blocks/hooks/useAssosciatedCompaniesBlock/useAssociatedCompaniesBlock.tsx index 905938af7f..32eb82eefb 100644 --- a/apps/backoffice-v2/src/lib/blocks/hooks/useAssosciatedCompaniesBlock/useAssociatedCompaniesBlock.tsx +++ b/apps/backoffice-v2/src/lib/blocks/hooks/useAssosciatedCompaniesBlock/useAssociatedCompaniesBlock.tsx @@ -16,6 +16,7 @@ export const motionButtonProps = { export const useAssociatedCompaniesBlock = ({ workflows, dialog, + isAssociatedCompanyKybEnabled, }: { workflows: TWorkflowById[]; dialog: { @@ -30,6 +31,7 @@ export const useAssociatedCompaniesBlock = ({ }>; Close: FunctionComponent<{ associatedCompany: ReturnType }>; }; + isAssociatedCompanyKybEnabled: boolean; }) => { const transformedAssociatedCompanies = useMemo( () => workflows?.map(workflow => associatedCompanyAdapter(workflow)), @@ -143,7 +145,8 @@ export const useAssociatedCompaniesBlock = ({ }) .build() .flat(1), - ...(associatedCompany?.nextEvents?.includes('START_ASSOCIATED_COMPANY_KYB') + ...(isAssociatedCompanyKybEnabled && + associatedCompany?.nextEvents?.includes('START_ASSOCIATED_COMPANY_KYB') ? createBlocksTyped() .addBlock() .addCell({ diff --git a/apps/backoffice-v2/src/lib/blocks/variants/DefaultBlocks/hooks/useDefaultBlocksLogic/useDefaultBlocksLogic.tsx b/apps/backoffice-v2/src/lib/blocks/variants/DefaultBlocks/hooks/useDefaultBlocksLogic/useDefaultBlocksLogic.tsx index a69457ac6b..dd1d99fc6d 100644 --- a/apps/backoffice-v2/src/lib/blocks/variants/DefaultBlocks/hooks/useDefaultBlocksLogic/useDefaultBlocksLogic.tsx +++ b/apps/backoffice-v2/src/lib/blocks/variants/DefaultBlocks/hooks/useDefaultBlocksLogic/useDefaultBlocksLogic.tsx @@ -352,6 +352,8 @@ export const useDefaultBlocksLogic = () => { ), }, + isAssociatedCompanyKybEnabled: + !!workflow?.workflowDefinition?.config?.isAssociatedCompanyKybEnabled, }); const associatedCompaniesInformationBlock = useAssociatedCompaniesInformationBlock( diff --git a/apps/backoffice-v2/src/lib/blocks/variants/KybExampleBlocks/hooks/useKybExampleBlocksLogic/useKybExampleBlocksLogic.tsx b/apps/backoffice-v2/src/lib/blocks/variants/KybExampleBlocks/hooks/useKybExampleBlocksLogic/useKybExampleBlocksLogic.tsx index e8a65a5c17..2efa594adc 100644 --- a/apps/backoffice-v2/src/lib/blocks/variants/KybExampleBlocks/hooks/useKybExampleBlocksLogic/useKybExampleBlocksLogic.tsx +++ b/apps/backoffice-v2/src/lib/blocks/variants/KybExampleBlocks/hooks/useKybExampleBlocksLogic/useKybExampleBlocksLogic.tsx @@ -256,6 +256,8 @@ export const useKybExampleBlocksLogic = () => { ), }, + isAssociatedCompanyKybEnabled: + !!workflow?.workflowDefinition?.config?.isAssociatedCompanyKybEnabled, }); const associatedCompaniesInformationBlock = useAssociatedCompaniesInformationBlock( kybChildWorkflows ?? [], diff --git a/apps/kyb-app/CHANGELOG.md b/apps/kyb-app/CHANGELOG.md index 82eba9a34f..d59da4839a 100644 --- a/apps/kyb-app/CHANGELOG.md +++ b/apps/kyb-app/CHANGELOG.md @@ -1,5 +1,13 @@ # kyb-app +## 0.1.48 + +### Patch Changes + +- Updated dependencies + - @ballerine/common@0.7.47 + - @ballerine/workflow-browser-sdk@0.5.47 + ## 0.1.47 ### Patch Changes diff --git a/apps/kyb-app/package.json b/apps/kyb-app/package.json index a904306c9f..6b5199303b 100644 --- a/apps/kyb-app/package.json +++ b/apps/kyb-app/package.json @@ -1,7 +1,7 @@ { "name": "@ballerine/kyb-app", "private": true, - "version": "0.1.47", + "version": "0.1.48", "type": "module", "scripts": { "dev": "vite", @@ -15,9 +15,9 @@ }, "dependencies": { "@ballerine/blocks": "0.1.28", - "@ballerine/common": "^0.7.46", + "@ballerine/common": "^0.7.47", "@ballerine/ui": "0.3.30", - "@ballerine/workflow-browser-sdk": "0.5.46", + "@ballerine/workflow-browser-sdk": "0.5.47", "@lukemorales/query-key-factory": "^1.0.3", "@radix-ui/react-icons": "^1.3.0", "@rjsf/core": "^5.9.0", diff --git a/examples/headless-example/CHANGELOG.md b/examples/headless-example/CHANGELOG.md index aba1686b6d..78a50eeb49 100644 --- a/examples/headless-example/CHANGELOG.md +++ b/examples/headless-example/CHANGELOG.md @@ -1,5 +1,13 @@ # @ballerine/headless-example +## 0.1.47 + +### Patch Changes + +- Updated dependencies + - @ballerine/common@0.7.47 + - @ballerine/workflow-browser-sdk@0.5.47 + ## 0.1.46 ### Patch Changes diff --git a/examples/headless-example/package.json b/examples/headless-example/package.json index d72fef67c3..379decf374 100644 --- a/examples/headless-example/package.json +++ b/examples/headless-example/package.json @@ -1,7 +1,7 @@ { "name": "@ballerine/headless-example", "private": true, - "version": "0.1.46", + "version": "0.1.47", "type": "module", "scripts": { "spellcheck": "cspell \"*\"", @@ -34,8 +34,8 @@ "vite": "^4.1.0" }, "dependencies": { - "@ballerine/common": "0.7.46", - "@ballerine/workflow-browser-sdk": "0.5.46", + "@ballerine/common": "0.7.47", + "@ballerine/workflow-browser-sdk": "0.5.47", "@felte/reporter-svelte": "^1.1.5", "@felte/validator-zod": "^1.0.13", "@fontsource/inter": "^4.5.15", diff --git a/packages/common/CHANGELOG.md b/packages/common/CHANGELOG.md index f728105e94..751fb7c05a 100644 --- a/packages/common/CHANGELOG.md +++ b/packages/common/CHANGELOG.md @@ -1,5 +1,11 @@ # @ballerine/common +## 0.7.47 + +### Patch Changes + +- Version bump existing changes + ## 0.7.46 ### Patch Changes diff --git a/packages/common/package.json b/packages/common/package.json index a6b8b3def2..3473f4c6ba 100644 --- a/packages/common/package.json +++ b/packages/common/package.json @@ -2,7 +2,7 @@ "private": false, "name": "@ballerine/common", "author": "Ballerine ", - "version": "0.7.46", + "version": "0.7.47", "description": "common", "module": "./dist/esm/index.js", "main": "./dist/cjs/index.js", diff --git a/packages/common/src/index.ts b/packages/common/src/index.ts index 6bf0a984b9..e5434ab5d9 100644 --- a/packages/common/src/index.ts +++ b/packages/common/src/index.ts @@ -19,6 +19,7 @@ export { uniqueArray, zodErrorToReadable, isNonEmptyArray, + zodBuilder, } from './utils'; export type { IErrorWithMessage } from './utils'; diff --git a/packages/common/src/utils/index.ts b/packages/common/src/utils/index.ts index d0e41ed39e..e2bbe3689a 100644 --- a/packages/common/src/utils/index.ts +++ b/packages/common/src/utils/index.ts @@ -18,4 +18,5 @@ export { log } from './log'; export { replaceNullsWithUndefined } from './replace-null-with-undefined'; export { dump } from './dump'; export { isNonEmptyArray } from './is-non-empty-array'; +export { zodBuilder } from './zod-builder'; export { type IErrorWithMessage } from './is-error-with-message'; diff --git a/packages/common/src/utils/zod-builder/index.ts b/packages/common/src/utils/zod-builder/index.ts new file mode 100644 index 0000000000..b3e3c4a4e4 --- /dev/null +++ b/packages/common/src/utils/zod-builder/index.ts @@ -0,0 +1 @@ +export * from './zod-builder'; diff --git a/packages/common/src/utils/zod-builder/zod-builder.ts b/packages/common/src/utils/zod-builder/zod-builder.ts new file mode 100644 index 0000000000..39d298d61b --- /dev/null +++ b/packages/common/src/utils/zod-builder/zod-builder.ts @@ -0,0 +1,6 @@ +import { ZodTypeAny } from 'zod'; + +export const zodBuilder = + () => + (schema: TSchema) => + schema; diff --git a/packages/workflow-core/.eslintrc.cjs b/packages/workflow-core/.eslintrc.cjs index a830309a0d..8949c95e0c 100644 --- a/packages/workflow-core/.eslintrc.cjs +++ b/packages/workflow-core/.eslintrc.cjs @@ -1,4 +1,7 @@ /** @type {import('eslint').Linter.Config} */ module.exports = { extends: ['@ballerine/eslint-config'], + parserOptions: { + project: './tsconfig.eslint.json', + }, }; diff --git a/packages/workflow-core/CHANGELOG.md b/packages/workflow-core/CHANGELOG.md index b77dd753cb..2828f6669a 100644 --- a/packages/workflow-core/CHANGELOG.md +++ b/packages/workflow-core/CHANGELOG.md @@ -1,5 +1,13 @@ # @ballerine/workflow-core +## 0.5.47 + +### Patch Changes + +- Version bump existing changes +- Updated dependencies + - @ballerine/common@0.7.47 + ## 0.5.46 ### Patch Changes diff --git a/packages/workflow-core/package.json b/packages/workflow-core/package.json index 04e4d86857..a86a015149 100644 --- a/packages/workflow-core/package.json +++ b/packages/workflow-core/package.json @@ -1,7 +1,7 @@ { "name": "@ballerine/workflow-core", "author": "Ballerine ", - "version": "0.5.46", + "version": "0.5.47", "description": "workflow-core", "module": "./dist/esm/index.js", "main": "./dist/cjs/index.js", @@ -31,7 +31,7 @@ "node": ">=12" }, "dependencies": { - "@ballerine/common": "0.7.46", + "@ballerine/common": "0.7.47", "ajv": "^8.12.0", "i18n-iso-countries": "^7.6.0", "jmespath": "^0.16.0", diff --git a/packages/workflow-core/src/lib/plugins/common-plugin/iterative-plugin.ts b/packages/workflow-core/src/lib/plugins/common-plugin/iterative-plugin.ts index a326760828..b60d7af2d6 100644 --- a/packages/workflow-core/src/lib/plugins/common-plugin/iterative-plugin.ts +++ b/packages/workflow-core/src/lib/plugins/common-plugin/iterative-plugin.ts @@ -41,6 +41,7 @@ export class IterativePlugin { } console.log('All actions completed successfully'); + return { callbackAction: this.successAction }; } @@ -51,11 +52,14 @@ export class IterativePlugin { for (const transformer of transformers) { mutatedRecord = await this.transformByTransformer(transformer, mutatedRecord); } + return mutatedRecord; } async transformByTransformer(transformer: Transformer, record: AnyRecord) { - console.log(`transformByTransformer() called for mapping: ${transformer.mapping}`); + console.log( + `transformByTransformer() called for mapping: ${JSON.stringify(transformer.mapping)}`, + ); try { return (await transformer.transform(record, { input: 'json', output: 'json' })) as AnyRecord; @@ -71,6 +75,7 @@ export class IterativePlugin { composeErrorResponse(errorMessage: string) { console.error(`Composing error response with message: ${errorMessage}`); + return { callbackAction: this.errorAction, error: errorMessage }; } } diff --git a/packages/workflow-core/src/lib/utils/context-transformers/helpers-transformer.ts b/packages/workflow-core/src/lib/utils/context-transformers/helpers-transformer.ts index 5d2df64ea2..8e19770e3e 100644 --- a/packages/workflow-core/src/lib/utils/context-transformers/helpers-transformer.ts +++ b/packages/workflow-core/src/lib/utils/context-transformers/helpers-transformer.ts @@ -4,7 +4,12 @@ import { search } from 'jmespath'; import { AnyRecord } from '@ballerine/common'; import merge from 'lodash.merge'; -export type THelperMethod = 'regex' | 'imageUrlToBase64' | 'remove' | 'mergeArrayEachItemWithValue'; +export type THelperMethod = + | 'regex' + | 'imageUrlToBase64' + | 'remove' + | 'mergeArrayEachItemWithValue' + | 'omit'; export class HelpersTransformer extends BaseContextTransformer { name = 'helpers-transformer'; mapping: THelperFormatingLogic; @@ -36,12 +41,13 @@ export class HelpersTransformer extends BaseContextTransformer { mergeArrayEachItemWithValue( context: Parameters[0], - attribute: Array, + attribute: AnyRecord[], _value: string, options: { mapJmespath: string; mergeWithJmespath: string }, ) { const jmespathResult = search(context, options.mapJmespath); const mergeWithResult = search(context, options.mergeWithJmespath); + if (!jmespathResult || !mergeWithResult) { console.warn( 'mergeArrayEachItemWithValue: jmespathResult or mergeWithResult is null', @@ -61,7 +67,7 @@ export class HelpersTransformer extends BaseContextTransformer { return jmespathResult.map((item: AnyRecord) => merge(item, mergeWithResult)); } - remove(..._args: Array) { + remove(..._args: any[]) { return undefined; } @@ -93,14 +99,15 @@ export class HelpersTransformer extends BaseContextTransformer { return base64Prefix + base64Image; } - getNestedProperty(record: Record, path: Array) { + getNestedProperty(record: Record, path: string[]) { return path.reduce((prev, curr) => { return prev ? prev[curr] : null; }, record); } - setNestedProperty(obj: Record, path: Array, value: unknown) { + setNestedProperty(obj: Record, path: string[], value: unknown) { let current = obj; + for (let i = 0; i < path.length; i++) { if (i === path.length - 1) { current[path[i] as keyof typeof current] = value; @@ -111,4 +118,14 @@ export class HelpersTransformer extends BaseContextTransformer { } } } + + omit(_context: TContext, attribute: AnyRecord, value: string[]) { + const result = structuredClone(attribute); + + for (const key of value) { + delete result[key]; + } + + return result; + } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c37ef31e7a..219e5ee3ca 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -64,16 +64,16 @@ importers: specifier: 0.1.28 version: link:../../packages/blocks '@ballerine/common': - specifier: 0.7.46 + specifier: 0.7.47 version: link:../../packages/common '@ballerine/ui': specifier: ^0.3.30 version: link:../../packages/ui '@ballerine/workflow-browser-sdk': - specifier: 0.5.46 + specifier: 0.5.47 version: link:../../sdks/workflow-browser-sdk '@ballerine/workflow-node-sdk': - specifier: 0.5.46 + specifier: 0.5.47 version: link:../../sdks/workflow-node-sdk '@fontsource/inter': specifier: ^4.5.15 @@ -380,13 +380,13 @@ importers: specifier: 0.1.28 version: link:../../packages/blocks '@ballerine/common': - specifier: ^0.7.46 + specifier: ^0.7.47 version: link:../../packages/common '@ballerine/ui': specifier: 0.3.30 version: link:../../packages/ui '@ballerine/workflow-browser-sdk': - specifier: 0.5.46 + specifier: 0.5.47 version: link:../../sdks/workflow-browser-sdk '@lukemorales/query-key-factory': specifier: ^1.0.3 @@ -811,10 +811,10 @@ importers: examples/headless-example: dependencies: '@ballerine/common': - specifier: 0.7.46 + specifier: 0.7.47 version: link:../../packages/common '@ballerine/workflow-browser-sdk': - specifier: 0.5.46 + specifier: 0.5.47 version: link:../../sdks/workflow-browser-sdk '@felte/reporter-svelte': specifier: ^1.1.5 @@ -1669,7 +1669,7 @@ importers: packages/workflow-core: dependencies: '@ballerine/common': - specifier: 0.7.46 + specifier: 0.7.47 version: link:../common ajv: specifier: ^8.12.0 @@ -1832,7 +1832,7 @@ importers: sdks/web-ui-sdk: dependencies: '@ballerine/common': - specifier: 0.7.46 + specifier: 0.7.47 version: link:../../packages/common '@zerodevx/svelte-toast': specifier: ^0.8.0 @@ -1959,10 +1959,10 @@ importers: sdks/workflow-browser-sdk: dependencies: '@ballerine/common': - specifier: 0.7.46 + specifier: 0.7.47 version: link:../../packages/common '@ballerine/workflow-core': - specifier: 0.5.46 + specifier: 0.5.47 version: link:../../packages/workflow-core xstate: specifier: ^4.37.0 @@ -2101,7 +2101,7 @@ importers: sdks/workflow-node-sdk: dependencies: '@ballerine/workflow-core': - specifier: 0.5.46 + specifier: 0.5.47 version: link:../../packages/workflow-core json-logic-js: specifier: ^2.0.2 @@ -2343,13 +2343,13 @@ importers: specifier: 3.347.1 version: 3.347.1 '@ballerine/common': - specifier: 0.7.46 + specifier: 0.7.47 version: link:../../packages/common '@ballerine/workflow-core': - specifier: 0.5.46 + specifier: 0.5.47 version: link:../../packages/workflow-core '@ballerine/workflow-node-sdk': - specifier: 0.5.46 + specifier: 0.5.47 version: link:../../sdks/workflow-node-sdk '@faker-js/faker': specifier: ^7.6.0 @@ -2662,7 +2662,7 @@ importers: specifier: ^4.0.0 version: 4.0.0(astro@3.3.3)(tailwindcss@3.3.5)(ts-node@10.9.1) '@ballerine/common': - specifier: ^0.7.46 + specifier: ^0.7.47 version: link:../../packages/common astro: specifier: 3.3.3 diff --git a/sdks/web-ui-sdk/CHANGELOG.md b/sdks/web-ui-sdk/CHANGELOG.md index eab96566b5..96e4ff9817 100644 --- a/sdks/web-ui-sdk/CHANGELOG.md +++ b/sdks/web-ui-sdk/CHANGELOG.md @@ -1,5 +1,12 @@ # web-ui-sdk +## 1.4.45 + +### Patch Changes + +- Updated dependencies + - @ballerine/common@0.7.47 + ## 1.4.44 ### Patch Changes diff --git a/sdks/web-ui-sdk/package.json b/sdks/web-ui-sdk/package.json index 6c40164f85..644b7b4141 100644 --- a/sdks/web-ui-sdk/package.json +++ b/sdks/web-ui-sdk/package.json @@ -21,7 +21,7 @@ "types": "dist/index.d.ts", "name": "@ballerine/web-ui-sdk", "private": false, - "version": "1.4.44", + "version": "1.4.45", "type": "module", "files": [ "dist" @@ -96,7 +96,7 @@ "vitest": "^0.24.5" }, "dependencies": { - "@ballerine/common": "0.7.46", + "@ballerine/common": "0.7.47", "@zerodevx/svelte-toast": "^0.8.0", "compressorjs": "^1.1.1", "deepmerge": "^4.3.0", diff --git a/sdks/workflow-browser-sdk/CHANGELOG.md b/sdks/workflow-browser-sdk/CHANGELOG.md index 6693dd71f2..b6be980d4a 100644 --- a/sdks/workflow-browser-sdk/CHANGELOG.md +++ b/sdks/workflow-browser-sdk/CHANGELOG.md @@ -1,5 +1,13 @@ # @ballerine/workflow-browser-sdk +## 0.5.47 + +### Patch Changes + +- Updated dependencies + - @ballerine/workflow-core@0.5.47 + - @ballerine/common@0.7.47 + ## 0.5.46 ### Patch Changes diff --git a/sdks/workflow-browser-sdk/package.json b/sdks/workflow-browser-sdk/package.json index a40c1d160d..bef7427c57 100644 --- a/sdks/workflow-browser-sdk/package.json +++ b/sdks/workflow-browser-sdk/package.json @@ -1,7 +1,7 @@ { "name": "@ballerine/workflow-browser-sdk", "author": "Ballerine ", - "version": "0.5.46", + "version": "0.5.47", "description": "workflow-browser-sdk", "module": "./dist/esm/index.js", "main": "./dist/cjs/index.js", @@ -33,8 +33,8 @@ "node": ">=12" }, "dependencies": { - "@ballerine/common": "0.7.46", - "@ballerine/workflow-core": "0.5.46", + "@ballerine/common": "0.7.47", + "@ballerine/workflow-core": "0.5.47", "xstate": "^4.37.0" }, "devDependencies": { diff --git a/sdks/workflow-node-sdk/CHANGELOG.md b/sdks/workflow-node-sdk/CHANGELOG.md index 16ff75b7cc..11b798a93b 100644 --- a/sdks/workflow-node-sdk/CHANGELOG.md +++ b/sdks/workflow-node-sdk/CHANGELOG.md @@ -1,5 +1,12 @@ # @ballerine/workflow-node-sdk +## 0.5.47 + +### Patch Changes + +- Updated dependencies + - @ballerine/workflow-core@0.5.47 + ## 0.5.46 ### Patch Changes diff --git a/sdks/workflow-node-sdk/package.json b/sdks/workflow-node-sdk/package.json index cb944fd7bf..6cbe084fa6 100644 --- a/sdks/workflow-node-sdk/package.json +++ b/sdks/workflow-node-sdk/package.json @@ -1,7 +1,7 @@ { "name": "@ballerine/workflow-node-sdk", "author": "Ballerine ", - "version": "0.5.46", + "version": "0.5.47", "description": "workflow-node-sdk", "module": "./dist/esm/index.js", "main": "./dist/cjs/index.js", @@ -28,7 +28,7 @@ "node": ">=12" }, "dependencies": { - "@ballerine/workflow-core": "0.5.46", + "@ballerine/workflow-core": "0.5.47", "json-logic-js": "^2.0.2", "xstate": "^4.36.0" }, diff --git a/services/workflows-service/CHANGELOG.md b/services/workflows-service/CHANGELOG.md index d79c15ba4f..3b14bc6503 100644 --- a/services/workflows-service/CHANGELOG.md +++ b/services/workflows-service/CHANGELOG.md @@ -1,5 +1,14 @@ # @ballerine/workflows-service +## 0.5.47 + +### Patch Changes + +- Updated dependencies + - @ballerine/workflow-core@0.5.47 + - @ballerine/common@0.7.47 + - @ballerine/workflow-node-sdk@0.5.47 + ## 0.5.46 ### Patch Changes diff --git a/services/workflows-service/package.json b/services/workflows-service/package.json index 8acf9fe1cf..7a04fe8963 100644 --- a/services/workflows-service/package.json +++ b/services/workflows-service/package.json @@ -1,7 +1,7 @@ { "name": "@ballerine/workflows-service", "private": false, - "version": "0.5.46", + "version": "0.5.47", "description": "workflow-service", "scripts": { "spellcheck": "cspell \"*\"", @@ -42,9 +42,9 @@ "@aws-sdk/client-s3": "3.347.1", "@aws-sdk/lib-storage": "3.347.1", "@aws-sdk/s3-request-presigner": "3.347.1", - "@ballerine/common": "0.7.46", - "@ballerine/workflow-core": "0.5.46", - "@ballerine/workflow-node-sdk": "0.5.46", + "@ballerine/common": "0.7.47", + "@ballerine/workflow-core": "0.5.47", + "@ballerine/workflow-node-sdk": "0.5.47", "@faker-js/faker": "^7.6.0", "@nestjs/axios": "^2.0.0", "@nestjs/common": "^9.3.12", diff --git a/services/workflows-service/prisma/data-migrations b/services/workflows-service/prisma/data-migrations index fd57f93276..9f268d9ead 160000 --- a/services/workflows-service/prisma/data-migrations +++ b/services/workflows-service/prisma/data-migrations @@ -1 +1 @@ -Subproject commit fd57f932761ddb1f87f8fd5ed4a559deab1dc06d +Subproject commit 9f268d9eadfd33c1a1dedf5f703c01f042df6888 diff --git a/services/workflows-service/scripts/workflows/dynamic-ui-workflow.ts b/services/workflows-service/scripts/workflows/dynamic-ui-workflow.ts index d9e9f816ad..9d45f5ee55 100644 --- a/services/workflows-service/scripts/workflows/dynamic-ui-workflow.ts +++ b/services/workflows-service/scripts/workflows/dynamic-ui-workflow.ts @@ -316,6 +316,17 @@ export const dynamicUiWorkflowDefinition = { transformer: 'jmespath', mapping: `{entity: {data: @, type: 'individual'}}`, }, + { + transformer: 'helper', + mapping: [ + { + source: 'entity.data', + target: 'entity.data', + method: 'omit', + value: ['workflowRuntimeId', 'workflowRuntimeConfig'], + }, + ], + }, ], initEvent: 'start', }, diff --git a/services/workflows-service/scripts/workflows/ui-definition/kyb-with-associated-companies/definition/compose-kyb-with-associated-companies-definition.ts b/services/workflows-service/scripts/workflows/ui-definition/kyb-with-associated-companies/definition/compose-kyb-with-associated-companies-definition.ts index 6df9321b8e..d2b08849a7 100644 --- a/services/workflows-service/scripts/workflows/ui-definition/kyb-with-associated-companies/definition/compose-kyb-with-associated-companies-definition.ts +++ b/services/workflows-service/scripts/workflows/ui-definition/kyb-with-associated-companies/definition/compose-kyb-with-associated-companies-definition.ts @@ -103,6 +103,17 @@ export const composeKybWithAssociatedCompaniesDefinition = ({ transformer: 'jmespath', mapping: `{entity: {data: @, type: 'individual'}}`, }, + { + transformer: 'helper', + mapping: [ + { + source: 'entity.data', + target: 'entity.data', + method: 'omit', + value: ['workflowRuntimeId', 'workflowRuntimeConfig'], + }, + ], + }, ], }, { @@ -114,6 +125,17 @@ export const composeKybWithAssociatedCompaniesDefinition = ({ transformer: 'jmespath', mapping: `{entity: {data: @, type: 'business'}}`, }, + { + transformer: 'helper', + mapping: [ + { + source: 'entity.data', + target: 'entity.data', + method: 'omit', + value: ['workflowRuntimeId', 'workflowRuntimeConfig'], + }, + ], + }, ], }, ], diff --git a/services/workflows-service/src/business/business.repository.intg.test.ts b/services/workflows-service/src/business/business.repository.intg.test.ts new file mode 100644 index 0000000000..ebb595c51b --- /dev/null +++ b/services/workflows-service/src/business/business.repository.intg.test.ts @@ -0,0 +1,74 @@ +import { cleanupDatabase, tearDownDatabase } from '@/test/helpers/database-helper'; +import { fetchServiceFromModule } from '@/test/helpers/nest-app-helper'; +import { PrismaModule } from 'nestjs-prisma'; +import { BusinessRepository } from '@/business/business.repository'; +import { PrismaService } from '@/prisma/prisma.service'; +import { Project } from '@prisma/client'; +import { createCustomer } from '@/test/helpers/create-customer'; +import { createProject } from '@/test/helpers/create-project'; +import { faker } from '@faker-js/faker'; +import { ProjectScopeService } from '@/project/project-scope.service'; + +describe('BusinessRepository #integration #repository', () => { + let businessRepository: BusinessRepository; + let project: Project; + + beforeAll(async () => { + await cleanupDatabase(); + + businessRepository = (await fetchServiceFromModule(BusinessRepository, [ + PrismaModule, + ProjectScopeService, + ])) as unknown as BusinessRepository; + + const prismaService = (await fetchServiceFromModule(PrismaService, [ + PrismaModule, + ])) as unknown as PrismaService; + + const customer = await createCustomer( + prismaService, + faker.datatype.uuid(), + 'secret', + '', + '', + 'webhook-shared-secret', + ); + project = await createProject(prismaService, customer, '5'); + }); + + describe('BusinessRepository.create', () => { + describe('when creating a business with unrecognized fields', () => { + it('should not throw', async () => { + // Arrange + const createPayload = { + data: { + companyName: 'dwadaw', + // @ts-expect-error - testing fields not specified in the validation schema + workflowRuntimeConfig: { + id: '123', + name: 'test', + config: {}, + }, + workflowRuntimeId: '123', + additionalInfo: { + firstName: 'test', + lastName: 'test', + }, + project: { connect: { id: project.id } }, + }, + } satisfies Parameters<(typeof businessRepository)['create']>[0]; + + // Act + const createBusinessPromise = businessRepository.create(createPayload); + + // Assert + await expect(createBusinessPromise).resolves.not.toThrow(); + }); + }); + }); + + afterAll(async () => { + await cleanupDatabase(); + await tearDownDatabase(); + }); +}); diff --git a/services/workflows-service/src/business/business.repository.ts b/services/workflows-service/src/business/business.repository.ts index b9494ee58e..63e706016c 100644 --- a/services/workflows-service/src/business/business.repository.ts +++ b/services/workflows-service/src/business/business.repository.ts @@ -5,6 +5,8 @@ import { BusinessModel } from './business.model'; import { ProjectScopeService } from '@/project/project-scope.service'; import type { TProjectIds } from '@/types'; import { PrismaTransaction } from '@/types'; +import { BusinessCreateInputSchema } from '@/business/schemas'; +import { ValidationError } from '@/errors'; @Injectable() export class BusinessRepository { @@ -16,7 +18,16 @@ export class BusinessRepository { async create( args: Prisma.SelectSubset, ) { - return await this.prisma.business.create(args); + const result = BusinessCreateInputSchema.safeParse(args.data); + + if (!result.success) { + throw ValidationError.fromZodError(result.error); + } + + return await this.prisma.business.create({ + ...args, + data: result.data, + }); } async findMany( diff --git a/services/workflows-service/src/business/schemas.ts b/services/workflows-service/src/business/schemas.ts new file mode 100644 index 0000000000..4e01c8894c --- /dev/null +++ b/services/workflows-service/src/business/schemas.ts @@ -0,0 +1,63 @@ +import z from 'zod'; +import { zodBuilder } from '@ballerine/common'; +import { Prisma } from '@prisma/client'; +import { zApprovalStateEnum } from '@/filter/dtos/temp-zod-schemas'; + +import { InputJsonValueSchema, RecordAnySchema } from '@/common/schemas'; + +export const BaseBusinessRelationships = zodBuilder< + Pick +>()( + z.object({ + workflowRuntimeData: RecordAnySchema.optional(), + endUsers: z.array(RecordAnySchema).optional(), + endUsersOnBusinesses: z.array(RecordAnySchema).optional(), + }), +); + +export const BaseBusinessCreateInputSchema = zodBuilder< + Omit +>()( + z.object({ + id: z.string().cuid().optional(), + correlationId: z.string().optional(), + businessType: z.string().optional(), + createdAt: z.date().optional(), + updatedAt: z.date().optional(), + companyName: z.string(), + registrationNumber: z.string().optional(), + legalForm: z.string().optional(), + country: z.string().optional(), + countryOfIncorporation: z.string().optional(), + dateOfIncorporation: z.date().optional(), + address: InputJsonValueSchema.optional(), + phoneNumber: z.string().optional(), + email: z.string().optional(), + website: z.string().optional(), + industry: z.string().optional(), + taxIdentificationNumber: z.string().optional(), + vatNumber: z.string().optional(), + shareholderStructure: InputJsonValueSchema.optional(), + numberOfEmployees: z.number().optional(), + businessPurpose: z.string().optional(), + documents: InputJsonValueSchema.optional(), + avatarUrl: z.string().optional(), + additionalInfo: InputJsonValueSchema.optional(), + bankInformation: InputJsonValueSchema.optional(), + approvalState: zApprovalStateEnum.optional(), + }), +); +export const BusinessCheckedCreateInputSchema = zodBuilder()( + BaseBusinessCreateInputSchema.merge(BaseBusinessRelationships).extend({ + project: RecordAnySchema, + }), +); +export const BusinessUncheckedCreateInputSchema = zodBuilder()( + BaseBusinessCreateInputSchema.merge(BaseBusinessRelationships).extend({ + projectId: z.string(), + }), +); +export const BusinessCreateInputSchema = z.union([ + BusinessCheckedCreateInputSchema, + BusinessUncheckedCreateInputSchema, +]); diff --git a/services/workflows-service/src/common/schemas.ts b/services/workflows-service/src/common/schemas.ts new file mode 100644 index 0000000000..c1ea548f3a --- /dev/null +++ b/services/workflows-service/src/common/schemas.ts @@ -0,0 +1,16 @@ +import z from 'zod'; + +export const PropertyKeySchema = z.union([z.string(), z.number(), z.symbol()]); + +export const RecordAnySchema = z.record(PropertyKeySchema, z.any()); + +export const RecordUnknownSchema = z.record(PropertyKeySchema, z.any()); + +export const InputJsonValueSchema = z.union([ + z.string(), + z.number(), + z.boolean(), + z.array(z.any()), + RecordAnySchema, +]); +export const JsonValueSchema = z.union([InputJsonValueSchema, z.null()]); diff --git a/services/workflows-service/src/end-user/end-user.controller.external.intg.test.ts b/services/workflows-service/src/end-user/end-user.controller.external.intg.test.ts index d492adff37..5f239408fd 100644 --- a/services/workflows-service/src/end-user/end-user.controller.external.intg.test.ts +++ b/services/workflows-service/src/end-user/end-user.controller.external.intg.test.ts @@ -34,6 +34,7 @@ import { WorkflowTokenRepository } from '@/auth/workflow-token/workflow-token.re import { ClsModule } from 'nestjs-cls'; import { UiDefinitionService } from '@/ui-definition/ui-definition.service'; import { UiDefinitionRepository } from '@/ui-definition/ui-definition.repository'; +import { BusinessService } from '@/business/business.service'; describe('#EndUserControllerExternal', () => { let app: INestApplication; @@ -57,6 +58,7 @@ describe('#EndUserControllerExternal', () => { StorageService, WorkflowEventEmitterService, BusinessRepository, + BusinessService, WorkflowDefinitionRepository, WorkflowRuntimeDataRepository, WorkflowService, diff --git a/services/workflows-service/src/end-user/end-user.module.ts b/services/workflows-service/src/end-user/end-user.module.ts index 1524d9ed52..41e15352da 100644 --- a/services/workflows-service/src/end-user/end-user.module.ts +++ b/services/workflows-service/src/end-user/end-user.module.ts @@ -26,6 +26,7 @@ import { WorkflowTokenRepository } from '@/auth/workflow-token/workflow-token.re import { HttpModule } from '@nestjs/axios'; import { UiDefinitionService } from '@/ui-definition/ui-definition.service'; import { UiDefinitionRepository } from '@/ui-definition/ui-definition.repository'; +import { BusinessService } from '@/business/business.service'; @Module({ imports: [ProjectModule, CustomerModule, HttpModule], @@ -41,6 +42,7 @@ import { UiDefinitionRepository } from '@/ui-definition/ui-definition.repository StorageService, WorkflowEventEmitterService, BusinessRepository, + BusinessService, WorkflowDefinitionRepository, WorkflowRuntimeDataRepository, WorkflowService, diff --git a/services/workflows-service/src/filter/dtos/temp-zod-schemas.ts b/services/workflows-service/src/filter/dtos/temp-zod-schemas.ts index 73f324595d..5fc837496c 100644 --- a/services/workflows-service/src/filter/dtos/temp-zod-schemas.ts +++ b/services/workflows-service/src/filter/dtos/temp-zod-schemas.ts @@ -12,7 +12,7 @@ export const zQueryModeEnum = z.enum(['Default', 'Insensitive']); export const zEnumerable = (schema: ZodSchema) => z.union([schema, schema.array()]); -// @ts-expect-error - It is expected for z.lazy to be any. +// @ts-ignore - It is expected for z.lazy to be any. export const NestedIntFilterSchema = z.lazy(() => z.object({ equals: z.number().optional(), @@ -107,7 +107,7 @@ export const zStringNullableFilterStringNullUnion = z.union([ z.null(), ]); -// @ts-expect-error - It is expected for z.lazy to be any. +// @ts-ignore - It is expected for z.lazy to be any. export const NestedIntNullableFilterSchema = z.lazy(() => z .object({ @@ -142,7 +142,7 @@ export const IntNullableFilterSchema = z.lazy(() => export const zApprovalStateEnum = z.enum(['APPROVED', 'REJECTED', 'PROCESSING', 'NEW']); -// @ts-expect-error - It is expected for z.lazy to be any. +// @ts-ignore - It is expected for z.lazy to be any. export const NestedEnumApprovalStateFilter = z.lazy(() => z.object({ equals: zApprovalStateEnum.optional(), @@ -170,7 +170,7 @@ export const BusinessRelationFilterSchema = z.object({ isNot: z.lazy(() => BusinessWhereInputSchema).optional(), }); -// @ts-expect-error - It is expected for z.lazy to be any. +// @ts-ignore - It is expected for z.lazy to be any. export const WorkflowRuntimeDataWhereInputSchema = z.lazy(() => z .object({ diff --git a/services/workflows-service/src/workflow/schemas/zod-schemas.ts b/services/workflows-service/src/workflow/schemas/zod-schemas.ts index 2fc69ba123..3a3512d427 100644 --- a/services/workflows-service/src/workflow/schemas/zod-schemas.ts +++ b/services/workflows-service/src/workflow/schemas/zod-schemas.ts @@ -3,6 +3,7 @@ import { z } from 'zod'; export const ConfigSchema = z .object({ + isAssociatedCompanyKybEnabled: z.boolean().optional(), isCaseOverviewEnabled: z.boolean().optional(), isLegacyReject: z.boolean().optional(), isLockedDocumentCategoryAndType: z.boolean().optional(), diff --git a/services/workflows-service/src/workflow/workflow-runtime-data.repository.intg.test.ts b/services/workflows-service/src/workflow/workflow-runtime-data.repository.intg.test.ts index d49a5d2a1b..66db3eb7b9 100644 --- a/services/workflows-service/src/workflow/workflow-runtime-data.repository.intg.test.ts +++ b/services/workflows-service/src/workflow/workflow-runtime-data.repository.intg.test.ts @@ -30,6 +30,7 @@ import { WorkflowDefinitionRepository } from '@/workflow-defintion/workflow-defi import { UiDefinitionService } from '@/ui-definition/ui-definition.service'; import { UiDefinitionRepository } from '@/ui-definition/ui-definition.repository'; import { faker } from '@faker-js/faker'; +import { BusinessService } from '@/business/business.service'; describe('#Workflow Runtime Repository Integration Tests', () => { let workflowRuntimeRepository: WorkflowRuntimeDataRepository; @@ -51,6 +52,7 @@ describe('#Workflow Runtime Repository Integration Tests', () => { StorageService, WorkflowEventEmitterService, BusinessRepository, + BusinessService, WorkflowDefinitionRepository, WorkflowService, EventEmitter2, diff --git a/services/workflows-service/src/workflow/workflow.controller.internal.intg.test.ts b/services/workflows-service/src/workflow/workflow.controller.internal.intg.test.ts index 7d1bc773e3..9e088a9a96 100644 --- a/services/workflows-service/src/workflow/workflow.controller.internal.intg.test.ts +++ b/services/workflows-service/src/workflow/workflow.controller.internal.intg.test.ts @@ -33,6 +33,7 @@ import { Request } from 'express'; import { WorkflowDefinitionRepository } from '@/workflow-defintion/workflow-definition.repository'; import { UiDefinitionService } from '@/ui-definition/ui-definition.service'; import { UiDefinitionRepository } from '@/ui-definition/ui-definition.repository'; +import { BusinessService } from '@/business/business.service'; describe('/api/v1/internal/workflows #api #integration', () => { let app: INestApplication; @@ -60,6 +61,7 @@ describe('/api/v1/internal/workflows #api #integration', () => { StorageService, WorkflowEventEmitterService, BusinessRepository, + BusinessService, WorkflowDefinitionRepository, WorkflowRuntimeDataRepository, WorkflowService, diff --git a/services/workflows-service/src/workflow/workflow.module.ts b/services/workflows-service/src/workflow/workflow.module.ts index cf22d2788a..d7a11d28b3 100644 --- a/services/workflows-service/src/workflow/workflow.module.ts +++ b/services/workflows-service/src/workflow/workflow.module.ts @@ -34,7 +34,8 @@ import { WorkflowControllerExternal } from '@/workflow/workflow.controller.exter import { WorkflowControllerInternal } from '@/workflow/workflow.controller.internal'; import { WorkflowService } from '@/workflow/workflow.service'; import { HttpModule } from '@nestjs/axios'; -import { Module, forwardRef } from '@nestjs/common'; +import { forwardRef, Module } from '@nestjs/common'; +import { BusinessService } from '@/business/business.service'; @Module({ controllers: [WorkflowControllerExternal, WorkflowControllerInternal], @@ -54,6 +55,7 @@ import { Module, forwardRef } from '@nestjs/common'; EndUserRepository, EndUserService, BusinessRepository, + BusinessService, EntityRepository, StorageService, FileRepository, diff --git a/services/workflows-service/src/workflow/workflow.service.intg.test.ts b/services/workflows-service/src/workflow/workflow.service.intg.test.ts index 6c7e2e5525..f4ba7a5542 100644 --- a/services/workflows-service/src/workflow/workflow.service.intg.test.ts +++ b/services/workflows-service/src/workflow/workflow.service.intg.test.ts @@ -30,7 +30,8 @@ import { WorkflowDefinitionRepository } from '@/workflow-defintion/workflow-defi import { UiDefinitionService } from '@/ui-definition/ui-definition.service'; import { UiDefinitionRepository } from '@/ui-definition/ui-definition.repository'; import { faker } from '@faker-js/faker'; -import { BUILT_IN_EVENT, ARRAY_MERGE_OPTION, ArrayMergeOption } from '@ballerine/workflow-core'; +import { ARRAY_MERGE_OPTION, ArrayMergeOption, BUILT_IN_EVENT } from '@ballerine/workflow-core'; +import { BusinessService } from '@/business/business.service'; describe('WorkflowService', () => { let workflowRuntimeRepository: WorkflowRuntimeDataRepository; @@ -54,6 +55,7 @@ describe('WorkflowService', () => { StorageService, WorkflowEventEmitterService, BusinessRepository, + BusinessService, WorkflowDefinitionRepository, WorkflowService, EventEmitter2, diff --git a/services/workflows-service/src/workflow/workflow.service.ts b/services/workflows-service/src/workflow/workflow.service.ts index 47f5f2dc4a..4ff3ce91ea 100644 --- a/services/workflows-service/src/workflow/workflow.service.ts +++ b/services/workflows-service/src/workflow/workflow.service.ts @@ -91,6 +91,7 @@ import { beginTransactionIfNotExistCurry, defaultPrismaTransactionOptions, } from '@/prisma/prisma.util'; +import { BusinessService } from '@/business/business.service'; type TEntityId = string; @@ -114,6 +115,7 @@ export class WorkflowService { protected readonly endUserRepository: EndUserRepository, protected readonly endUserService: EndUserService, protected readonly businessRepository: BusinessRepository, + protected readonly businessService: BusinessService, protected readonly entityRepository: EntityRepository, protected readonly customerService: CustomerService, protected readonly fileService: FileService, @@ -1696,7 +1698,7 @@ export class WorkflowService { ) { const data = context.entity.data as Record; - const { id } = await this.endUserRepository.create({ + const { id } = await this.endUserService.create({ data: { correlationId: entity.id, email: data.email, @@ -1717,7 +1719,7 @@ export class WorkflowService { projectIds: TProjectIds, currentProjectId: TProjectId, ) { - const { id } = await this.businessRepository.create({ + const { id } = await this.businessService.create({ data: { correlationId: entity.id, ...(context.entity.data as object), diff --git a/services/workflows-service/src/workflow/workflow.service.unit.test.ts b/services/workflows-service/src/workflow/workflow.service.unit.test.ts index a38ecc52ec..c0fcf49877 100644 --- a/services/workflows-service/src/workflow/workflow.service.unit.test.ts +++ b/services/workflows-service/src/workflow/workflow.service.unit.test.ts @@ -101,6 +101,7 @@ describe('WorkflowService', () => { let workflowRuntimeDataRepo; let projectScopeService; let businessRepo; + let businessService; let customerService; let endUserRepo; let entityRepo; @@ -131,6 +132,7 @@ describe('WorkflowService', () => { const workflowDefinitionRepo = new FakeWorkflowDefinitionRepo(); workflowRuntimeDataRepo = new FakeWorkflowRuntimeDataRepo(); businessRepo = new FakeBusinessRepo(); + businessService = new FakeBusinessRepo(); endUserRepo = new FakeEndUserRepo(); entityRepo = new FakeEntityRepo(); customerService = new FakeCustomerRepo(); @@ -183,6 +185,7 @@ describe('WorkflowService', () => { endUserRepo, {} as any, businessRepo, + businessService, entityRepo, customerService, {} as any, diff --git a/websites/docs/package.json b/websites/docs/package.json index c8b49fa9f6..9578a9cb24 100644 --- a/websites/docs/package.json +++ b/websites/docs/package.json @@ -17,7 +17,7 @@ "dependencies": { "@astrojs/starlight": "0.11.1", "@astrojs/tailwind": "^4.0.0", - "@ballerine/common": "^0.7.46", + "@ballerine/common": "^0.7.47", "astro": "3.3.3", "sharp": "^0.32.4", "shiki": "^0.14.3"