spree_api 6.0.0.beta4 → 6.0.0.rc2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Rakefile +4 -48
- data/app/controllers/concerns/spree/api/v3/admin/email_template_lookup.rb +139 -0
- data/app/controllers/concerns/spree/api/v3/admin/product_membership.rb +10 -0
- data/app/controllers/concerns/spree/api/v3/admin/stock_receipt_actions.rb +26 -4
- data/app/controllers/concerns/spree/api/v3/admin/store_context.rb +1 -1
- data/app/controllers/concerns/spree/api/v3/admin/subclassed_resource.rb +15 -29
- data/app/controllers/concerns/spree/api/v3/admin/validation_details.rb +1 -1
- data/app/controllers/concerns/spree/api/v3/cart_resolvable.rb +10 -2
- data/app/controllers/concerns/spree/api/v3/channel_resolution.rb +3 -3
- data/app/controllers/concerns/spree/api/v3/company_address_writes.rb +3 -1
- data/app/controllers/concerns/spree/api/v3/current_password_confirmation.rb +1 -1
- data/app/controllers/concerns/spree/api/v3/error_handler.rb +55 -4
- data/app/controllers/concerns/spree/api/v3/file_uploads.rb +35 -0
- data/app/controllers/concerns/spree/api/v3/http_caching.rb +44 -11
- data/app/controllers/concerns/spree/api/v3/idempotent.rb +20 -5
- data/app/controllers/concerns/spree/api/v3/items_payload.rb +1 -1
- data/app/controllers/concerns/spree/api/v3/money_params.rb +52 -0
- data/app/controllers/concerns/spree/api/v3/order_lock.rb +2 -2
- data/app/controllers/concerns/spree/api/v3/orders/claim_actions.rb +1 -5
- data/app/controllers/concerns/spree/api/v3/orders/delivery_actions.rb +7 -11
- data/app/controllers/concerns/spree/api/v3/orders/exchange_actions.rb +1 -4
- data/app/controllers/concerns/spree/api/v3/orders/fulfillment_actions.rb +3 -15
- data/app/controllers/concerns/spree/api/v3/orders/post_sale_actions.rb +2 -10
- data/app/controllers/concerns/spree/api/v3/orders/return_actions.rb +1 -4
- data/app/controllers/concerns/spree/api/v3/orders/shipping_label_actions.rb +8 -28
- data/app/controllers/concerns/spree/api/v3/params_normalizer.rb +5 -0
- data/app/controllers/concerns/spree/api/v3/permission_serialization.rb +9 -1
- data/app/controllers/concerns/spree/api/v3/purchase_serialization.rb +26 -0
- data/app/controllers/concerns/spree/api/v3/request_params.rb +65 -0
- data/app/controllers/concerns/spree/api/v3/seller/seller_context.rb +1 -1
- data/app/controllers/concerns/spree/api/v3/store/storefront_products.rb +5 -4
- data/app/controllers/concerns/spree/api/v3/storefront_gating.rb +11 -5
- data/app/controllers/concerns/spree/api/v3/strict_money_params.rb +94 -0
- data/app/controllers/spree/api/v3/admin/admin_users_controller.rb +8 -4
- data/app/controllers/spree/api/v3/admin/allowed_origins_controller.rb +8 -1
- data/app/controllers/spree/api/v3/admin/api_keys_controller.rb +16 -8
- data/app/controllers/spree/api/v3/admin/base_controller.rb +1 -0
- data/app/controllers/spree/api/v3/admin/catalogs/order_minimums_controller.rb +2 -6
- data/app/controllers/spree/api/v3/admin/catalogs/quantity_rules_controller.rb +7 -9
- data/app/controllers/spree/api/v3/admin/catalogs_controller.rb +61 -34
- data/app/controllers/spree/api/v3/admin/categories/products_controller.rb +4 -1
- data/app/controllers/spree/api/v3/admin/categories_controller.rb +40 -20
- data/app/controllers/spree/api/v3/admin/channels_controller.rb +39 -10
- data/app/controllers/spree/api/v3/admin/claim_reasons_controller.rb +5 -1
- data/app/controllers/spree/api/v3/admin/collections/products_controller.rb +5 -3
- data/app/controllers/spree/api/v3/admin/collections_controller.rb +44 -15
- data/app/controllers/spree/api/v3/admin/commission_rates_controller.rb +62 -14
- data/app/controllers/spree/api/v3/admin/companies/addresses_controller.rb +11 -4
- data/app/controllers/spree/api/v3/admin/companies/invitations_controller.rb +1 -5
- data/app/controllers/spree/api/v3/admin/companies/memberships_controller.rb +9 -5
- data/app/controllers/spree/api/v3/admin/companies/tax_exemption_certificates_controller.rb +20 -27
- data/app/controllers/spree/api/v3/admin/companies/tax_identifiers_controller.rb +6 -5
- data/app/controllers/spree/api/v3/admin/companies_controller.rb +17 -7
- data/app/controllers/spree/api/v3/admin/countries_controller.rb +6 -2
- data/app/controllers/spree/api/v3/admin/coupon_codes_controller.rb +0 -4
- data/app/controllers/spree/api/v3/admin/custom_field_definitions_controller.rb +22 -4
- data/app/controllers/spree/api/v3/admin/custom_fields_controller.rb +12 -9
- data/app/controllers/spree/api/v3/admin/customer_groups_controller.rb +9 -5
- data/app/controllers/spree/api/v3/admin/customers/addresses_controller.rb +12 -11
- data/app/controllers/spree/api/v3/admin/customers/credit_cards_controller.rb +0 -4
- data/app/controllers/spree/api/v3/admin/customers/store_credits_controller.rb +11 -13
- data/app/controllers/spree/api/v3/admin/customers/tax_identifiers_controller.rb +6 -1
- data/app/controllers/spree/api/v3/admin/customers_controller.rb +37 -9
- data/app/controllers/spree/api/v3/admin/data_requests_controller.rb +8 -0
- data/app/controllers/spree/api/v3/admin/delivery_method_rules_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/delivery_methods/rules_controller.rb +16 -8
- data/app/controllers/spree/api/v3/admin/delivery_methods_controller.rb +95 -62
- data/app/controllers/spree/api/v3/admin/delivery_profiles/origin_groups_controller.rb +8 -1
- data/app/controllers/spree/api/v3/admin/delivery_profiles_controller.rb +14 -7
- data/app/controllers/spree/api/v3/admin/delivery_zones_controller.rb +21 -5
- data/app/controllers/spree/api/v3/admin/email_templates/drafts_controller.rb +53 -0
- data/app/controllers/spree/api/v3/admin/email_templates/previews_controller.rb +34 -0
- data/app/controllers/spree/api/v3/admin/email_templates/publications_controller.rb +37 -0
- data/app/controllers/spree/api/v3/admin/email_templates/restorations_controller.rb +42 -0
- data/app/controllers/spree/api/v3/admin/email_templates/revisions_controller.rb +35 -0
- data/app/controllers/spree/api/v3/admin/email_templates/sample_records_controller.rb +33 -0
- data/app/controllers/spree/api/v3/admin/email_templates/test_emails_controller.rb +44 -0
- data/app/controllers/spree/api/v3/admin/email_templates_controller.rb +46 -0
- data/app/controllers/spree/api/v3/admin/exports_controller.rb +23 -6
- data/app/controllers/spree/api/v3/admin/files_controller.rb +29 -0
- data/app/controllers/spree/api/v3/admin/gift_card_batches_controller.rb +20 -1
- data/app/controllers/spree/api/v3/admin/gift_cards_controller.rb +19 -1
- data/app/controllers/spree/api/v3/admin/imports_controller.rb +37 -11
- data/app/controllers/spree/api/v3/admin/integrations_controller.rb +13 -1
- data/app/controllers/spree/api/v3/admin/invitation_acceptances_controller.rb +9 -2
- data/app/controllers/spree/api/v3/admin/invitations_controller.rb +8 -8
- data/app/controllers/spree/api/v3/admin/locales_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/markets_controller.rb +30 -9
- data/app/controllers/spree/api/v3/admin/me_controller.rb +13 -4
- data/app/controllers/spree/api/v3/admin/media_controller.rb +22 -9
- data/app/controllers/spree/api/v3/admin/media_library_controller.rb +9 -5
- data/app/controllers/spree/api/v3/admin/option_types_controller.rb +24 -7
- data/app/controllers/spree/api/v3/admin/order_cancellation_reasons_controller.rb +5 -1
- data/app/controllers/spree/api/v3/admin/order_routing_rules_controller.rb +13 -5
- data/app/controllers/spree/api/v3/admin/orders/claims_controller.rb +39 -1
- data/app/controllers/spree/api/v3/admin/orders/deliveries_controller.rb +20 -6
- data/app/controllers/spree/api/v3/admin/orders/discount_codes_controller.rb +6 -2
- data/app/controllers/spree/api/v3/admin/orders/discounts_controller.rb +30 -6
- data/app/controllers/spree/api/v3/admin/orders/exchanges_controller.rb +36 -1
- data/app/controllers/spree/api/v3/admin/orders/fees_controller.rb +22 -1
- data/app/controllers/spree/api/v3/admin/orders/fulfillments_controller.rb +83 -22
- data/app/controllers/spree/api/v3/admin/orders/gift_cards_controller.rb +9 -5
- data/app/controllers/spree/api/v3/admin/orders/items_controller.rb +11 -1
- data/app/controllers/spree/api/v3/admin/orders/labels_controller.rb +37 -12
- data/app/controllers/spree/api/v3/admin/orders/payments_controller.rb +18 -19
- data/app/controllers/spree/api/v3/admin/orders/refunds_controller.rb +7 -5
- data/app/controllers/spree/api/v3/admin/orders/returns_controller.rb +37 -1
- data/app/controllers/spree/api/v3/admin/orders/store_credits_controller.rb +6 -3
- data/app/controllers/spree/api/v3/admin/orders_controller.rb +76 -62
- data/app/controllers/spree/api/v3/admin/package_types_controller.rb +30 -5
- data/app/controllers/spree/api/v3/admin/password_resets_controller.rb +26 -7
- data/app/controllers/spree/api/v3/admin/payment_methods_controller.rb +38 -22
- data/app/controllers/spree/api/v3/admin/policies_controller.rb +8 -4
- data/app/controllers/spree/api/v3/admin/price_lists_controller.rb +32 -67
- data/app/controllers/spree/api/v3/admin/prices_controller.rb +51 -8
- data/app/controllers/spree/api/v3/admin/product_types_controller.rb +25 -8
- data/app/controllers/spree/api/v3/admin/products/digital_assets_controller.rb +29 -16
- data/app/controllers/spree/api/v3/admin/products/variants_controller.rb +9 -18
- data/app/controllers/spree/api/v3/admin/products_controller.rb +122 -71
- data/app/controllers/spree/api/v3/admin/promotion_actions_controller.rb +11 -6
- data/app/controllers/spree/api/v3/admin/promotion_rules_controller.rb +10 -5
- data/app/controllers/spree/api/v3/admin/promotions_controller.rb +50 -14
- data/app/controllers/spree/api/v3/admin/purchase_orders_controller.rb +55 -8
- data/app/controllers/spree/api/v3/admin/refund_reasons_controller.rb +5 -1
- data/app/controllers/spree/api/v3/admin/reporting/saved_reports_controller.rb +9 -1
- data/app/controllers/spree/api/v3/admin/reporting_controller.rb +34 -0
- data/app/controllers/spree/api/v3/admin/resource_controller.rb +2 -1
- data/app/controllers/spree/api/v3/admin/return_reasons_controller.rb +5 -1
- data/app/controllers/spree/api/v3/admin/roles_controller.rb +13 -1
- data/app/controllers/spree/api/v3/admin/seller_payouts_controller.rb +7 -9
- data/app/controllers/spree/api/v3/admin/seller_requirement_submissions_controller.rb +17 -10
- data/app/controllers/spree/api/v3/admin/seller_requirements_controller.rb +32 -6
- data/app/controllers/spree/api/v3/admin/seller_transfers_controller.rb +0 -4
- data/app/controllers/spree/api/v3/admin/sellers/invitations_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/sellers/payouts_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/sellers_controller.rb +77 -32
- data/app/controllers/spree/api/v3/admin/setup_controller.rb +54 -23
- data/app/controllers/spree/api/v3/admin/stock_levels_controller.rb +38 -9
- data/app/controllers/spree/api/v3/admin/stock_locations_controller.rb +41 -9
- data/app/controllers/spree/api/v3/admin/stock_transfers_controller.rb +49 -8
- data/app/controllers/spree/api/v3/admin/store_controller.rb +122 -48
- data/app/controllers/spree/api/v3/admin/store_credits_controller.rb +1 -7
- data/app/controllers/spree/api/v3/admin/suppliers_controller.rb +16 -6
- data/app/controllers/spree/api/v3/admin/tags_controller.rb +8 -5
- data/app/controllers/spree/api/v3/admin/tax_categories_controller.rb +7 -4
- data/app/controllers/spree/api/v3/admin/tax_rates_controller.rb +21 -3
- data/app/controllers/spree/api/v3/admin/tracking_carriers_controller.rb +4 -0
- data/app/controllers/spree/api/v3/admin/translations/batches_controller.rb +17 -9
- data/app/controllers/spree/api/v3/admin/translations_controller.rb +4 -0
- data/app/controllers/spree/api/v3/admin/translations_coverage_controller.rb +5 -0
- data/app/controllers/spree/api/v3/admin/updates_controller.rb +39 -0
- data/app/controllers/spree/api/v3/admin/webhook_endpoints_controller.rb +40 -13
- data/app/controllers/spree/api/v3/admin/webhook_events_controller.rb +25 -0
- data/app/controllers/spree/api/v3/base_controller.rb +12 -0
- data/app/controllers/spree/api/v3/resource_controller.rb +99 -3
- data/app/controllers/spree/api/v3/seller/auth_controller.rb +10 -2
- data/app/controllers/spree/api/v3/seller/base_controller.rb +1 -0
- data/app/controllers/spree/api/v3/seller/countries_controller.rb +3 -3
- data/app/controllers/spree/api/v3/seller/delivery_methods_controller.rb +49 -60
- data/app/controllers/spree/api/v3/seller/exports_controller.rb +21 -4
- data/app/controllers/spree/api/v3/seller/files_controller.rb +27 -0
- data/app/controllers/spree/api/v3/seller/imports_controller.rb +25 -9
- data/app/controllers/spree/api/v3/seller/invitation_acceptances_controller.rb +12 -4
- data/app/controllers/spree/api/v3/seller/invitations_controller.rb +1 -1
- data/app/controllers/spree/api/v3/seller/me_controller.rb +15 -4
- data/app/controllers/spree/api/v3/seller/onboarding_controller.rb +11 -0
- data/app/controllers/spree/api/v3/seller/orders/claims_controller.rb +35 -0
- data/app/controllers/spree/api/v3/seller/orders/deliveries_controller.rb +12 -0
- data/app/controllers/spree/api/v3/seller/orders/exchanges_controller.rb +33 -0
- data/app/controllers/spree/api/v3/seller/orders/fulfillments_controller.rb +28 -2
- data/app/controllers/spree/api/v3/seller/orders/labels_controller.rb +23 -2
- data/app/controllers/spree/api/v3/seller/orders/notes_controller.rb +8 -1
- data/app/controllers/spree/api/v3/seller/orders/returns_controller.rb +32 -0
- data/app/controllers/spree/api/v3/seller/orders_controller.rb +35 -14
- data/app/controllers/spree/api/v3/seller/package_types_controller.rb +21 -9
- data/app/controllers/spree/api/v3/seller/password_resets_controller.rb +20 -11
- data/app/controllers/spree/api/v3/seller/policies_controller.rb +12 -4
- data/app/controllers/spree/api/v3/seller/products_controller.rb +115 -28
- data/app/controllers/spree/api/v3/seller/profile_controller.rb +33 -10
- data/app/controllers/spree/api/v3/seller/requirement_submissions_controller.rb +13 -6
- data/app/controllers/spree/api/v3/seller/resource_controller.rb +12 -0
- data/app/controllers/spree/api/v3/seller/stock_locations_controller.rb +44 -13
- data/app/controllers/spree/api/v3/seller/tax_identifiers_controller.rb +10 -1
- data/app/controllers/spree/api/v3/seller/team_controller.rb +5 -1
- data/app/controllers/spree/api/v3/store/auth_controller.rb +10 -0
- data/app/controllers/spree/api/v3/store/carts/discount_codes_controller.rb +9 -2
- data/app/controllers/spree/api/v3/store/carts/fulfillments_controller.rb +11 -11
- data/app/controllers/spree/api/v3/store/carts/gift_cards_controller.rb +13 -4
- data/app/controllers/spree/api/v3/store/carts/items_controller.rb +23 -7
- data/app/controllers/spree/api/v3/store/carts/payment_sessions_controller.rb +21 -7
- data/app/controllers/spree/api/v3/store/carts/payments_controller.rb +16 -3
- data/app/controllers/spree/api/v3/store/carts/po_documents_controller.rb +26 -28
- data/app/controllers/spree/api/v3/store/carts/store_credits_controller.rb +9 -1
- data/app/controllers/spree/api/v3/store/carts/tax_identifiers_controller.rb +5 -1
- data/app/controllers/spree/api/v3/store/carts_controller.rb +64 -52
- data/app/controllers/spree/api/v3/store/companies/addresses_controller.rb +12 -8
- data/app/controllers/spree/api/v3/store/companies/invitations_controller.rb +1 -5
- data/app/controllers/spree/api/v3/store/companies/members_controller.rb +4 -0
- data/app/controllers/spree/api/v3/store/companies_controller.rb +5 -1
- data/app/controllers/spree/api/v3/store/company_invitations_controller.rb +10 -2
- data/app/controllers/spree/api/v3/store/customer/addresses_controller.rb +8 -11
- data/app/controllers/spree/api/v3/store/customer/credit_cards_controller.rb +0 -4
- data/app/controllers/spree/api/v3/store/customer/data_requests_controller.rb +5 -5
- data/app/controllers/spree/api/v3/store/customer/digital_links_controller.rb +0 -4
- data/app/controllers/spree/api/v3/store/customer/gift_cards_controller.rb +0 -4
- data/app/controllers/spree/api/v3/store/customer/orders_controller.rb +0 -4
- data/app/controllers/spree/api/v3/store/customer/password_resets_controller.rb +25 -6
- data/app/controllers/spree/api/v3/store/customer/payment_setup_sessions_controller.rb +10 -9
- data/app/controllers/spree/api/v3/store/customer/store_credits_controller.rb +0 -5
- data/app/controllers/spree/api/v3/store/customer/tax_identifiers_controller.rb +5 -1
- data/app/controllers/spree/api/v3/store/customers_controller.rb +28 -2
- data/app/controllers/spree/api/v3/store/data_request_downloads_controller.rb +1 -1
- data/app/controllers/spree/api/v3/store/delivery_methods_controller.rb +1 -1
- data/app/controllers/spree/api/v3/store/newsletter_subscribers_controller.rb +27 -14
- data/app/controllers/spree/api/v3/store/orders/claims_controller.rb +12 -7
- data/app/controllers/spree/api/v3/store/orders/returns_controller.rb +11 -6
- data/app/controllers/spree/api/v3/store/orders_controller.rb +47 -10
- data/app/controllers/spree/api/v3/store/products_controller.rb +8 -0
- data/app/controllers/spree/api/v3/store/wishlist_items_controller.rb +10 -8
- data/app/controllers/spree/api/v3/store/wishlists_controller.rb +12 -4
- data/app/request_schemas/spree/api/v3/address_request_schema.rb +27 -0
- data/app/request_schemas/spree/api/v3/admin/address_request_schema.rb +13 -0
- data/app/request_schemas/spree/api/v3/admin/bulk_tags_request_schema.rb +17 -0
- data/app/request_schemas/spree/api/v3/admin/catalog_order_minimum_request_schema.rb +17 -0
- data/app/request_schemas/spree/api/v3/admin/email_template_language_request_schema.rb +17 -0
- data/app/request_schemas/spree/api/v3/admin/email_template_preview_request_schema.rb +32 -0
- data/app/request_schemas/spree/api/v3/admin/price_adjustment_tier_request_schema.rb +21 -0
- data/app/request_schemas/spree/api/v3/admin/price_list_price_request_schema.rb +21 -0
- data/app/request_schemas/spree/api/v3/admin/price_list_rule_request_schema.rb +19 -0
- data/app/request_schemas/spree/api/v3/admin/product_membership_reposition_request_schema.rb +17 -0
- data/app/request_schemas/spree/api/v3/admin/promotion_action_calculator_request_schema.rb +18 -0
- data/app/request_schemas/spree/api/v3/admin/promotion_action_line_item_request_schema.rb +15 -0
- data/app/request_schemas/spree/api/v3/admin/promotion_action_request_schema.rb +19 -0
- data/app/request_schemas/spree/api/v3/admin/promotion_rule_request_schema.rb +22 -0
- data/app/request_schemas/spree/api/v3/admin/reason_request_schema.rb +14 -0
- data/app/request_schemas/spree/api/v3/admin/tax_identifier_request_schema.rb +15 -0
- data/app/request_schemas/spree/api/v3/custom_field_value_request_schema.rb +15 -0
- data/app/request_schemas/spree/api/v3/file_upload_request_schema.rb +20 -0
- data/app/request_schemas/spree/api/v3/media_request_schema.rb +27 -0
- data/app/request_schemas/spree/api/v3/price_request_schema.rb +17 -0
- data/app/request_schemas/spree/api/v3/stock_level_request_schema.rb +18 -0
- data/app/request_schemas/spree/api/v3/store/address_request_schema.rb +29 -0
- data/app/request_schemas/spree/api/v3/tax_identifier_request_schema.rb +18 -0
- data/app/request_schemas/spree/api/v3/variant_option_request_schema.rb +13 -0
- data/app/request_schemas/spree/api/v3/variant_request_schema.rb +52 -0
- data/app/serializers/concerns/spree/api/v3/purchase_summary.rb +48 -0
- data/app/serializers/spree/api/v3/address_serializer.rb +4 -2
- data/app/serializers/spree/api/v3/admin/address_serializer.rb +8 -7
- data/app/serializers/spree/api/v3/admin/api_key_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/admin/applied_promotion_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/admin/cart_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/admin/catalog_assignment_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/catalog_order_minimum_serializer.rb +3 -8
- data/app/serializers/spree/api/v3/admin/catalog_price_serializer.rb +3 -4
- data/app/serializers/spree/api/v3/admin/catalog_price_tier_serializer.rb +4 -3
- data/app/serializers/spree/api/v3/admin/catalog_product_term_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/catalog_quantity_rule_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/channel_serializer.rb +7 -10
- data/app/serializers/spree/api/v3/admin/claim_line_item_serializer.rb +7 -0
- data/app/serializers/spree/api/v3/admin/claim_reason_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/claim_serializer.rb +5 -0
- data/app/serializers/spree/api/v3/admin/commission_line_serializer.rb +7 -18
- data/app/serializers/spree/api/v3/admin/commission_rate_serializer.rb +7 -11
- data/app/serializers/spree/api/v3/admin/commission_rule_serializer.rb +1 -5
- data/app/serializers/spree/api/v3/admin/country_serializer.rb +4 -0
- data/app/serializers/spree/api/v3/admin/coupon_code_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/credit_card_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/custom_field_definition_serializer.rb +6 -2
- data/app/serializers/spree/api/v3/admin/customer_serializer.rb +5 -17
- data/app/serializers/spree/api/v3/admin/data_request_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/admin/delivery_method_rule_serializer.rb +0 -2
- data/app/serializers/spree/api/v3/admin/delivery_method_serializer.rb +20 -30
- data/app/serializers/spree/api/v3/admin/delivery_method_service_serializer.rb +9 -1
- data/app/serializers/spree/api/v3/admin/delivery_origin_group_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/delivery_rate_serializer.rb +8 -0
- data/app/serializers/spree/api/v3/admin/delivery_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/delivery_zone_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/digital_asset_serializer.rb +4 -2
- data/app/serializers/spree/api/v3/admin/discount_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/admin/email_template_draft_serializer.rb +19 -0
- data/app/serializers/spree/api/v3/admin/email_template_preview_serializer.rb +38 -0
- data/app/serializers/spree/api/v3/admin/email_template_revision_serializer.rb +18 -0
- data/app/serializers/spree/api/v3/admin/email_template_sample_record_serializer.rb +13 -0
- data/app/serializers/spree/api/v3/admin/email_template_serializer.rb +61 -0
- data/app/serializers/spree/api/v3/admin/exchange_line_item_serializer.rb +5 -0
- data/app/serializers/spree/api/v3/admin/exchange_serializer.rb +6 -3
- data/app/serializers/spree/api/v3/admin/export_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/fee_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/admin/file_upload_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/admin/file_upload_target_serializer.rb +10 -0
- data/app/serializers/spree/api/v3/admin/fulfillment_item_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/fulfillment_serializer.rb +13 -17
- data/app/serializers/spree/api/v3/admin/gift_card_serializer.rb +4 -10
- data/app/serializers/spree/api/v3/admin/import_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/admin/integration_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/line_item_serializer.rb +14 -18
- data/app/serializers/spree/api/v3/admin/locale_serializer.rb +13 -0
- data/app/serializers/spree/api/v3/admin/market_serializer.rb +7 -2
- data/app/serializers/spree/api/v3/admin/media_serializer.rb +4 -5
- data/app/serializers/spree/api/v3/admin/order_cancellation_reason_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/order_group_serializer.rb +5 -9
- data/app/serializers/spree/api/v3/admin/order_routing_rule_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/admin/order_serializer.rb +38 -48
- data/app/serializers/spree/api/v3/admin/package_type_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/payment_method_serializer.rb +7 -4
- data/app/serializers/spree/api/v3/admin/payment_serializer.rb +6 -8
- data/app/serializers/spree/api/v3/admin/payment_split_serializer.rb +8 -9
- data/app/serializers/spree/api/v3/admin/permission_serializer.rb +4 -4
- data/app/serializers/spree/api/v3/admin/price_adjustment_tier_serializer.rb +3 -6
- data/app/serializers/spree/api/v3/admin/price_history_serializer.rb +5 -2
- data/app/serializers/spree/api/v3/admin/price_list_serializer.rb +1 -5
- data/app/serializers/spree/api/v3/admin/price_rule_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/admin/price_serializer.rb +2 -0
- data/app/serializers/spree/api/v3/admin/product_serializer.rb +4 -10
- data/app/serializers/spree/api/v3/admin/product_submission_serializer.rb +2 -10
- data/app/serializers/spree/api/v3/admin/product_type_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/promotion_action_serializer.rb +5 -9
- data/app/serializers/spree/api/v3/admin/promotion_rule_serializer.rb +1 -5
- data/app/serializers/spree/api/v3/admin/purchase_order_item_serializer.rb +6 -25
- data/app/serializers/spree/api/v3/admin/purchase_order_serializer.rb +4 -17
- data/app/serializers/spree/api/v3/admin/refund_reason_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/refund_serializer.rb +7 -0
- data/app/serializers/spree/api/v3/admin/reporting_result_serializer.rb +9 -2
- data/app/serializers/spree/api/v3/admin/return_line_item_serializer.rb +9 -0
- data/app/serializers/spree/api/v3/admin/return_reason_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/return_serializer.rb +8 -12
- data/app/serializers/spree/api/v3/admin/saved_report_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/seller_balance_serializer.rb +15 -10
- data/app/serializers/spree/api/v3/admin/seller_payout_serializer.rb +7 -7
- data/app/serializers/spree/api/v3/admin/seller_requirement_status_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/admin/seller_requirement_submission_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/seller_serializer.rb +8 -16
- data/app/serializers/spree/api/v3/admin/seller_transfer_serializer.rb +11 -10
- data/app/serializers/spree/api/v3/admin/shipping_label_serializer.rb +8 -21
- data/app/serializers/spree/api/v3/admin/stock_level_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/stock_location_serializer.rb +4 -3
- data/app/serializers/spree/api/v3/admin/stock_movement_serializer.rb +3 -9
- data/app/serializers/spree/api/v3/admin/stock_receipt_item_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/stock_receipt_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/stock_reservation_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/stock_transfer_item_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/store_credit_event_serializer.rb +6 -3
- data/app/serializers/spree/api/v3/admin/store_credit_serializer.rb +11 -20
- data/app/serializers/spree/api/v3/admin/store_serializer.rb +21 -84
- data/app/serializers/spree/api/v3/admin/supplier_serializer.rb +2 -4
- data/app/serializers/spree/api/v3/admin/tax_exemption_certificate_serializer.rb +6 -10
- data/app/serializers/spree/api/v3/admin/tax_identifier_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/tax_line_serializer.rb +9 -3
- data/app/serializers/spree/api/v3/admin/tax_rate_serializer.rb +3 -19
- data/app/serializers/spree/api/v3/admin/update_status_serializer.rb +28 -0
- data/app/serializers/spree/api/v3/admin/variant_serializer.rb +13 -10
- data/app/serializers/spree/api/v3/admin/webhook_delivery_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/webhook_event_serializer.rb +23 -0
- data/app/serializers/spree/api/v3/applied_promotion_serializer.rb +2 -4
- data/app/serializers/spree/api/v3/base_serializer.rb +132 -7
- data/app/serializers/spree/api/v3/cart_serializer.rb +20 -66
- data/app/serializers/spree/api/v3/category_serializer.rb +5 -15
- data/app/serializers/spree/api/v3/claim_line_item_serializer.rb +6 -29
- data/app/serializers/spree/api/v3/claim_serializer.rb +2 -16
- data/app/serializers/spree/api/v3/collection_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/company_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/country_serializer.rb +2 -1
- data/app/serializers/spree/api/v3/currency_serializer.rb +9 -1
- data/app/serializers/spree/api/v3/custom_field_serializer.rb +1 -2
- data/app/serializers/spree/api/v3/customer_serializer.rb +3 -2
- data/app/serializers/spree/api/v3/delivery_rate_serializer.rb +8 -32
- data/app/serializers/spree/api/v3/delivery_zone_member_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/digital_asset_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/digital_link_serializer.rb +3 -9
- data/app/serializers/spree/api/v3/discount_serializer.rb +4 -12
- data/app/serializers/spree/api/v3/exchange_line_item_serializer.rb +6 -30
- data/app/serializers/spree/api/v3/exchange_serializer.rb +2 -16
- data/app/serializers/spree/api/v3/export_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/fee_serializer.rb +2 -10
- data/app/serializers/spree/api/v3/file_upload_serializer.rb +28 -0
- data/app/serializers/spree/api/v3/file_upload_target_serializer.rb +17 -0
- data/app/serializers/spree/api/v3/fulfillment_serializer.rb +4 -11
- data/app/serializers/spree/api/v3/gift_card_batch_serializer.rb +3 -7
- data/app/serializers/spree/api/v3/gift_card_serializer.rb +7 -17
- data/app/serializers/spree/api/v3/import_row_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/import_serializer.rb +3 -26
- data/app/serializers/spree/api/v3/invitation_serializer.rb +2 -19
- data/app/serializers/spree/api/v3/line_item_serializer.rb +19 -23
- data/app/serializers/spree/api/v3/locale_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/market_serializer.rb +5 -5
- data/app/serializers/spree/api/v3/media_event_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/media_serializer.rb +8 -5
- data/app/serializers/spree/api/v3/newsletter_subscriber_request_event_serializer.rb +35 -0
- data/app/serializers/spree/api/v3/newsletter_subscriber_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/option_value_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/order_group_serializer.rb +12 -25
- data/app/serializers/spree/api/v3/order_serializer.rb +14 -58
- data/app/serializers/spree/api/v3/password_reset_requested_event_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/payment_method_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/payment_serializer.rb +5 -10
- data/app/serializers/spree/api/v3/payment_session_serializer.rb +5 -13
- data/app/serializers/spree/api/v3/payment_setup_session_serializer.rb +3 -11
- data/app/serializers/spree/api/v3/policy_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/price_history_serializer.rb +6 -8
- data/app/serializers/spree/api/v3/price_serializer.rb +7 -12
- data/app/serializers/spree/api/v3/product_filter_price_range_serializer.rb +10 -4
- data/app/serializers/spree/api/v3/product_publication_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/product_serializer.rb +10 -24
- data/app/serializers/spree/api/v3/product_submission_serializer.rb +26 -0
- data/app/serializers/spree/api/v3/purchase_order_event_serializer.rb +23 -4
- data/app/serializers/spree/api/v3/refund_serializer.rb +11 -16
- data/app/serializers/spree/api/v3/return_line_item_serializer.rb +6 -21
- data/app/serializers/spree/api/v3/return_serializer.rb +4 -16
- data/app/serializers/spree/api/v3/saved_report_event_serializer.rb +23 -0
- data/app/serializers/spree/api/v3/seller/address_serializer.rb +12 -0
- data/app/serializers/spree/api/v3/seller/balance_serializer.rb +15 -10
- data/app/serializers/spree/api/v3/seller/claim_line_item_serializer.rb +7 -0
- data/app/serializers/spree/api/v3/seller/claim_serializer.rb +5 -0
- data/app/serializers/spree/api/v3/seller/country_serializer.rb +19 -0
- data/app/serializers/spree/api/v3/seller/delivery_method_rule_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/seller/delivery_method_serializer.rb +5 -15
- data/app/serializers/spree/api/v3/seller/delivery_rate_serializer.rb +8 -13
- data/app/serializers/spree/api/v3/seller/delivery_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/seller/delivery_zone_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/seller/exchange_line_item_serializer.rb +5 -0
- data/app/serializers/spree/api/v3/seller/exchange_serializer.rb +6 -3
- data/app/serializers/spree/api/v3/seller/file_upload_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/seller/file_upload_target_serializer.rb +10 -0
- data/app/serializers/spree/api/v3/seller/fulfillment_item_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/seller/fulfillment_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/seller/import_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/seller/invitation_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/seller/media_serializer.rb +2 -5
- data/app/serializers/spree/api/v3/seller/order_line_item_serializer.rb +8 -13
- data/app/serializers/spree/api/v3/seller/order_serializer.rb +19 -40
- data/app/serializers/spree/api/v3/seller/payment_split_serializer.rb +8 -9
- data/app/serializers/spree/api/v3/seller/payout_serializer.rb +6 -6
- data/app/serializers/spree/api/v3/seller/price_history_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/seller/price_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/seller/product_serializer.rb +3 -7
- data/app/serializers/spree/api/v3/seller/product_submission_serializer.rb +1 -21
- data/app/serializers/spree/api/v3/seller/profile_serializer.rb +9 -13
- data/app/serializers/spree/api/v3/seller/requirement_status_serializer.rb +3 -9
- data/app/serializers/spree/api/v3/seller/return_line_item_serializer.rb +8 -0
- data/app/serializers/spree/api/v3/seller/return_serializer.rb +8 -17
- data/app/serializers/spree/api/v3/seller/state_serializer.rb +10 -0
- data/app/serializers/spree/api/v3/seller/stock_location_serializer.rb +3 -0
- data/app/serializers/spree/api/v3/seller/transfer_serializer.rb +10 -9
- data/app/serializers/spree/api/v3/seller/variant_serializer.rb +8 -4
- data/app/serializers/spree/api/v3/seller_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/shipping_label_event_serializer.rb +22 -4
- data/app/serializers/spree/api/v3/stock_level_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/stock_location_serializer.rb +8 -1
- data/app/serializers/spree/api/v3/stock_movement_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/stock_receipt_event_serializer.rb +20 -4
- data/app/serializers/spree/api/v3/stock_transfer_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/store_credit_event_serializer.rb +2 -13
- data/app/serializers/spree/api/v3/store_credit_serializer.rb +3 -27
- data/app/serializers/spree/api/v3/supplier_event_serializer.rb +6 -4
- data/app/serializers/spree/api/v3/tax_line_serializer.rb +11 -23
- data/app/serializers/spree/api/v3/variant_serializer.rb +10 -24
- data/app/serializers/spree/api/v3/wishlist_item_serializer.rb +1 -11
- data/app/serializers/spree/api/v3/wishlist_serializer.rb +2 -6
- data/app/services/spree/api/v3/filter_predicates.rb +29 -0
- data/app/services/spree/api/v3/filter_table.rb +337 -0
- data/app/services/spree/api/v3/filters_aggregator.rb +2 -2
- data/app/services/spree/api/v3/request_schema.rb +430 -0
- data/app/services/spree/webhooks/deliver_webhook.rb +7 -3
- data/app/subscribers/spree/webhook_event_subscriber.rb +3 -10
- data/config/initializers/pagy.rb +1 -1
- data/config/initializers/typelizer.rb +7 -9
- data/config/locales/ar.yml +15 -0
- data/config/locales/be.yml +15 -0
- data/config/locales/bg.yml +15 -0
- data/config/locales/ca.yml +15 -0
- data/config/locales/cs.yml +15 -0
- data/config/locales/da.yml +15 -0
- data/config/locales/de-CH.yml +11 -0
- data/config/locales/de.yml +15 -0
- data/config/locales/el.yml +15 -0
- data/config/locales/en.yml +5 -40
- data/config/locales/es-CL.yml +10 -0
- data/config/locales/es-EC.yml +11 -0
- data/config/locales/es-MX.yml +12 -0
- data/config/locales/es.yml +15 -0
- data/config/locales/et.yml +15 -0
- data/config/locales/fa.yml +15 -0
- data/config/locales/fi.yml +15 -0
- data/config/locales/fr.yml +15 -0
- data/config/locales/hu.yml +15 -0
- data/config/locales/id.yml +15 -0
- data/config/locales/it.yml +15 -0
- data/config/locales/ja.yml +15 -0
- data/config/locales/km.yml +15 -0
- data/config/locales/ko.yml +15 -0
- data/config/locales/ku.yml +15 -0
- data/config/locales/lt.yml +15 -0
- data/config/locales/lv.yml +15 -0
- data/config/locales/nb.yml +15 -0
- data/config/locales/ne.yml +15 -0
- data/config/locales/nl.yml +15 -0
- data/config/locales/pl.yml +15 -0
- data/config/locales/pt-BR.yml +13 -0
- data/config/locales/pt.yml +15 -0
- data/config/locales/ro.yml +15 -0
- data/config/locales/ru.yml +15 -0
- data/config/locales/sk.yml +15 -0
- data/config/locales/sl-SI.yml +15 -0
- data/config/locales/sv.yml +15 -0
- data/config/locales/th.yml +15 -0
- data/config/locales/tr.yml +15 -0
- data/config/locales/uk.yml +15 -0
- data/config/locales/vi.yml +15 -0
- data/config/locales/zh-CN.yml +15 -0
- data/config/locales/zh-TW.yml +15 -0
- data/config/routes.rb +54 -102
- data/lib/spree/api/configuration.rb +5 -0
- data/lib/spree/api/dependencies.rb +54 -274
- data/lib/spree/api/middleware/request_size_limit.rb +24 -3
- data/lib/spree/api/openapi/filter_documentation.rb +136 -0
- data/lib/spree/api/openapi/schema_helper.rb +127 -81
- data/lib/spree/api/preference_families.rb +46 -0
- data/lib/spree/api/preference_types.rb +138 -0
- data/lib/spree/api/typelizer_generation.rb +39 -0
- data/lib/spree/api/webhook_event_types.rb +140 -0
- data/lib/spree/api.rb +0 -2
- data/lib/tasks/filters.rake +12 -0
- data/lib/typelizer/open_enums.rb +10 -0
- metadata +125 -40
- data/app/controllers/concerns/spree/api/v3/address_params.rb +0 -17
- data/app/controllers/concerns/spree/api/v3/direct_uploads.rb +0 -35
- data/app/controllers/spree/api/v3/admin/direct_uploads_controller.rb +0 -54
- data/app/controllers/spree/api/v3/seller/direct_uploads_controller.rb +0 -21
- data/config/i18n-tasks.yml +0 -40
- data/config/initializers/alba.rb +0 -5
|
@@ -17,6 +17,41 @@ module Spree
|
|
|
17
17
|
|
|
18
18
|
before_action :set_resource, only: [:show, :approve, :resolve, :deny, :cancel]
|
|
19
19
|
|
|
20
|
+
request_params :claim do |body|
|
|
21
|
+
body.attribute :items, :array, required: true do |item|
|
|
22
|
+
item.attribute :line_item_id, :id, required: true
|
|
23
|
+
item.attribute :quantity, :integer, required: true
|
|
24
|
+
item.attribute :description, :string, nullable: true
|
|
25
|
+
item.attribute :send_replacement, :boolean
|
|
26
|
+
item.attribute :replacement_variant_id, :id,
|
|
27
|
+
nullable: true,
|
|
28
|
+
description: "One of this seller's own variants."
|
|
29
|
+
item.attribute :refund_amount, :decimal, nullable: true
|
|
30
|
+
end
|
|
31
|
+
body.attribute :reason_id, :id, nullable: true
|
|
32
|
+
body.attribute :memo, :string, nullable: true
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
request_params 'ClaimResolveParams', action: :resolve do |body|
|
|
36
|
+
body.attribute :resolution, :string,
|
|
37
|
+
required: true,
|
|
38
|
+
choices: %w[refund replacement refund_and_replacement]
|
|
39
|
+
body.attribute :refund_method, :string,
|
|
40
|
+
choices: %w[original_payment store_credit],
|
|
41
|
+
description: 'Defaults to `store_credit`.'
|
|
42
|
+
body.attribute :amount, :decimal, nullable: true
|
|
43
|
+
body.attribute :replacement_line_item_ids, :array, of: :id,
|
|
44
|
+
description: 'Which claimed lines to replace. Omit to keep the lines the claim was opened with.'
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
request_params 'ClaimDenyParams', action: :deny do |body|
|
|
48
|
+
body.attribute :reason, :string, description: 'Recorded on the claim for the customer.'
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
request_params 'ClaimCancelParams', action: :cancel do |body|
|
|
52
|
+
body.attribute :reason, :string, description: 'A note on why the claim was canceled.'
|
|
53
|
+
end
|
|
54
|
+
|
|
20
55
|
protected
|
|
21
56
|
|
|
22
57
|
def serializer_class
|
|
@@ -16,6 +16,18 @@ module Spree
|
|
|
16
16
|
class DeliveriesController < BaseController
|
|
17
17
|
include Spree::Api::V3::Orders::DeliveryActions
|
|
18
18
|
|
|
19
|
+
# The permit list itself lives in DeliveryActions, shared with the
|
|
20
|
+
# operator's branch; this declaration documents it.
|
|
21
|
+
request_params :delivery do |body|
|
|
22
|
+
body.attribute :tracking_number, :string,
|
|
23
|
+
required: true, on: :create,
|
|
24
|
+
description: 'A carrier tracking number, a freight PRO or container number, or a full tracking link. A corrected number resets the carrier status to `pending`.'
|
|
25
|
+
body.attribute :carrier, :string,
|
|
26
|
+
description: "Free text; detected from the number's format when omitted."
|
|
27
|
+
body.attribute :service, :string
|
|
28
|
+
body.attribute :tracking_url, :string
|
|
29
|
+
end
|
|
30
|
+
|
|
19
31
|
before_action :set_resource, only: [:show, :update, :destroy]
|
|
20
32
|
|
|
21
33
|
protected
|
|
@@ -17,6 +17,39 @@ module Spree
|
|
|
17
17
|
|
|
18
18
|
before_action :set_resource, only: [:show, :approve, :receive, :fulfill, :cancel]
|
|
19
19
|
|
|
20
|
+
request_params :exchange do |body|
|
|
21
|
+
body.attribute :items, :array, required: true do |item|
|
|
22
|
+
item.attribute :fulfillment_item_id, :id, required: true
|
|
23
|
+
item.attribute :new_variant_id, :id, required: true, description: "One of this seller's own variants."
|
|
24
|
+
item.attribute :quantity, :integer, required: true
|
|
25
|
+
end
|
|
26
|
+
body.attribute :reason_id, :id, nullable: true
|
|
27
|
+
body.attribute :stock_location_id, :id,
|
|
28
|
+
nullable: true,
|
|
29
|
+
description: "One of this seller's own stock locations, where the goods are restocked."
|
|
30
|
+
body.attribute :memo, :string, nullable: true
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
request_params 'ExchangeReceiveParams', action: :receive do |body|
|
|
34
|
+
body.attribute :items, :array,
|
|
35
|
+
description: 'What actually arrived. Omit to receive everything as requested and resellable.' do |item|
|
|
36
|
+
item.attribute :exchange_line_item_id, :id, required: true
|
|
37
|
+
item.attribute :quantity, :integer, required: true
|
|
38
|
+
item.attribute :resellable, :boolean,
|
|
39
|
+
description: 'Goods that cannot be resold are received but never restocked. Defaults to true.'
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
request_params 'ExchangeCancelParams', action: :cancel do |body|
|
|
44
|
+
body.attribute :reason, :string, description: 'A note on why the exchange was canceled.'
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
request_params 'ExchangeFulfillParams', action: :fulfill do |body|
|
|
48
|
+
body.attribute :refund_method, :string,
|
|
49
|
+
choices: %w[original_payment store_credit],
|
|
50
|
+
description: 'Defaults to `store_credit`.'
|
|
51
|
+
end
|
|
52
|
+
|
|
20
53
|
protected
|
|
21
54
|
|
|
22
55
|
def serializer_class
|
|
@@ -23,6 +23,33 @@ module Spree
|
|
|
23
23
|
|
|
24
24
|
before_action :set_resource, only: [:show, :update, :fulfill, :cancel, :split]
|
|
25
25
|
|
|
26
|
+
request_params :fulfillment do |body|
|
|
27
|
+
body.attribute :tracking, :string, nullable: true
|
|
28
|
+
body.attribute :tracking_carrier, :string, nullable: true
|
|
29
|
+
body.attribute :stock_location_id, :id,
|
|
30
|
+
description: "One of this seller's own stock locations; the rates requote from there."
|
|
31
|
+
body.attribute :selected_delivery_rate_id, :id,
|
|
32
|
+
description: 'One of the rates quoted for this parcel from its current origin.'
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
request_params 'FulfillmentFulfillParams', action: :fulfill do |body|
|
|
36
|
+
body.attribute :tracking, :string, description: 'Carrier tracking number.'
|
|
37
|
+
body.attribute :tracking_carrier, :string, description: 'Carrier name.'
|
|
38
|
+
body.attribute :notify_customer, :boolean, description: 'Send the dispatch email (default true).'
|
|
39
|
+
body.attribute :items, :array,
|
|
40
|
+
description: 'Ship only these lines; the rest split onto a new fulfillment.' do |item|
|
|
41
|
+
item.attribute :item_id, :id, required: true, description: 'Prefixed line item ID.'
|
|
42
|
+
item.attribute :quantity, :integer, required: true
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
request_params 'FulfillmentSplitParams', action: :split do |body|
|
|
47
|
+
body.attribute :variant_id, :id, required: true, description: 'The variant being moved out.'
|
|
48
|
+
body.attribute :quantity, :integer, required: true
|
|
49
|
+
body.attribute :stock_location_id, :id,
|
|
50
|
+
description: "One of this seller's own stock locations. Defaults to the source fulfillment's location."
|
|
51
|
+
end
|
|
52
|
+
|
|
26
53
|
protected
|
|
27
54
|
|
|
28
55
|
def serializer_class
|
|
@@ -34,8 +61,7 @@ module Spree
|
|
|
34
61
|
end
|
|
35
62
|
|
|
36
63
|
def permitted_params
|
|
37
|
-
params.permit(
|
|
38
|
-
:selected_delivery_rate_id)
|
|
64
|
+
params.permit(*declared_permitted_attributes)
|
|
39
65
|
end
|
|
40
66
|
|
|
41
67
|
private
|
|
@@ -15,6 +15,27 @@ module Spree
|
|
|
15
15
|
class LabelsController < BaseController
|
|
16
16
|
include Spree::Api::V3::Orders::ShippingLabelActions
|
|
17
17
|
|
|
18
|
+
# The permit list itself lives in ShippingLabelActions, shared with
|
|
19
|
+
# the operator's branch; this declaration documents it.
|
|
20
|
+
request_params :shipping_label do |body|
|
|
21
|
+
body.attribute :file_signed_id, :string,
|
|
22
|
+
required: true,
|
|
23
|
+
description: 'A `signed_id` from `files.upload()`.'
|
|
24
|
+
body.attribute :tracking_number, :string,
|
|
25
|
+
required: true,
|
|
26
|
+
description: 'The number printed on the label.'
|
|
27
|
+
body.attribute :carrier, :string,
|
|
28
|
+
description: "Free text; a forwarder's name is as valid as a carrier slug. Detected from the number when omitted."
|
|
29
|
+
body.attribute :service, :string, description: 'Carrier service the label was bought at.'
|
|
30
|
+
body.attribute :cost, :decimal,
|
|
31
|
+
description: "What the seller paid the carrier. Accounting data only; it never touches the order's shipping charge."
|
|
32
|
+
body.attribute :currency, :currency, description: 'Currency of the cost.'
|
|
33
|
+
body.attribute :file_format, :string,
|
|
34
|
+
choices: %w[pdf png zpl],
|
|
35
|
+
description: 'Taken from the file when omitted.'
|
|
36
|
+
body.attribute :tracking_url, :string, description: 'Tracking page for the consignment the label mints.'
|
|
37
|
+
end
|
|
38
|
+
|
|
18
39
|
before_action :set_resource, only: [:show, :download, :destroy]
|
|
19
40
|
|
|
20
41
|
# POST .../labels
|
|
@@ -24,10 +45,10 @@ module Spree
|
|
|
24
45
|
def create
|
|
25
46
|
authorize!(:create, Spree::ShippingLabel)
|
|
26
47
|
|
|
27
|
-
if label_params[:
|
|
48
|
+
if label_params[:file_signed_id].blank?
|
|
28
49
|
return render_error(
|
|
29
50
|
code: ERROR_CODES[:validation_error],
|
|
30
|
-
message:
|
|
51
|
+
message: I18n.t('spree.shipping_labels.errors.file_required'),
|
|
31
52
|
status: :unprocessable_content
|
|
32
53
|
)
|
|
33
54
|
end
|
|
@@ -17,6 +17,13 @@ module Spree
|
|
|
17
17
|
# there is no member record to fetch.
|
|
18
18
|
skip_before_action :set_resource, raise: false
|
|
19
19
|
|
|
20
|
+
request_params 'OrderNotesParams' do |body|
|
|
21
|
+
body.attribute :customer_note, :string, nullable: true, description: 'What the buyer asked for.'
|
|
22
|
+
body.attribute :internal_note, :string,
|
|
23
|
+
nullable: true,
|
|
24
|
+
description: "The seller's own working note, as HTML. Sanitized on save; `internal_note_html` reads it back."
|
|
25
|
+
end
|
|
26
|
+
|
|
20
27
|
# GET /api/v3/seller/orders/:order_id/notes
|
|
21
28
|
def show
|
|
22
29
|
render json: serialize_resource(@order)
|
|
@@ -59,7 +66,7 @@ module Spree
|
|
|
59
66
|
# model sanitizes — the `_html` reader is its round-trip partner,
|
|
60
67
|
# never a write.
|
|
61
68
|
def notes_params
|
|
62
|
-
permitted = params.permit(
|
|
69
|
+
permitted = params.permit(*declared_permitted_attributes)
|
|
63
70
|
|
|
64
71
|
{}.tap do |attributes|
|
|
65
72
|
attributes[:customer_note] = permitted[:customer_note] if params.key?(:customer_note)
|
|
@@ -17,6 +17,38 @@ module Spree
|
|
|
17
17
|
|
|
18
18
|
before_action :set_resource, only: [:show, :approve, :receive, :refund, :cancel]
|
|
19
19
|
|
|
20
|
+
request_params :return do |body|
|
|
21
|
+
body.attribute :items, :array, required: true do |item|
|
|
22
|
+
item.attribute :fulfillment_item_id, :id, required: true
|
|
23
|
+
item.attribute :quantity, :integer, required: true
|
|
24
|
+
end
|
|
25
|
+
body.attribute :reason_id, :id, nullable: true
|
|
26
|
+
body.attribute :stock_location_id, :id,
|
|
27
|
+
nullable: true,
|
|
28
|
+
description: "One of this seller's own stock locations, where the goods are restocked."
|
|
29
|
+
body.attribute :memo, :string, nullable: true
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
request_params 'ReturnReceiveParams', action: :receive do |body|
|
|
33
|
+
body.attribute :items, :array,
|
|
34
|
+
description: 'What actually arrived. Omit to receive everything as requested and resellable.' do |item|
|
|
35
|
+
item.attribute :return_line_item_id, :id, required: true
|
|
36
|
+
item.attribute :quantity, :integer, required: true
|
|
37
|
+
item.attribute :resellable, :boolean, description: 'Defaults to true.'
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
request_params 'ReturnRefundParams', action: :refund do |body|
|
|
42
|
+
body.attribute :amount, :decimal, nullable: true
|
|
43
|
+
body.attribute :refund_method, :string,
|
|
44
|
+
choices: %w[original_payment store_credit],
|
|
45
|
+
description: 'Defaults to `original_payment`.'
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
request_params 'ReturnCancelParams', action: :cancel do |body|
|
|
49
|
+
body.attribute :reason, :string, description: 'A note on why the return was canceled.'
|
|
50
|
+
end
|
|
51
|
+
|
|
20
52
|
protected
|
|
21
53
|
|
|
22
54
|
def serializer_class
|
|
@@ -21,6 +21,39 @@ module Spree
|
|
|
21
21
|
|
|
22
22
|
scoped_resource :orders
|
|
23
23
|
|
|
24
|
+
ADDRESS = Spree::Api::V3::RequestSchema.shape('OrderAddressParams') do |schema|
|
|
25
|
+
schema.attribute :first_name, :string
|
|
26
|
+
schema.attribute :last_name, :string
|
|
27
|
+
schema.attribute :address1, :string
|
|
28
|
+
schema.attribute :city, :string
|
|
29
|
+
schema.attribute :postal_code, :string
|
|
30
|
+
schema.attribute :company, :string, nullable: true
|
|
31
|
+
schema.attribute :address2, :string, nullable: true
|
|
32
|
+
schema.attribute :phone, :string, nullable: true
|
|
33
|
+
schema.attribute :alternative_phone, :string, nullable: true
|
|
34
|
+
schema.attribute :state_code, :string, nullable: true
|
|
35
|
+
schema.attribute :state_name, :string, nullable: true
|
|
36
|
+
schema.attribute :label, :string, nullable: true
|
|
37
|
+
schema.attribute :country_code, :country, example: 'US'
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
request_params 'OrderCancelParams', action: :cancel do |body|
|
|
41
|
+
body.attribute :cancel_reason_id, :id,
|
|
42
|
+
nullable: true,
|
|
43
|
+
description: 'A reason from the order cancellation reasons endpoint.'
|
|
44
|
+
body.attribute :cancel_note, :string, nullable: true, description: 'Free text beside the reason.'
|
|
45
|
+
body.attribute :refund_payments, :boolean,
|
|
46
|
+
description: "Hand back what the buyer paid for this order's goods."
|
|
47
|
+
body.attribute :notify_customer, :boolean, description: 'Email the customer about the cancellation.'
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
request_params 'OrderAddressCorrectionParams', action: :address do |body|
|
|
51
|
+
body.attribute :shipping_address, :object, shape: ADDRESS,
|
|
52
|
+
description: 'Only the lines that change; the rest of the address is carried over.'
|
|
53
|
+
body.attribute :billing_address, :object, shape: ADDRESS,
|
|
54
|
+
description: 'Only the lines that change; the rest of the address is carried over.'
|
|
55
|
+
end
|
|
56
|
+
|
|
24
57
|
before_action :set_resource, only: [:show, :cancel, :address]
|
|
25
58
|
|
|
26
59
|
# PATCH /api/v3/seller/orders/:id/cancel
|
|
@@ -124,10 +157,8 @@ module Spree
|
|
|
124
157
|
# files the address in their book and makes it their default for
|
|
125
158
|
# every later checkout on the marketplace.
|
|
126
159
|
def sent_addresses
|
|
127
|
-
@sent_addresses ||= params.permit(
|
|
128
|
-
|
|
129
|
-
billing_address: address_permitted_keys
|
|
130
|
-
).slice(:shipping_address, :billing_address).reject { |_key, value| value.blank? }
|
|
160
|
+
@sent_addresses ||= params.permit(*declared_permitted_attributes).
|
|
161
|
+
slice(:shipping_address, :billing_address).reject { |_key, value| value.blank? }
|
|
131
162
|
end
|
|
132
163
|
|
|
133
164
|
def corrected_addresses
|
|
@@ -148,16 +179,6 @@ module Spree
|
|
|
148
179
|
(address&.snapshot || Spree::Address.new).tap { |copy| copy.assign_attributes(sent.to_h.except('label', :label)) }
|
|
149
180
|
end
|
|
150
181
|
|
|
151
|
-
def address_permitted_keys
|
|
152
|
-
[
|
|
153
|
-
:firstname, :lastname, :first_name, :last_name,
|
|
154
|
-
:address1, :address2, :city,
|
|
155
|
-
:country_code, :state_code,
|
|
156
|
-
:zipcode, :postal_code, :phone, :alternative_phone,
|
|
157
|
-
:state_name, :company, :label
|
|
158
|
-
]
|
|
159
|
-
end
|
|
160
|
-
|
|
161
182
|
# A request naming neither address has asked for nothing; saying so
|
|
162
183
|
# beats a 200 that changed nothing.
|
|
163
184
|
def missing_address_errors
|
|
@@ -18,6 +18,27 @@ module Spree
|
|
|
18
18
|
class PackageTypesController < Seller::ResourceController
|
|
19
19
|
scoped_resource :package_types
|
|
20
20
|
|
|
21
|
+
# The same set the operator's controller permits — a seller measures
|
|
22
|
+
# their own packaging, so every field on the shared form is theirs
|
|
23
|
+
# to set. `seller_id` is deliberately absent: ownership comes from
|
|
24
|
+
# the authenticated seller, never the payload.
|
|
25
|
+
request_params :package_type do |body|
|
|
26
|
+
body.attribute :name, :string, required: true, on: :create
|
|
27
|
+
body.attribute :kind, :string, choices: Spree::PackageType::KINDS
|
|
28
|
+
body.attribute :length, :number, nullable: true
|
|
29
|
+
body.attribute :width, :number, nullable: true
|
|
30
|
+
body.attribute :height, :number, nullable: true
|
|
31
|
+
body.attribute :dimensions_unit, :string, nullable: true, choices: Spree::Variant::DIMENSION_UNITS
|
|
32
|
+
body.attribute :weight, :number,
|
|
33
|
+
nullable: true,
|
|
34
|
+
description: "The empty package's own weight, added to every quote."
|
|
35
|
+
body.attribute :max_weight, :number, nullable: true
|
|
36
|
+
body.attribute :weight_unit, :string, nullable: true, choices: Spree::Variant::WEIGHT_UNITS
|
|
37
|
+
body.attribute :default, :boolean,
|
|
38
|
+
description: "Makes this the box this seller's parcels are quoted with. One default per seller, so it never displaces the marketplace's."
|
|
39
|
+
body.attribute :metadata, :hash, nullable: true
|
|
40
|
+
end
|
|
41
|
+
|
|
21
42
|
protected
|
|
22
43
|
|
|
23
44
|
def model_class
|
|
@@ -84,15 +105,6 @@ module Spree
|
|
|
84
105
|
Spree::PackageType.arel_table[:name].asc
|
|
85
106
|
)
|
|
86
107
|
end
|
|
87
|
-
|
|
88
|
-
# The same set the operator's controller permits — a seller measures
|
|
89
|
-
# their own packaging, so every field on the shared form is theirs
|
|
90
|
-
# to set. `seller_id` is deliberately absent: ownership comes from
|
|
91
|
-
# the authenticated seller, never the payload.
|
|
92
|
-
def resource_permitted_attributes
|
|
93
|
-
[:name, :kind, :length, :width, :height, :dimensions_unit,
|
|
94
|
-
:weight, :max_weight, :weight_unit, :default, { metadata: {} }]
|
|
95
|
-
end
|
|
96
108
|
end
|
|
97
109
|
end
|
|
98
110
|
end
|
|
@@ -15,6 +15,8 @@ module Spree
|
|
|
15
15
|
include Spree::Api::V3::Seller::AuthCookies
|
|
16
16
|
include Spree::Api::V3::JwtAuthentication
|
|
17
17
|
|
|
18
|
+
RESET_REQUESTED_EVENT = 'seller_user.password_reset_requested'.freeze
|
|
19
|
+
|
|
18
20
|
# No `skip_scope_check!`: this extends the plain v3 base, which has
|
|
19
21
|
# no authentication or scope gate to lift. The emailed token is the
|
|
20
22
|
# only credential, exactly as on the admin twin.
|
|
@@ -23,6 +25,16 @@ module Spree
|
|
|
23
25
|
store: Rails.cache,
|
|
24
26
|
with: RATE_LIMIT_RESPONSE
|
|
25
27
|
|
|
28
|
+
request_params :password_reset do |body|
|
|
29
|
+
body.attribute :email, :string, required: true, only: :create, example: 'seller@acme.test'
|
|
30
|
+
body.attribute :redirect_url, :string,
|
|
31
|
+
only: :create,
|
|
32
|
+
example: 'https://sellers.your-store.com/reset-password',
|
|
33
|
+
description: 'Must match an allowed origin of the store; ignored otherwise.'
|
|
34
|
+
body.attribute :password, :string, required: true, only: :update, example: 'new-password-123'
|
|
35
|
+
body.attribute :password_confirmation, :string, required: true, only: :update, example: 'new-password-123'
|
|
36
|
+
end
|
|
37
|
+
|
|
26
38
|
# POST /api/v3/seller/auth/password_resets
|
|
27
39
|
def create
|
|
28
40
|
user = Spree.admin_user_class.find_by(email: params[:email])
|
|
@@ -32,12 +44,12 @@ module Spree
|
|
|
32
44
|
# them a seller reset link would be an invitation to a session they
|
|
33
45
|
# cannot hold.
|
|
34
46
|
if user&.seller_member?
|
|
35
|
-
user.publish_event(
|
|
47
|
+
user.publish_event(RESET_REQUESTED_EVENT, event_payload(user))
|
|
36
48
|
end
|
|
37
49
|
|
|
38
50
|
# Always 202, whether or not anything matched — this endpoint must
|
|
39
51
|
# not become a way to discover which addresses exist.
|
|
40
|
-
render json: { message:
|
|
52
|
+
render json: { message: I18n.t('spree.api.password_reset_requested') }, status: :accepted
|
|
41
53
|
end
|
|
42
54
|
|
|
43
55
|
# PATCH /api/v3/seller/auth/password_resets/:id
|
|
@@ -79,7 +91,7 @@ module Spree
|
|
|
79
91
|
def render_token_invalid
|
|
80
92
|
render_error(
|
|
81
93
|
code: ErrorHandler::ERROR_CODES[:password_reset_token_invalid],
|
|
82
|
-
message:
|
|
94
|
+
message: I18n.t('spree.api.password_reset_token_invalid'),
|
|
83
95
|
status: :unprocessable_content
|
|
84
96
|
)
|
|
85
97
|
end
|
|
@@ -88,14 +100,11 @@ module Spree
|
|
|
88
100
|
# right panel origin and locale without a request to read them from.
|
|
89
101
|
def event_payload(user)
|
|
90
102
|
store = seller_store(user)
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
redirect_url = validated_redirect_url(store)
|
|
97
|
-
payload[:redirect_url] = redirect_url if redirect_url.present?
|
|
98
|
-
payload
|
|
103
|
+
user.event_payload_for(
|
|
104
|
+
RESET_REQUESTED_EVENT,
|
|
105
|
+
reset_token: user.generate_token_for(:password_reset), store: store,
|
|
106
|
+
redirect_url: validated_redirect_url(store).presence
|
|
107
|
+
)
|
|
99
108
|
end
|
|
100
109
|
|
|
101
110
|
# Which store's panel to send them to.
|
|
@@ -11,6 +11,18 @@ module Spree
|
|
|
11
11
|
class PoliciesController < Seller::ResourceController
|
|
12
12
|
scoped_resource :seller_profile
|
|
13
13
|
|
|
14
|
+
request_params :policy do |body|
|
|
15
|
+
body.attribute :name, :string,
|
|
16
|
+
required: true, on: :create,
|
|
17
|
+
example: 'Shipping Policy',
|
|
18
|
+
description: 'When the marketplace requires a named policy, use that exact name: the onboarding check matches on it.'
|
|
19
|
+
body.attribute :slug, :string, example: 'shipping-policy'
|
|
20
|
+
body.attribute :body, :string,
|
|
21
|
+
nullable: true,
|
|
22
|
+
example: '<p>Orders leave the workshop within two working days.</p>',
|
|
23
|
+
description: 'HTML, sanitized before it is stored. `body_html` on the response is the rendering of what was stored.'
|
|
24
|
+
end
|
|
25
|
+
|
|
14
26
|
protected
|
|
15
27
|
|
|
16
28
|
def model_class
|
|
@@ -21,10 +33,6 @@ module Spree
|
|
|
21
33
|
Spree.api.seller_policy_serializer
|
|
22
34
|
end
|
|
23
35
|
|
|
24
|
-
def resource_permitted_attributes
|
|
25
|
-
[:name, :slug, :body]
|
|
26
|
-
end
|
|
27
|
-
|
|
28
36
|
# Accept slug or prefixed ID, matching the storefront's lookup.
|
|
29
37
|
def find_resource
|
|
30
38
|
if params[:id].to_s.start_with?('pol_')
|
|
@@ -41,8 +41,121 @@ module Spree
|
|
|
41
41
|
'archived' => -> { Spree.product_archive_workflow }
|
|
42
42
|
}.freeze
|
|
43
43
|
|
|
44
|
+
# The operator's price shape, except `currency` may be left out: the
|
|
45
|
+
# store's currency is assumed (see `default_price_currencies`).
|
|
46
|
+
PRICE = Spree::Api::V3::RequestSchema.new do |schema|
|
|
47
|
+
schema.attribute :currency, :currency,
|
|
48
|
+
example: 'USD',
|
|
49
|
+
description: "Omit to price in the store's currency. A seller has no currency of their own."
|
|
50
|
+
schema.attribute :amount, :decimal,
|
|
51
|
+
required: true,
|
|
52
|
+
example: '24.00',
|
|
53
|
+
description: 'A canonical decimal string (`"1234.56"`: period decimal, no grouping). The API does not parse localized input.'
|
|
54
|
+
schema.attribute :compare_at_amount, :decimal, nullable: true, example: '30.00'
|
|
55
|
+
end
|
|
56
|
+
|
|
44
57
|
scoped_resource :products
|
|
45
58
|
|
|
59
|
+
request_params :product do |body|
|
|
60
|
+
body.attribute :name, :string, required: true, on: :create, example: 'Hand-thrown mug'
|
|
61
|
+
body.attribute :description, :string
|
|
62
|
+
body.attribute :slug, :string, example: 'hand-thrown-mug'
|
|
63
|
+
body.attribute :meta_title, :string
|
|
64
|
+
body.attribute :meta_description, :string
|
|
65
|
+
body.attribute :meta_keywords, :string
|
|
66
|
+
body.attribute :metadata, :hash
|
|
67
|
+
body.attribute :product_type_id, :id,
|
|
68
|
+
nullable: true,
|
|
69
|
+
description: "The marketplace's product type this product is listed against, from the product types endpoint. Null detaches it. Saving with a type seeds its option types onto the product."
|
|
70
|
+
body.attribute :delivery_profile_id, :id,
|
|
71
|
+
description: "Which of the marketplace's delivery profiles the product ships under. A new product sent without one lands on the profile marked default."
|
|
72
|
+
body.attribute :prices, :array, of: PRICE,
|
|
73
|
+
description: "Shorthand for a simple (no-options) product: per-currency prices that forward to the product's sole variant."
|
|
74
|
+
# `external_url` stays out for the same reason it does on the
|
|
75
|
+
# operator's endpoint: it would make the server fetch a URL the
|
|
76
|
+
# caller chose.
|
|
77
|
+
body.attribute :media, :array,
|
|
78
|
+
as: 'SellerProductMediaParams',
|
|
79
|
+
description: 'The gallery, as a whole: a file absent from the list is removed. `signed_id` attaches a fresh upload; `id` updates one already there.' do |media_item|
|
|
80
|
+
media_item.attribute :id, :id
|
|
81
|
+
media_item.attribute :signed_id, :string, description: 'A `signed_id` from `POST /files`.'
|
|
82
|
+
media_item.include_attributes Spree::Api::V3::MediaRequestSchema
|
|
83
|
+
media_item.attribute :variant_ids, :array, of: :id,
|
|
84
|
+
description: 'Replaces the variants this media is linked to. An empty list clears them.'
|
|
85
|
+
end
|
|
86
|
+
# Narrower than the operator's variant set: `seller_id` would let a
|
|
87
|
+
# payload hand a variant to somebody else, and
|
|
88
|
+
# `tax_category_id`/`delivery_profile_id` are marketplace
|
|
89
|
+
# configuration.
|
|
90
|
+
body.attribute :variants, :array,
|
|
91
|
+
as: 'SellerProductVariantParams',
|
|
92
|
+
description: 'The variants, as a whole: one absent from the list is removed. Pass `id` to update an existing variant.' do |variant|
|
|
93
|
+
variant.attribute :id, :id
|
|
94
|
+
variant.attribute :sku, :string
|
|
95
|
+
variant.attribute :barcode, :string
|
|
96
|
+
variant.attribute :cost_price, :decimal, nullable: true
|
|
97
|
+
variant.attribute :cost_currency, :currency
|
|
98
|
+
variant.attribute :weight, :number, nullable: true
|
|
99
|
+
variant.attribute :height, :number, nullable: true
|
|
100
|
+
variant.attribute :width, :number, nullable: true
|
|
101
|
+
variant.attribute :depth, :number, nullable: true
|
|
102
|
+
variant.attribute :weight_unit, :string, choices: Spree::Variant::WEIGHT_UNITS
|
|
103
|
+
variant.attribute :dimensions_unit, :string, choices: Spree::Variant::DIMENSION_UNITS
|
|
104
|
+
variant.attribute :hs_code, :string
|
|
105
|
+
variant.attribute :customs_description, :string
|
|
106
|
+
variant.attribute :country_of_origin, :country
|
|
107
|
+
variant.attribute :minimum_order_quantity, :integer, nullable: true
|
|
108
|
+
variant.attribute :order_multiple, :integer, nullable: true
|
|
109
|
+
variant.attribute :purchase_unit, :string
|
|
110
|
+
variant.attribute :units_per_carton, :integer,
|
|
111
|
+
nullable: true,
|
|
112
|
+
description: 'How many units fill one carton.'
|
|
113
|
+
variant.attribute :carton_package_type_id, :id,
|
|
114
|
+
nullable: true,
|
|
115
|
+
description: 'The carton this variant is packed into: a package type of kind `carton`.'
|
|
116
|
+
variant.attribute :carton_weight, :number,
|
|
117
|
+
nullable: true,
|
|
118
|
+
description: "What one packed carton weighs, in the variant's weight unit."
|
|
119
|
+
variant.attribute :cartons_per_pallet, :integer,
|
|
120
|
+
nullable: true,
|
|
121
|
+
description: 'How many cartons stack on one pallet.'
|
|
122
|
+
variant.attribute :track_inventory, :boolean
|
|
123
|
+
variant.attribute :preorderable, :boolean
|
|
124
|
+
variant.attribute :preorder_ships_at, :datetime,
|
|
125
|
+
nullable: true,
|
|
126
|
+
description: 'The "ships by" date shown to customers while the variant is a pre-order. Null clears it.'
|
|
127
|
+
variant.attribute :backorder_limit, :integer,
|
|
128
|
+
nullable: true,
|
|
129
|
+
description: 'Maximum units sellable beyond available stock, capping backorders and pre-orders. Null is unlimited.'
|
|
130
|
+
variant.attribute :position, :integer
|
|
131
|
+
variant.attribute :options, :array, of: Spree::Api::V3::VariantOptionRequestSchema,
|
|
132
|
+
description: 'One pair per option type the variant takes part in (size, color).'
|
|
133
|
+
variant.attribute :prices, :array, of: PRICE, description: 'Per-currency prices. Upserted by currency.'
|
|
134
|
+
variant.attribute :stock_levels, :array, of: Spree::Api::V3::StockLevelRequestSchema,
|
|
135
|
+
description: "Stock per location, at this seller's own locations only: a location belonging to anyone else is ignored."
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
request_params 'ProductBulkSubmitParams', action: :bulk_submit do |body|
|
|
140
|
+
body.attribute :ids, :array, of: :id,
|
|
141
|
+
required: true,
|
|
142
|
+
description: 'Only drafts and rejected listings are submitted; the rest are counted in `skipped_count`.'
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
request_params 'ProductBulkDestroyParams', action: :bulk_destroy do |body|
|
|
146
|
+
body.attribute :ids, :array, of: :id,
|
|
147
|
+
required: true,
|
|
148
|
+
description: "Ids outside this seller's catalog are ignored; products the store refuses to delete are counted in `skipped_count`."
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
request_params 'ProductBulkStatusParams', action: :bulk_status_update do |body|
|
|
152
|
+
body.attribute :ids, :array, of: :id, required: true, example: ['prod_UkLWZg9DAJ']
|
|
153
|
+
body.attribute :status, :string,
|
|
154
|
+
required: true,
|
|
155
|
+
choices: SELLER_BULK_STATUS_WORKFLOWS.keys,
|
|
156
|
+
description: 'A listing goes on sale only when the marketplace approves it, so there is no bulk route onto `active`.'
|
|
157
|
+
end
|
|
158
|
+
|
|
46
159
|
before_action :set_status_resource, only: [:submit, :draft, :archive]
|
|
47
160
|
before_action :require_ids!, only: [:bulk_submit, :bulk_status_update, :bulk_destroy]
|
|
48
161
|
|
|
@@ -107,7 +220,7 @@ module Spree
|
|
|
107
220
|
if resolve_workflow.nil?
|
|
108
221
|
return render_error(
|
|
109
222
|
code: 'invalid_status',
|
|
110
|
-
message:
|
|
223
|
+
message: I18n.t('spree.errors.messages.invalid_status'),
|
|
111
224
|
status: :unprocessable_content
|
|
112
225
|
)
|
|
113
226
|
end
|
|
@@ -165,33 +278,7 @@ module Spree
|
|
|
165
278
|
end
|
|
166
279
|
|
|
167
280
|
def permitted_params
|
|
168
|
-
attrs = params.permit(
|
|
169
|
-
:name, :description, :slug,
|
|
170
|
-
:meta_title, :meta_description, :meta_keywords,
|
|
171
|
-
:product_type_id, :delivery_profile_id,
|
|
172
|
-
metadata: {},
|
|
173
|
-
prices: [:amount, :compare_at_amount, :currency],
|
|
174
|
-
# Inline media, the same shape the operator sends. `external_url`
|
|
175
|
-
# stays out for the same reason it does there — it would make the
|
|
176
|
-
# server fetch a URL the caller chose.
|
|
177
|
-
media: [*Spree::Media::WRITABLE_ATTRIBUTES, :id, :signed_id, { variant_ids: [] }],
|
|
178
|
-
# A seller's variants. Narrower than the operator's set:
|
|
179
|
-
# `seller_id` would let a payload hand a variant to somebody else,
|
|
180
|
-
# and `tax_category_id`/`delivery_profile_id` are marketplace
|
|
181
|
-
# configuration.
|
|
182
|
-
variants: [
|
|
183
|
-
:id, :sku, :barcode,
|
|
184
|
-
:cost_price, :cost_currency,
|
|
185
|
-
:weight, :height, :width, :depth, :weight_unit, :dimensions_unit,
|
|
186
|
-
:hs_code, :country_of_origin, :customs_description,
|
|
187
|
-
:minimum_order_quantity, :order_multiple, :purchase_unit, :units_per_carton,
|
|
188
|
-
:carton_package_type_id, :carton_weight, :cartons_per_pallet,
|
|
189
|
-
:track_inventory, :preorderable, :preorder_ships_at, :backorder_limit, :position,
|
|
190
|
-
options: [:name, :value],
|
|
191
|
-
prices: [:amount, :compare_at_amount, :currency],
|
|
192
|
-
stock_levels: [:id, :stock_location_id, :count_on_hand, :backorderable]
|
|
193
|
-
]
|
|
194
|
-
)
|
|
281
|
+
attrs = params.permit(*permitted_attributes)
|
|
195
282
|
|
|
196
283
|
# Assigned only when present: writing a nil `prices` or
|
|
197
284
|
# `stock_levels` key reaches the association setter as nil, which
|