Skip to content

feat(core-flows,order,medusa,types): allow to update the original order.email on order customer transfer requests#14234

Merged
shahednasser merged 6 commits intodevelopfrom
fix/order-email-customer-transfer
Apr 10, 2026
Merged

feat(core-flows,order,medusa,types): allow to update the original order.email on order customer transfer requests#14234
shahednasser merged 6 commits intodevelopfrom
fix/order-email-customer-transfer

Conversation

@NicolasGorga
Copy link
Copy Markdown
Contributor

Summary

What — What changes are introduced in this PR?

Update order.email upon customer transfer acceptance.

Why — Why are these changes relevant or necessary?

To prevent the order from retaining a link to the old customer email and align it to it's customer relation after the transfer is accepted.

How — How have these changes been implemented?

When processing the transfer customer action operation set the order.email property.

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

Integration tests.


Examples

Provide examples or code snippets that demonstrate how this feature works, or how it can be used in practice.
This helps with documentation and ensures maintainers can quickly understand and verify the change.

// Example usage

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

Add any additional context, related issues, or references that might help the reviewer understand this PR.

fixes #14161

@NicolasGorga NicolasGorga requested a review from a team as a code owner December 7, 2025 04:50
@vercel
Copy link
Copy Markdown

vercel bot commented Dec 7, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

9 Skipped Deployments
Project Deployment Actions Updated (UTC)
api-reference Ignored Ignored Apr 9, 2026 4:35pm
api-reference-v2 Ignored Ignored Preview Apr 9, 2026 4:35pm
bloom-docs Ignored Ignored Preview Apr 9, 2026 4:35pm
cloud-docs Ignored Ignored Preview Apr 9, 2026 4:35pm
docs-ui Ignored Ignored Preview Apr 9, 2026 4:35pm
docs-v2 Ignored Ignored Preview Apr 9, 2026 4:35pm
medusa-docs Ignored Ignored Preview Apr 9, 2026 4:35pm
resources-docs Ignored Ignored Preview Apr 9, 2026 4:35pm
user-guide Ignored Ignored Preview Apr 9, 2026 4:35pm

Request Review

@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Dec 7, 2025

🦋 Changeset detected

Latest commit: bc446b1

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

This PR includes changesets to release 77 packages
Name Type
@medusajs/core-flows Patch
@medusajs/order Patch
@medusajs/medusa Patch
@medusajs/test-utils Patch
integration-tests-http Patch
@medusajs/medusa-oas-cli Patch
@medusajs/analytics Patch
@medusajs/api-key Patch
@medusajs/auth Patch
@medusajs/caching Patch
@medusajs/cart Patch
@medusajs/currency Patch
@medusajs/customer Patch
@medusajs/file Patch
@medusajs/fulfillment Patch
@medusajs/index Patch
@medusajs/inventory Patch
@medusajs/link-modules Patch
@medusajs/locking Patch
@medusajs/notification Patch
@medusajs/payment Patch
@medusajs/pricing Patch
@medusajs/product Patch
@medusajs/promotion Patch
@medusajs/rbac Patch
@medusajs/region Patch
@medusajs/sales-channel Patch
@medusajs/settings Patch
@medusajs/stock-location Patch
@medusajs/store Patch
@medusajs/tax Patch
@medusajs/translation Patch
@medusajs/user Patch
@medusajs/workflow-engine-inmemory Patch
@medusajs/workflow-engine-redis Patch
@medusajs/draft-order Patch
@medusajs/oas-github-ci Patch
@medusajs/cache-inmemory Patch
@medusajs/cache-redis Patch
@medusajs/event-bus-local Patch
@medusajs/event-bus-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/framework Patch
@medusajs/js-sdk Patch
@medusajs/modules-sdk Patch
@medusajs/orchestration Patch
@medusajs/types Patch
@medusajs/utils Patch
@medusajs/workflows-sdk Patch
@medusajs/http-types-generator Patch
@medusajs/cli 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
Copy Markdown
Contributor

@olivermrbl olivermrbl left a comment

Choose a reason for hiding this comment

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

thought: based on the comments in the code, keeping the original email seemed to have been a very intentional action. I can't remember why, but maybe @fPolic can pitch in

@fPolic
Copy link
Copy Markdown
Contributor

fPolic commented Dec 8, 2025

keeping the original email seemed to have been a very intentional action

I think we wanted to keep email associated with the order in case purchase was intentionally made with that email and the email needs to be associated with the purchased good.

This seems to be an issue when doing transfers between registered accounts (while the original idea behind this feature was to allow claiming an order from unregisterd -> registered account).
However, solution could be for users to implement this when sending the request email as described in the issue:

// send confirmation to this email in subscriber
const emailToConfirmTransfer = order.customer?.email ?? order.email
  • if customer is an unregistered account, we will have the same behaviour and the email will be sent to order.email
  • if customer is registered account, email will be send to the current registered owner

@NicolasGorga
Copy link
Copy Markdown
Contributor Author

keeping the original email seemed to have been a very intentional action

I think we wanted to keep email associated with the order in case purchase was intentionally made with that email and the email needs to be associated with the purchased good.

This seems to be an issue when doing transfers between registered accounts (while the original idea behind this feature was to allow claiming an order from unregisterd -> registered account). However, solution could be for users to implement this when sending the request email as described in the issue:

// send confirmation to this email in subscriber
const emailToConfirmTransfer = order.customer?.email ?? order.email
  • if customer is an unregistered account, we will have the same behaviour and the email will be sent to order.email
  • if customer is registered account, email will be send to the current registered owner

But I think not the majority of the cases would need this: I think we wanted to keep email associated with the order in case purchase was intentionally made with that email and the email needs to be associated with the purchased good. so it would confuse the ones that don't need these. The few cases that need this, would be able to still retrieve the original customer's email through the first order change action type TRANSFER_CUSTOMER no?

@NicolasGorga
Copy link
Copy Markdown
Contributor Author

Let me know what you think of my last comment guys @fPolic @olivermrbl

orderId,
{
select: ["id", "version", "items.detail", "summary", "total"],
select: ["id", "version", "items.detail", "summary", "total", "email"],
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Q: wondering if it would have any side effect to rely on the orderService_ instead of retrieve (same for retrieveOrderChange) which serialize their result upon returning 🤔

@github-actions
Copy link
Copy Markdown
Contributor

This PR is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 5 days.

@github-actions github-actions bot added the Stale label Jan 13, 2026
@github-actions
Copy link
Copy Markdown
Contributor

This PR was closed because it has been stalled for 5 days with no activity.

@github-actions github-actions bot closed this Jan 18, 2026
@NicolasGorga NicolasGorga reopened this Jan 18, 2026
@github-actions github-actions bot removed the Stale label Jan 20, 2026
@NicolasGorga NicolasGorga requested a review from fPolic January 30, 2026 15:50
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Mar 4, 2026

This PR is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 5 days.

@github-actions github-actions bot added the Stale label Mar 4, 2026
@github-actions
Copy link
Copy Markdown
Contributor

This PR was closed because it has been stalled for 5 days with no activity.

@github-actions github-actions bot closed this Mar 12, 2026
@NicolasGorga NicolasGorga reopened this Mar 23, 2026
@github-actions github-actions bot removed the Stale label Mar 26, 2026
@medusa-os-bot
Copy link
Copy Markdown

medusa-os-bot bot commented Apr 9, 2026

Thank you for your contribution!

After an initial review, this PR looks good to us. Here's a summary:

✅ Linked to a verified issue
✅ Changeset included with correct format
✅ Integration tests updated

Notes:

There is an open design discussion from @fPolic in the comments (December 2025) questioning whether updating order.email on transfer acceptance was intentional — the original behaviour was to keep the email tied to the purchase. The PR was stale-closed twice before being reopened, so it seems this has not been resolved. A team member should confirm alignment on the intended behaviour before merging.

Additionally, email is already present in orderEditableAttributes in the current develop state of apply-order-changes.ts. The +1 line added to that file in this PR should be double-checked to ensure it doesn't produce a duplicate entry.

A team member will do a final review before this is merged. We appreciate your patience!

@NicolasGorga NicolasGorga changed the title fix(core-flows,order): update order.email on accepted customer transfer feat(core-flows,order,medusa,types): allow to update the original order.email on order customer transfer requests Apr 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Order Transfer Email Sent to Wrong Recipient on Re-Transfer

5 participants