feat: extension "Product addons"#455
Open
sdedeo2025 wants to merge 2 commits into
Open
Conversation
|
Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA). View this failed invocation of the CLA check for more information. For the most up to date status, view the checks section at the bottom of the pull request. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Adds the Product Addons extension (
dev.ucp.shopping.product_addons), enabling shoppers to select and change product addons (e.g., Warranty, Engraving, Gift Wrapping) directly within cart and checkout sessions.Addons are optional purchasable extras associated with a product — unlike variant-defining options (Size, Color) which are handled at the catalog level, addons represent supplementary choices that affect pricing without changing the base
product variant. Without this extension, businesses must either inflate their product catalogs with pre-built variants for every addon permutation, or handle addon selection entirely outside the checkout flow.
How it works:
item.idas a product identifier — optionally with selected addons, or with no addons to receive server defaults.choices, each with its ownid,title,defaultflag, andtotalsrepresenting the cost of that specific addon choice.selected_choice_id. The business recalculates pricing and returns updated totals.Design decisions:
$defs+allOfcomposition pattern asdiscount.jsonandfulfillment.json.selected_choice_id(bidirectional) +choices[](response-only).addon_choice) withid,title,image_url,default, andtotals— not derived fromitem.json, since addon choices are conceptually different from line item products.selected_choice_idis optional on create (server picks defaults based ondefaultflag), optional on update.addonscontinue to work as standard line items.Files:
source/schemas/shopping/product_addons.json— Extension schema withaddon_choice,item_addon, extendeditem,line_item, and$defsfordev.ucp.shopping.checkout/dev.ucp.shopping.cartdocs/specification/product-addons.md— Extension documentation with discovery, schema definitions, and examples (product ID only with server defaults, selected addons, upgrade warranty, mixed items with and without addons)mkdocs.yml— Nav entries for the new docCategory (Required)
ucp-schematool (resolver, linter, validator). (Requires Maintainer approval)Related Issues
None.
Checklist