fix: do not pass additional_data to service (#9532)

Fixes: FRMW-2743

This PR extracts and removes the `additional_data` from the workflow input before calling the steps and hence the `additional_data` is not passed down to the service layer.

However, this bug has made me discover one inconsistency in the input structure of certain workflows.

 **Following is the input structure of the `updateProductsWorkflow`**. Here, we accept the `products` and the `additional_data` as two separate top-level properties.

```ts
// Shape
export type UpdateProductsWorkflowInputSelector = {
  selector: ProductTypes.FilterableProductProps
  update: Omit<ProductTypes.UpdateProductDTO, "variants"> & {
    sales_channels?: { id: string }[]
    variants?: UpdateProductVariantWorkflowInputDTO[]
  }
} & AdditionalData

// Calling the workflow
const { result } = await updateProductsWorkflow(req.scope).run({
  input: {
    selector: { id: req.params.id },
    update,
    additional_data,
  },
})
```

 **Following in the input structure of the `updateCartWorflow`**. In this case, we are accepting the cart properties at the top-level, hence the `additional_data` is merged within those properties, increasing the chance of passing it down to the service layer by mistake.

```ts
// Shape
WorkflowData<UpdateCartWorkflowInputDTO & AdditionalData>

// Calling the workflow
await workflow.run({
  input: {
    ...req.validatedBody // Additional data is part of the validatedBody,
    id: req.params.id,
  },
})
```

Ideally, the input of `updateCartWorkflow` should look as follows.

```ts
WorkflowData<{ cart: UpdateCartWorkflowInputDTO } & AdditionalData>
```
This commit is contained in:
Harminder Virk
2024-10-12 05:13:13 +05:30
committed by GitHub
parent c8b375ae2d
commit 93b38bf47b

View File

@@ -68,7 +68,11 @@ export const updateCartWorkflow = createWorkflow(
const cartInput = transform( const cartInput = transform(
{ input, region, customerData, salesChannel, cartToUpdate }, { input, region, customerData, salesChannel, cartToUpdate },
(data) => { (data) => {
const { promo_codes, ...updateCartData } = data.input const {
promo_codes,
additional_data: _,
...updateCartData
} = data.input
const data_ = { const data_ = {
...updateCartData, ...updateCartData,