Skip to content

Conversation

NicolasGorga
Copy link
Contributor

@NicolasGorga NicolasGorga commented Oct 13, 2025

Summary

What — What changes are introduced in this PR?

Normalization step for specific product relations like (category_ids, collection, and tag_ids), before listing products inside of updateProductsStep.

Why — Why are these changes relevant or necessary?

The product module service already handles this when a product is upserted, by applying this normalization to the payload before executing the update. The problem is that since there is a call to list products, if we pass the payload as is, we would have an error since the Product entity doesn't have a property like category_ids as this would be passed as part of the relations config.

How — How have these changes been implemented?

Since there was already logic for normalizing these relations inside the product module service normalizeUpdateProductInput method, I extracted out the common functionality from this method that I need in the updateProductsStep and placed it inside a function in /packages/core/utils/src/products.

In the createProductsStep after applying this normalization to the input passed to getSelectsAndRelationsFromObjectArray the error is resolved, as we reference the correct relation names when listing the products.

Testing — How have these changes been tested, or how can the reviewer test the feature?

I searched inside the integration-tests to understand how this slipped by and i see that the updateProductsWorkflow is tested through the admin update products api endpoint, which enforces the expected (categories, tags, collection) properties through its validator.

I tested this changes locally by calling the workflow directly before applying the fix like:

const { result } = await updateProductsWorkflow(req.scope).run({
    input: {
      selector: { id: 'prod_01K6AR68Q5BPPJ8HN9CCNQXKJE' },
      update: {
        category_ids: ['pcat_01K6AR68PYMASKGQNFZD5S2KFK']
      }
    }
  })

Which would throw error as described in the linked issue. After applying the fix and running again, it works as expected.

Checklist

Please ensure the following before requesting a review:

  • I have added a changeset for this PR
    • Every non-breaking change should be marked as a patch
    • To add a changeset, run yarn changeset and follow the prompts
  • The changes are covered by relevant tests
  • I have verified the code works as intended locally
  • I have linked the related issue(s) if applicable

Additional Context

I am not quite sure if, although this fixes the issue immediately for users, if we want this long term. The current core api endpoint enforces a non problematic payload as explained before, but this does not match the workflow expected input, which causes confusion IMO.

Instead of updating the types i went with this approach to avoid a breaking change, but let me know what you think. Also, interested to know if there is anywhere i could place a test for this.

Fixes #13708

@NicolasGorga NicolasGorga requested a review from a team as a code owner October 13, 2025 21:10
Copy link

changeset-bot bot commented Oct 13, 2025

🦋 Changeset detected

Latest commit: 4df3c49

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 74 packages
Name Type
@medusajs/core-flows Patch
@medusajs/product Patch
@medusajs/utils Patch
@medusajs/medusa Patch
integration-tests-http Patch
@medusajs/framework Patch
@medusajs/modules-sdk Patch
@medusajs/orchestration Patch
@medusajs/workflows-sdk Patch
@medusajs/cli Patch
@medusajs/medusa-oas-cli Patch
@medusajs/test-utils Patch
@medusajs/analytics Patch
@medusajs/api-key Patch
@medusajs/auth Patch
@medusajs/cache-inmemory Patch
@medusajs/cache-redis Patch
@medusajs/caching Patch
@medusajs/cart Patch
@medusajs/currency Patch
@medusajs/customer Patch
@medusajs/event-bus-local Patch
@medusajs/event-bus-redis Patch
@medusajs/file Patch
@medusajs/fulfillment Patch
@medusajs/index Patch
@medusajs/inventory Patch
@medusajs/link-modules Patch
@medusajs/locking Patch
@medusajs/notification Patch
@medusajs/order Patch
@medusajs/payment Patch
@medusajs/pricing Patch
@medusajs/promotion Patch
@medusajs/region Patch
@medusajs/sales-channel Patch
@medusajs/settings Patch
@medusajs/stock-location Patch
@medusajs/store Patch
@medusajs/tax Patch
@medusajs/user Patch
@medusajs/workflow-engine-inmemory Patch
@medusajs/workflow-engine-redis Patch
@medusajs/analytics-local Patch
@medusajs/analytics-posthog Patch
@medusajs/auth-emailpass Patch
@medusajs/auth-github Patch
@medusajs/auth-google Patch
@medusajs/caching-redis Patch
@medusajs/file-local Patch
@medusajs/file-s3 Patch
@medusajs/fulfillment-manual Patch
@medusajs/locking-postgres Patch
@medusajs/locking-redis Patch
@medusajs/notification-local Patch
@medusajs/notification-sendgrid Patch
@medusajs/payment-stripe Patch
@medusajs/draft-order Patch
@medusajs/oas-github-ci Patch
@medusajs/js-sdk Patch
@medusajs/types Patch
@medusajs/deps Patch
@medusajs/telemetry Patch
@medusajs/admin-bundler Patch
@medusajs/admin-sdk Patch
@medusajs/admin-shared Patch
@medusajs/admin-vite-plugin Patch
@medusajs/dashboard Patch
@medusajs/icons Patch
@medusajs/toolbox Patch
@medusajs/ui-preset Patch
create-medusa-app Patch
medusa-dev-cli Patch
@medusajs/ui Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Copy link

vercel bot commented Oct 13, 2025

@NicolasGorga is attempting to deploy a commit to the medusajs Team on Vercel.

A member of the Team first needs to authorize it.

@willbouch willbouch changed the title fix(@medusajs/core-flows): update products workflow inexistent properties fix(core-flows): update products workflow inexistent properties Oct 14, 2025
cursor[bot]

This comment was marked as outdated.

Copy link
Contributor

@willbouch willbouch left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I havent had time to check just yet. Will do this week

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: updateProductsWorkflow - Entity 'Product' does not have property 'category_ids'

2 participants