spree_api 6.0.0.rc1 → 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 +0 -17
- 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/subclassed_resource.rb +14 -28
- data/app/controllers/concerns/spree/api/v3/admin/validation_details.rb +1 -1
- data/app/controllers/concerns/spree/api/v3/cart_resolvable.rb +3 -2
- data/app/controllers/concerns/spree/api/v3/channel_resolution.rb +1 -1
- data/app/controllers/concerns/spree/api/v3/company_address_writes.rb +3 -1
- data/app/controllers/concerns/spree/api/v3/error_handler.rb +48 -2
- data/app/controllers/concerns/spree/api/v3/file_uploads.rb +35 -0
- data/app/controllers/concerns/spree/api/v3/money_params.rb +52 -0
- data/app/controllers/concerns/spree/api/v3/orders/claim_actions.rb +1 -5
- data/app/controllers/concerns/spree/api/v3/orders/delivery_actions.rb +6 -6
- data/app/controllers/concerns/spree/api/v3/orders/exchange_actions.rb +1 -4
- data/app/controllers/concerns/spree/api/v3/orders/fulfillment_actions.rb +1 -5
- 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 +5 -21
- data/app/controllers/concerns/spree/api/v3/params_normalizer.rb +5 -0
- 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/strict_money_params.rb +94 -0
- data/app/controllers/spree/api/v3/admin/admin_users_controller.rb +10 -1
- data/app/controllers/spree/api/v3/admin/allowed_origins_controller.rb +8 -1
- data/app/controllers/spree/api/v3/admin/api_keys_controller.rb +15 -7
- data/app/controllers/spree/api/v3/admin/base_controller.rb +1 -0
- data/app/controllers/spree/api/v3/admin/catalogs/order_minimums_controller.rb +3 -1
- data/app/controllers/spree/api/v3/admin/catalogs/quantity_rules_controller.rb +7 -5
- data/app/controllers/spree/api/v3/admin/catalogs_controller.rb +60 -33
- 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 -6
- data/app/controllers/spree/api/v3/admin/claim_reasons_controller.rb +5 -1
- data/app/controllers/spree/api/v3/admin/collections/products_controller.rb +4 -1
- data/app/controllers/spree/api/v3/admin/collections_controller.rb +44 -15
- data/app/controllers/spree/api/v3/admin/commission_rates_controller.rb +60 -12
- data/app/controllers/spree/api/v3/admin/companies/addresses_controller.rb +11 -0
- data/app/controllers/spree/api/v3/admin/companies/memberships_controller.rb +9 -1
- data/app/controllers/spree/api/v3/admin/companies/tax_exemption_certificates_controller.rb +19 -18
- data/app/controllers/spree/api/v3/admin/companies/tax_identifiers_controller.rb +6 -1
- data/app/controllers/spree/api/v3/admin/companies_controller.rb +17 -3
- data/app/controllers/spree/api/v3/admin/countries_controller.rb +5 -1
- data/app/controllers/spree/api/v3/admin/custom_field_definitions_controller.rb +21 -11
- data/app/controllers/spree/api/v3/admin/custom_fields_controller.rb +12 -5
- data/app/controllers/spree/api/v3/admin/customer_groups_controller.rb +9 -1
- data/app/controllers/spree/api/v3/admin/customers/addresses_controller.rb +12 -7
- data/app/controllers/spree/api/v3/admin/customers/store_credits_controller.rb +11 -9
- data/app/controllers/spree/api/v3/admin/customers/tax_identifiers_controller.rb +6 -1
- data/app/controllers/spree/api/v3/admin/customers_controller.rb +35 -7
- 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 +15 -7
- data/app/controllers/spree/api/v3/admin/delivery_methods_controller.rb +92 -57
- 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 +13 -1
- 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 +14 -1
- data/app/controllers/spree/api/v3/admin/email_templates/previews_controller.rb +4 -0
- data/app/controllers/spree/api/v3/admin/email_templates/publications_controller.rb +7 -0
- data/app/controllers/spree/api/v3/admin/email_templates/restorations_controller.rb +8 -0
- data/app/controllers/spree/api/v3/admin/email_templates/test_emails_controller.rb +4 -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 +36 -9
- 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 -1
- 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 +12 -3
- data/app/controllers/spree/api/v3/admin/media_controller.rb +22 -9
- data/app/controllers/spree/api/v3/admin/media_library_controller.rb +4 -0
- 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 -1
- data/app/controllers/spree/api/v3/admin/orders/claims_controller.rb +39 -1
- data/app/controllers/spree/api/v3/admin/orders/deliveries_controller.rb +19 -1
- data/app/controllers/spree/api/v3/admin/orders/discount_codes_controller.rb +5 -1
- data/app/controllers/spree/api/v3/admin/orders/discounts_controller.rb +29 -5
- 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 +66 -7
- data/app/controllers/spree/api/v3/admin/orders/gift_cards_controller.rb +6 -2
- data/app/controllers/spree/api/v3/admin/orders/items_controller.rb +11 -1
- data/app/controllers/spree/api/v3/admin/orders/labels_controller.rb +35 -2
- data/app/controllers/spree/api/v3/admin/orders/payments_controller.rb +16 -5
- data/app/controllers/spree/api/v3/admin/orders/refunds_controller.rb +6 -0
- 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 +74 -60
- data/app/controllers/spree/api/v3/admin/package_types_controller.rb +30 -5
- data/app/controllers/spree/api/v3/admin/password_resets_controller.rb +17 -0
- 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 +27 -15
- data/app/controllers/spree/api/v3/admin/prices_controller.rb +51 -4
- 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 +27 -10
- data/app/controllers/spree/api/v3/admin/products/variants_controller.rb +9 -14
- data/app/controllers/spree/api/v3/admin/products_controller.rb +121 -70
- data/app/controllers/spree/api/v3/admin/promotion_actions_controller.rb +11 -2
- data/app/controllers/spree/api/v3/admin/promotion_rules_controller.rb +10 -1
- data/app/controllers/spree/api/v3/admin/promotions_controller.rb +50 -14
- data/app/controllers/spree/api/v3/admin/purchase_orders_controller.rb +54 -7
- 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 +1 -0
- 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 +6 -0
- data/app/controllers/spree/api/v3/admin/seller_requirement_submissions_controller.rb +15 -0
- data/app/controllers/spree/api/v3/admin/seller_requirements_controller.rb +32 -6
- data/app/controllers/spree/api/v3/admin/sellers_controller.rb +75 -22
- data/app/controllers/spree/api/v3/admin/setup_controller.rb +54 -15
- 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 +48 -7
- data/app/controllers/spree/api/v3/admin/store_controller.rb +122 -53
- 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/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 +23 -1
- data/app/controllers/spree/api/v3/base_controller.rb +2 -0
- data/app/controllers/spree/api/v3/resource_controller.rb +63 -10
- data/app/controllers/spree/api/v3/seller/auth_controller.rb +8 -0
- data/app/controllers/spree/api/v3/seller/base_controller.rb +1 -0
- data/app/controllers/spree/api/v3/seller/countries_controller.rb +2 -2
- data/app/controllers/spree/api/v3/seller/delivery_methods_controller.rb +49 -60
- data/app/controllers/spree/api/v3/seller/exports_controller.rb +18 -1
- 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 +9 -1
- data/app/controllers/spree/api/v3/seller/me_controller.rb +14 -3
- 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 +22 -1
- 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 +10 -0
- data/app/controllers/spree/api/v3/seller/policies_controller.rb +12 -4
- data/app/controllers/spree/api/v3/seller/products_controller.rb +114 -28
- data/app/controllers/spree/api/v3/seller/profile_controller.rb +33 -10
- data/app/controllers/spree/api/v3/seller/requirement_submissions_controller.rb +12 -5
- 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 +4 -0
- data/app/controllers/spree/api/v3/store/auth_controller.rb +10 -0
- data/app/controllers/spree/api/v3/store/carts/discount_codes_controller.rb +8 -1
- data/app/controllers/spree/api/v3/store/carts/fulfillments_controller.rb +10 -2
- data/app/controllers/spree/api/v3/store/carts/gift_cards_controller.rb +8 -1
- data/app/controllers/spree/api/v3/store/carts/items_controller.rb +17 -5
- data/app/controllers/spree/api/v3/store/carts/payment_sessions_controller.rb +20 -6
- data/app/controllers/spree/api/v3/store/carts/payments_controller.rb +11 -0
- data/app/controllers/spree/api/v3/store/carts/po_documents_controller.rb +24 -26
- data/app/controllers/spree/api/v3/store/carts/store_credits_controller.rb +7 -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 +56 -47
- data/app/controllers/spree/api/v3/store/companies/addresses_controller.rb +12 -4
- 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 +9 -1
- data/app/controllers/spree/api/v3/store/customer/addresses_controller.rb +8 -7
- data/app/controllers/spree/api/v3/store/customer/data_requests_controller.rb +5 -0
- data/app/controllers/spree/api/v3/store/customer/password_resets_controller.rb +17 -0
- data/app/controllers/spree/api/v3/store/customer/payment_setup_sessions_controller.rb +10 -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/newsletter_subscribers_controller.rb +22 -0
- data/app/controllers/spree/api/v3/store/orders/claims_controller.rb +11 -2
- data/app/controllers/spree/api/v3/store/orders/returns_controller.rb +10 -1
- 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 -4
- 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 +3 -0
- 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_order_minimum_serializer.rb +3 -2
- 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/channel_serializer.rb +5 -7
- data/app/serializers/spree/api/v3/admin/claim_line_item_serializer.rb +7 -0
- 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 +0 -2
- data/app/serializers/spree/api/v3/admin/country_serializer.rb +4 -0
- data/app/serializers/spree/api/v3/admin/customer_serializer.rb +3 -7
- 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 +14 -10
- data/app/serializers/spree/api/v3/admin/delivery_method_service_serializer.rb +9 -1
- data/app/serializers/spree/api/v3/admin/delivery_rate_serializer.rb +8 -0
- data/app/serializers/spree/api/v3/admin/discount_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/admin/exchange_line_item_serializer.rb +5 -0
- data/app/serializers/spree/api/v3/admin/exchange_serializer.rb +5 -0
- 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_serializer.rb +13 -11
- data/app/serializers/spree/api/v3/admin/gift_card_serializer.rb +3 -3
- 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 +12 -12
- data/app/serializers/spree/api/v3/admin/locale_serializer.rb +13 -0
- data/app/serializers/spree/api/v3/admin/market_serializer.rb +3 -0
- data/app/serializers/spree/api/v3/admin/media_serializer.rb +3 -2
- data/app/serializers/spree/api/v3/admin/order_group_serializer.rb +2 -0
- data/app/serializers/spree/api/v3/admin/order_routing_rule_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/order_serializer.rb +33 -33
- data/app/serializers/spree/api/v3/admin/payment_method_serializer.rb +1 -4
- data/app/serializers/spree/api/v3/admin/payment_serializer.rb +6 -3
- data/app/serializers/spree/api/v3/admin/payment_split_serializer.rb +8 -9
- 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 +1 -3
- data/app/serializers/spree/api/v3/admin/price_serializer.rb +2 -0
- data/app/serializers/spree/api/v3/admin/product_serializer.rb +2 -0
- data/app/serializers/spree/api/v3/admin/promotion_action_serializer.rb +4 -6
- data/app/serializers/spree/api/v3/admin/promotion_rule_serializer.rb +0 -2
- data/app/serializers/spree/api/v3/admin/purchase_order_item_serializer.rb +5 -11
- data/app/serializers/spree/api/v3/admin/purchase_order_serializer.rb +4 -4
- data/app/serializers/spree/api/v3/admin/refund_serializer.rb +7 -3
- 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 +8 -0
- data/app/serializers/spree/api/v3/admin/return_serializer.rb +8 -4
- data/app/serializers/spree/api/v3/admin/seller_balance_serializer.rb +15 -10
- data/app/serializers/spree/api/v3/admin/seller_payout_serializer.rb +3 -5
- data/app/serializers/spree/api/v3/admin/seller_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/admin/seller_transfer_serializer.rb +7 -8
- data/app/serializers/spree/api/v3/admin/shipping_label_serializer.rb +4 -4
- data/app/serializers/spree/api/v3/admin/stock_location_serializer.rb +3 -0
- data/app/serializers/spree/api/v3/admin/stock_movement_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/admin/store_credit_event_serializer.rb +5 -0
- data/app/serializers/spree/api/v3/admin/store_credit_serializer.rb +9 -4
- data/app/serializers/spree/api/v3/admin/store_serializer.rb +17 -98
- data/app/serializers/spree/api/v3/admin/supplier_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/admin/tax_exemption_certificate_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/admin/tax_line_serializer.rb +4 -2
- data/app/serializers/spree/api/v3/admin/tax_rate_serializer.rb +2 -12
- data/app/serializers/spree/api/v3/admin/update_status_serializer.rb +28 -0
- data/app/serializers/spree/api/v3/admin/variant_serializer.rb +7 -3
- data/app/serializers/spree/api/v3/base_serializer.rb +112 -7
- data/app/serializers/spree/api/v3/cart_serializer.rb +11 -29
- data/app/serializers/spree/api/v3/claim_line_item_serializer.rb +5 -13
- data/app/serializers/spree/api/v3/claim_serializer.rb +2 -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/customer_serializer.rb +3 -2
- data/app/serializers/spree/api/v3/delivery_rate_serializer.rb +8 -12
- data/app/serializers/spree/api/v3/delivery_zone_member_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/discount_serializer.rb +4 -1
- data/app/serializers/spree/api/v3/exchange_line_item_serializer.rb +2 -8
- data/app/serializers/spree/api/v3/exchange_serializer.rb +2 -3
- 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/gift_card_batch_serializer.rb +2 -4
- data/app/serializers/spree/api/v3/gift_card_serializer.rb +4 -2
- data/app/serializers/spree/api/v3/import_serializer.rb +0 -12
- data/app/serializers/spree/api/v3/line_item_serializer.rb +15 -5
- 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_serializer.rb +7 -2
- data/app/serializers/spree/api/v3/order_group_serializer.rb +12 -4
- data/app/serializers/spree/api/v3/order_serializer.rb +5 -23
- data/app/serializers/spree/api/v3/payment_session_serializer.rb +2 -4
- data/app/serializers/spree/api/v3/price_history_serializer.rb +5 -5
- data/app/serializers/spree/api/v3/price_serializer.rb +6 -9
- data/app/serializers/spree/api/v3/product_filter_price_range_serializer.rb +10 -4
- data/app/serializers/spree/api/v3/product_serializer.rb +3 -3
- data/app/serializers/spree/api/v3/refund_serializer.rb +8 -5
- data/app/serializers/spree/api/v3/return_line_item_serializer.rb +3 -11
- data/app/serializers/spree/api/v3/return_serializer.rb +3 -6
- 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 +4 -8
- data/app/serializers/spree/api/v3/seller/delivery_rate_serializer.rb +9 -8
- data/app/serializers/spree/api/v3/seller/exchange_line_item_serializer.rb +5 -0
- data/app/serializers/spree/api/v3/seller/exchange_serializer.rb +5 -0
- 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/import_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/seller/media_serializer.rb +2 -5
- data/app/serializers/spree/api/v3/seller/order_line_item_serializer.rb +4 -3
- data/app/serializers/spree/api/v3/seller/order_serializer.rb +16 -16
- data/app/serializers/spree/api/v3/seller/payment_split_serializer.rb +8 -9
- data/app/serializers/spree/api/v3/seller/payout_serializer.rb +2 -4
- 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 +2 -0
- data/app/serializers/spree/api/v3/seller/profile_serializer.rb +7 -7
- 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 -5
- 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 +6 -7
- data/app/serializers/spree/api/v3/seller/variant_serializer.rb +8 -4
- data/app/serializers/spree/api/v3/stock_location_serializer.rb +8 -1
- data/app/serializers/spree/api/v3/store_credit_event_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/store_credit_serializer.rb +3 -5
- data/app/serializers/spree/api/v3/tax_line_serializer.rb +2 -4
- data/app/serializers/spree/api/v3/variant_serializer.rb +3 -3
- 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/config/initializers/typelizer.rb +1 -1
- data/config/routes.rb +5 -3
- data/lib/spree/api/configuration.rb +5 -0
- data/lib/spree/api/dependencies.rb +7 -6
- 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 +126 -80
- 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 +4 -0
- data/lib/tasks/filters.rake +12 -0
- data/lib/typelizer/open_enums.rb +10 -0
- metadata +60 -10
- 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
|
@@ -5,6 +5,88 @@ module Spree
|
|
|
5
5
|
class DeliveryMethodsController < ResourceController
|
|
6
6
|
scoped_resource :delivery_methods
|
|
7
7
|
|
|
8
|
+
# A single POST/PATCH can ship eligibility rules and carrier service
|
|
9
|
+
# rows alongside the basics; `DeliveryMethod#rules=` / `#services=`
|
|
10
|
+
# reconcile to the desired set, so the dashboard saves the whole
|
|
11
|
+
# sheet in one round-trip.
|
|
12
|
+
request_params :delivery_method do |body|
|
|
13
|
+
body.attribute :name, :string, required: true, on: :create, example: 'Express'
|
|
14
|
+
body.attribute :admin_name, :string, nullable: true
|
|
15
|
+
body.attribute :code, :string, nullable: true
|
|
16
|
+
body.attribute :fulfillment_provider, :string,
|
|
17
|
+
example: 'manual',
|
|
18
|
+
description: 'Fulfillment provider shorthand (see the fulfillment providers endpoint), e.g. `manual`.'
|
|
19
|
+
body.attribute :pickup_point_provider, :string, nullable: true
|
|
20
|
+
body.attribute :rate_provider, :string,
|
|
21
|
+
nullable: true,
|
|
22
|
+
description: 'Rate provider shorthand (see the rate providers endpoint), e.g. `easy_post`. Omit or send null for the built-in provider, which prices through the method\'s calculator.'
|
|
23
|
+
body.attribute :storefront_visible, :boolean
|
|
24
|
+
body.attribute :available_to_sellers, :boolean,
|
|
25
|
+
description: "Marketplace only: whether a seller's packages may be quoted by this method. Off by default, and refused on a method that belongs to a seller."
|
|
26
|
+
body.attribute :tracking_url, :string, nullable: true
|
|
27
|
+
body.attribute :estimated_transit_business_days_min, :integer, nullable: true
|
|
28
|
+
body.attribute :estimated_transit_business_days_max, :integer, nullable: true
|
|
29
|
+
body.attribute :tax_category_id, :id,
|
|
30
|
+
nullable: true,
|
|
31
|
+
description: 'Prefixed tax category ID (`taxcat_...`), or null to clear.'
|
|
32
|
+
body.attribute :markup_flat, :decimal,
|
|
33
|
+
nullable: true,
|
|
34
|
+
description: 'Method-level flat handling fee added on top of provider-quoted rates.'
|
|
35
|
+
body.attribute :markup_percent, :decimal,
|
|
36
|
+
nullable: true,
|
|
37
|
+
description: 'Method-level percentage handling fee added on top of provider-quoted rates. Ignored for calculator-priced methods.'
|
|
38
|
+
body.attribute :delivery_profile_id, :id,
|
|
39
|
+
example: 'fp_86Rf07xd4z',
|
|
40
|
+
description: 'Delivery profile this method belongs to (`fp_...`); defaults to the store default profile.'
|
|
41
|
+
body.attribute :delivery_origin_group_id, :id,
|
|
42
|
+
description: "Origin group offering this method (`og_...`); defaults to the zone's group, else the profile's default group."
|
|
43
|
+
body.attribute :delivery_zone_id, :id,
|
|
44
|
+
nullable: true,
|
|
45
|
+
description: "Delivery zone narrowing destinations (`dz_...`), or null for no restriction. Must belong to the method's profile."
|
|
46
|
+
body.attribute :stock_location_ids, :array, of: :id,
|
|
47
|
+
description: 'Pickup locations (`sloc_...`); replaces the full set.'
|
|
48
|
+
body.attribute :calculator, :object,
|
|
49
|
+
description: "How the method prices a shipment: a type from the calculators endpoint and its preferences, matching that type's `schema`." do |calculator|
|
|
50
|
+
calculator.attribute :type, :string, example: 'flat_rate'
|
|
51
|
+
calculator.attribute :preferences, :hash, example: { amount: '12.5' }
|
|
52
|
+
end
|
|
53
|
+
# Permitted by `rule_attributes`, which adds the association-backed
|
|
54
|
+
# config each registered rule kind declares.
|
|
55
|
+
body.attribute :rules, :array,
|
|
56
|
+
permit: false,
|
|
57
|
+
description: 'Eligibility rules. Replaces the full set: omitted rules are removed.' do |rule|
|
|
58
|
+
rule.attribute :id, :id
|
|
59
|
+
rule.attribute :type, :string, description: 'A rule kind from the delivery method rule types endpoint.'
|
|
60
|
+
rule.attribute :active, :boolean
|
|
61
|
+
rule.attribute :preferences, :hash
|
|
62
|
+
rule.attribute :product_ids, :array, of: :id,
|
|
63
|
+
description: 'Products an association-backed rule (`excluded_products_rule`) applies to.'
|
|
64
|
+
end
|
|
65
|
+
body.attribute :services, :array,
|
|
66
|
+
as: 'DeliveryMethodServiceParams',
|
|
67
|
+
description: 'Carrier service rows: which provider services this method offers. Replaces the full set: omitted rows are removed; no rows means every service the provider returns is offered.' do |service|
|
|
68
|
+
service.attribute :id, :id, description: 'Prefixed row ID (`dms_...`) when updating an existing row.'
|
|
69
|
+
service.attribute :carrier, :string,
|
|
70
|
+
required: true,
|
|
71
|
+
example: 'UPS',
|
|
72
|
+
description: "Carrier identifier as the provider's API knows it."
|
|
73
|
+
service.attribute :service, :string,
|
|
74
|
+
required: true,
|
|
75
|
+
example: 'Ground',
|
|
76
|
+
description: "Service identifier as the provider's API knows it."
|
|
77
|
+
service.attribute :label, :string,
|
|
78
|
+
nullable: true,
|
|
79
|
+
description: 'Display label shown to customers instead of the carrier-derived name.'
|
|
80
|
+
service.attribute :markup_flat, :decimal,
|
|
81
|
+
nullable: true,
|
|
82
|
+
description: 'Overrides the method-level flat markup for this service.'
|
|
83
|
+
service.attribute :markup_percent, :decimal,
|
|
84
|
+
nullable: true,
|
|
85
|
+
description: 'Overrides the method-level percentage markup for this service.'
|
|
86
|
+
service.attribute :position, :integer
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
8
90
|
# GET /api/v3/admin/delivery_methods/calculators
|
|
9
91
|
# Registered delivery calculator classes with their preference
|
|
10
92
|
# schemas, so admin UIs can render configuration forms.
|
|
@@ -15,7 +97,7 @@ module Spree
|
|
|
15
97
|
{
|
|
16
98
|
type: calculator_class.api_type,
|
|
17
99
|
name: calculator_class.description,
|
|
18
|
-
|
|
100
|
+
schema: calculator_class.preference_json_schema
|
|
19
101
|
}
|
|
20
102
|
end
|
|
21
103
|
|
|
@@ -80,9 +162,9 @@ module Spree
|
|
|
80
162
|
def create
|
|
81
163
|
@resource = model_class.new(assignable_params)
|
|
82
164
|
authorize_resource!(@resource, :create)
|
|
83
|
-
|
|
165
|
+
@resource.assign_calculator_attributes(permitted_params[:calculator])
|
|
84
166
|
|
|
85
|
-
if @resource.
|
|
167
|
+
if @resource.save
|
|
86
168
|
render json: serialize_resource(@resource), status: :created
|
|
87
169
|
else
|
|
88
170
|
render_validation_error(@resource.errors)
|
|
@@ -90,10 +172,12 @@ module Spree
|
|
|
90
172
|
end
|
|
91
173
|
|
|
92
174
|
def update
|
|
93
|
-
|
|
94
|
-
|
|
175
|
+
saved = save_atomically do
|
|
176
|
+
@resource.assign_attributes(assignable_params)
|
|
177
|
+
@resource.assign_calculator_attributes(permitted_params[:calculator])
|
|
178
|
+
end
|
|
95
179
|
|
|
96
|
-
if
|
|
180
|
+
if saved
|
|
97
181
|
render json: serialize_resource(@resource)
|
|
98
182
|
else
|
|
99
183
|
render_validation_error(@resource.errors)
|
|
@@ -118,23 +202,8 @@ module Spree
|
|
|
118
202
|
Spree.api.admin_delivery_method_serializer
|
|
119
203
|
end
|
|
120
204
|
|
|
121
|
-
# A single POST/PATCH can ship eligibility rules and carrier service
|
|
122
|
-
# rows alongside the basics; `DeliveryMethod#rules=` / `#services=`
|
|
123
|
-
# reconcile to the desired set, so the dashboard saves the whole
|
|
124
|
-
# sheet in one round-trip.
|
|
125
205
|
def permitted_params
|
|
126
|
-
params.permit(
|
|
127
|
-
*model_additional_permitted_attributes,
|
|
128
|
-
:name, :admin_name, :code, :fulfillment_provider,
|
|
129
|
-
:pickup_point_provider, :rate_provider, :storefront_visible, :tracking_url,
|
|
130
|
-
:available_to_sellers,
|
|
131
|
-
:estimated_transit_business_days_min, :estimated_transit_business_days_max,
|
|
132
|
-
:tax_category_id, :calculator_type, :markup_flat, :markup_percent,
|
|
133
|
-
:delivery_profile_id, :delivery_origin_group_id, :delivery_zone_id,
|
|
134
|
-
stock_location_ids: [], calculator_preferences: {},
|
|
135
|
-
rules: rule_attributes,
|
|
136
|
-
services: [:id, :carrier, :service, :label, :markup_flat, :markup_percent, :position]
|
|
137
|
-
)
|
|
206
|
+
params.permit(*permitted_attributes, rules: rule_attributes)
|
|
138
207
|
end
|
|
139
208
|
|
|
140
209
|
def rule_attributes
|
|
@@ -158,7 +227,7 @@ module Spree
|
|
|
158
227
|
|
|
159
228
|
# Resolves prefixed-ID params to records; calculator handled separately.
|
|
160
229
|
def assignable_params
|
|
161
|
-
attributes = permitted_params.except(:tax_category_id, :delivery_profile_id, :delivery_origin_group_id, :delivery_zone_id, :stock_location_ids, :
|
|
230
|
+
attributes = permitted_params.except(:tax_category_id, :delivery_profile_id, :delivery_origin_group_id, :delivery_zone_id, :stock_location_ids, :calculator)
|
|
162
231
|
if params.key?(:tax_category_id)
|
|
163
232
|
attributes[:tax_category] = params[:tax_category_id].present? ? Spree::TaxCategory.accessible_by(current_ability, :show).find_by_prefix_id!(params[:tax_category_id]) : nil
|
|
164
233
|
end
|
|
@@ -200,40 +269,6 @@ module Spree
|
|
|
200
269
|
where(id: decode_prefixed_ids(ids)).
|
|
201
270
|
pluck(:id)
|
|
202
271
|
end
|
|
203
|
-
|
|
204
|
-
def assign_calculator(delivery_method)
|
|
205
|
-
calculator_type = permitted_params[:calculator_type]
|
|
206
|
-
preferences = permitted_params[:calculator_preferences]
|
|
207
|
-
|
|
208
|
-
if calculator_type.present? && delivery_method.calculator&.class&.api_type != calculator_type
|
|
209
|
-
selected_calculator_class = Spree::DeliveryMethod.calculators.find do |klass|
|
|
210
|
-
klass.api_type == calculator_type
|
|
211
|
-
end
|
|
212
|
-
unless selected_calculator_class
|
|
213
|
-
delivery_method.errors.add(:calculator_type, :invalid)
|
|
214
|
-
return
|
|
215
|
-
end
|
|
216
|
-
|
|
217
|
-
delivery_method.calculator = selected_calculator_class.new
|
|
218
|
-
end
|
|
219
|
-
|
|
220
|
-
return if preferences.blank?
|
|
221
|
-
|
|
222
|
-
# A payload may carry preferences without naming a calculator —
|
|
223
|
-
# editing the amount on a method that already has one, or creating
|
|
224
|
-
# with the default. The model only builds the default calculator
|
|
225
|
-
# at validation, so without this the preferences land on nothing
|
|
226
|
-
# and the amount the merchant typed is silently replaced by a free
|
|
227
|
-
# rate.
|
|
228
|
-
delivery_method.ensure_calculator
|
|
229
|
-
return if delivery_method.calculator.nil?
|
|
230
|
-
|
|
231
|
-
preferences.each do |key, value|
|
|
232
|
-
next unless delivery_method.calculator.has_preference?(key)
|
|
233
|
-
|
|
234
|
-
delivery_method.calculator.set_preference(key, value)
|
|
235
|
-
end
|
|
236
|
-
end
|
|
237
272
|
end
|
|
238
273
|
end
|
|
239
274
|
end
|
|
@@ -10,6 +10,13 @@ module Spree
|
|
|
10
10
|
class OriginGroupsController < ResourceController
|
|
11
11
|
scoped_resource :settings
|
|
12
12
|
|
|
13
|
+
request_params 'DeliveryOriginGroupParams' do |body|
|
|
14
|
+
body.attribute :name, :string, nullable: true, example: 'EU warehouse'
|
|
15
|
+
body.attribute :position, :integer
|
|
16
|
+
body.attribute :stock_location_ids, :array, of: :id,
|
|
17
|
+
description: 'Prefixed stock location IDs (`sloc_...`); replaces the full set. Empty means every store location.'
|
|
18
|
+
end
|
|
19
|
+
|
|
13
20
|
def create
|
|
14
21
|
@resource = scope.new(assignable_params)
|
|
15
22
|
authorize_resource!(@resource, :create)
|
|
@@ -46,7 +53,7 @@ module Spree
|
|
|
46
53
|
end
|
|
47
54
|
|
|
48
55
|
def permitted_params
|
|
49
|
-
params.permit(*
|
|
56
|
+
params.permit(*permitted_attributes)
|
|
50
57
|
end
|
|
51
58
|
|
|
52
59
|
def collection_includes
|
|
@@ -9,6 +9,18 @@ module Spree
|
|
|
9
9
|
class DeliveryProfilesController < ResourceController
|
|
10
10
|
scoped_resource :settings
|
|
11
11
|
|
|
12
|
+
request_params :delivery_profile do |body|
|
|
13
|
+
body.attribute :name, :string, required: true, on: :create, example: 'Oversized'
|
|
14
|
+
body.attribute :kind, :string,
|
|
15
|
+
example: 'shipping',
|
|
16
|
+
description: 'Registered profile kind (`shipping`, `digital`, extension kinds) from the kinds endpoint. Read on create only; defaults to shipping.'
|
|
17
|
+
body.attribute :default, :boolean,
|
|
18
|
+
description: 'Promotes this profile to the store default; the previous default is demoted.'
|
|
19
|
+
body.attribute :position, :integer
|
|
20
|
+
body.attribute :stock_location_ids, :array, of: :id,
|
|
21
|
+
description: 'Prefixed stock location IDs (`sloc_...`); replaces the full set. Empty means every store location.'
|
|
22
|
+
end
|
|
23
|
+
|
|
12
24
|
# GET /api/v3/admin/delivery_profiles/kinds
|
|
13
25
|
# Registered profile kinds, so admin UIs offer extension-added
|
|
14
26
|
# kinds without hardcoding the built-ins.
|
|
@@ -58,7 +70,7 @@ module Spree
|
|
|
58
70
|
end
|
|
59
71
|
|
|
60
72
|
def permitted_params
|
|
61
|
-
params.permit(*
|
|
73
|
+
params.permit(*permitted_attributes)
|
|
62
74
|
end
|
|
63
75
|
|
|
64
76
|
def collection_includes
|
|
@@ -8,6 +8,26 @@ module Spree
|
|
|
8
8
|
class DeliveryZonesController < ResourceController
|
|
9
9
|
scoped_resource :settings
|
|
10
10
|
|
|
11
|
+
request_params :delivery_zone do |body|
|
|
12
|
+
body.attribute :name, :string, required: true, on: :create, example: 'US North-East'
|
|
13
|
+
body.attribute :description, :string, nullable: true
|
|
14
|
+
body.attribute :delivery_profile_id, :id,
|
|
15
|
+
description: 'Delivery profile this zone belongs to (`fp_...`); defaults to the store default profile.'
|
|
16
|
+
body.attribute :delivery_origin_group_id, :id,
|
|
17
|
+
description: 'Origin group this zone belongs to (`og_...`).'
|
|
18
|
+
body.attribute :members, :array,
|
|
19
|
+
as: 'DeliveryZoneMemberParams',
|
|
20
|
+
description: "Replaces the zone's full member set atomically." do |member|
|
|
21
|
+
member.attribute :member_type, :string, required: true, choices: Spree::DeliveryZoneMember::MEMBER_TYPES
|
|
22
|
+
member.attribute :country_code, :country, example: 'US'
|
|
23
|
+
member.attribute :state_code, :string,
|
|
24
|
+
description: 'A subdivision code or name. Without `country_code` the country is inferred when only one country matches.'
|
|
25
|
+
member.attribute :postal_code_prefix, :string
|
|
26
|
+
member.attribute :postal_code_from, :string
|
|
27
|
+
member.attribute :postal_code_to, :string
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
11
31
|
def create
|
|
12
32
|
@resource = model_class.new(zone_params)
|
|
13
33
|
authorize_resource!(@resource, :create)
|
|
@@ -50,11 +70,7 @@ module Spree
|
|
|
50
70
|
end
|
|
51
71
|
|
|
52
72
|
def permitted_params
|
|
53
|
-
params.permit(
|
|
54
|
-
*model_additional_permitted_attributes,
|
|
55
|
-
:name, :description, :delivery_profile_id, :delivery_origin_group_id,
|
|
56
|
-
members: [:member_type, :country_code, :state_code, :postal_code_prefix, :postal_code_from, :postal_code_to]
|
|
57
|
-
)
|
|
73
|
+
params.permit(*permitted_attributes)
|
|
58
74
|
end
|
|
59
75
|
|
|
60
76
|
def collection_includes
|
|
@@ -8,6 +8,19 @@ module Spree
|
|
|
8
8
|
class DraftsController < Admin::BaseController
|
|
9
9
|
include Spree::Api::V3::Admin::EmailTemplateLookup
|
|
10
10
|
|
|
11
|
+
request_params 'EmailTemplateDraftParams' do |body|
|
|
12
|
+
body.include_attributes Spree::Api::V3::Admin::EmailTemplateLanguageRequestSchema
|
|
13
|
+
body.attribute :subject, :string, nullable: true, example: 'Your order {{ order.number }} is confirmed'
|
|
14
|
+
body.attribute :body, :string,
|
|
15
|
+
example: '<mj-section><mj-column><mj-text>Thanks, {{ order.customer_name }}!</mj-text></mj-column></mj-section>'
|
|
16
|
+
body.attribute :lock_version, :integer,
|
|
17
|
+
nullable: true,
|
|
18
|
+
example: 0,
|
|
19
|
+
description: 'The `lock_version` the draft was loaded with, or null when there was no draft; a save from an older copy is refused with 409. Omit it to save without checking.'
|
|
20
|
+
body.attribute :rebase, :boolean,
|
|
21
|
+
description: "Marks the draft as based on Spree's current default, after reviewing what changed in it."
|
|
22
|
+
end
|
|
23
|
+
|
|
11
24
|
# PUT /api/v3/admin/email_templates/:email_template_id/draft
|
|
12
25
|
#
|
|
13
26
|
# Send the `lock_version` the draft was loaded with: a save made from
|
|
@@ -18,7 +31,7 @@ module Spree
|
|
|
18
31
|
|
|
19
32
|
result = Spree.email_template_save_draft_workflow.call(
|
|
20
33
|
store: current_store, key: email_template.key, locale: language, actor: current_actor,
|
|
21
|
-
attributes: params.permit(
|
|
34
|
+
attributes: params.permit(*declared_permitted_attributes).to_h.symbolize_keys
|
|
22
35
|
)
|
|
23
36
|
render_email_template_result(result)
|
|
24
37
|
end
|
|
@@ -6,6 +6,10 @@ module Spree
|
|
|
6
6
|
class PreviewsController < Admin::BaseController
|
|
7
7
|
include Spree::Api::V3::Admin::EmailTemplateLookup
|
|
8
8
|
|
|
9
|
+
request_params 'EmailTemplatePreviewParams' do |body|
|
|
10
|
+
body.include_attributes Spree::Api::V3::Admin::EmailTemplatePreviewRequestSchema
|
|
11
|
+
end
|
|
12
|
+
|
|
9
13
|
before_action :authorize_sample_data!
|
|
10
14
|
|
|
11
15
|
# POST /api/v3/admin/email_templates/:email_template_id/preview
|
|
@@ -6,6 +6,13 @@ module Spree
|
|
|
6
6
|
class PublicationsController < Admin::BaseController
|
|
7
7
|
include Spree::Api::V3::Admin::EmailTemplateLookup
|
|
8
8
|
|
|
9
|
+
request_params 'EmailTemplateVersionParams' do |body|
|
|
10
|
+
body.include_attributes Spree::Api::V3::Admin::EmailTemplateLanguageRequestSchema
|
|
11
|
+
body.attribute :lock_version, :integer,
|
|
12
|
+
permit: false,
|
|
13
|
+
description: "The draft's `lock_version` as reviewed. A draft saved since is refused with 409."
|
|
14
|
+
end
|
|
15
|
+
|
|
9
16
|
before_action :authorize_sample_data!
|
|
10
17
|
|
|
11
18
|
# POST /api/v3/admin/email_templates/:email_template_id/publication
|
|
@@ -6,6 +6,14 @@ module Spree
|
|
|
6
6
|
class RestorationsController < Admin::BaseController
|
|
7
7
|
include Spree::Api::V3::Admin::EmailTemplateLookup
|
|
8
8
|
|
|
9
|
+
request_params 'EmailTemplateRestoreParams' do |body|
|
|
10
|
+
body.include_attributes Spree::Api::V3::Admin::EmailTemplateLanguageRequestSchema
|
|
11
|
+
body.attribute :lock_version, :integer,
|
|
12
|
+
nullable: true,
|
|
13
|
+
permit: false,
|
|
14
|
+
description: "The open draft's `lock_version`, or null when there is none; checked as when saving."
|
|
15
|
+
end
|
|
16
|
+
|
|
9
17
|
# POST /api/v3/admin/email_templates/:email_template_id/revisions/:revision_id/restoration
|
|
10
18
|
#
|
|
11
19
|
# Copies the revision into the language's draft, to be published
|
|
@@ -6,6 +6,10 @@ module Spree
|
|
|
6
6
|
class TestEmailsController < Admin::BaseController
|
|
7
7
|
include Spree::Api::V3::Admin::EmailTemplateLookup
|
|
8
8
|
|
|
9
|
+
request_params 'EmailTemplatePreviewParams' do |body|
|
|
10
|
+
body.include_attributes Spree::Api::V3::Admin::EmailTemplatePreviewRequestSchema
|
|
11
|
+
end
|
|
12
|
+
|
|
9
13
|
before_action :authorize_sample_data!
|
|
10
14
|
|
|
11
15
|
# POST /api/v3/admin/email_templates/:email_template_id/test_email
|
|
@@ -16,6 +16,26 @@ module Spree
|
|
|
16
16
|
# readable ones instead of gating on a single scope.
|
|
17
17
|
skip_scope_check! only: :index
|
|
18
18
|
|
|
19
|
+
request_params :export do |body|
|
|
20
|
+
body.attribute :type, :string,
|
|
21
|
+
required: true, on: :create,
|
|
22
|
+
example: 'products',
|
|
23
|
+
description: 'Which dataset to export, as its shorthand: `products`, `orders`, `customers`, `product_translations`, `gift_cards`, `coupon_codes`, `newsletter_subscribers`, `price_list_prices`, `purchase_orders`, or a type an extension registers.'
|
|
24
|
+
body.attribute :record_selection, :string,
|
|
25
|
+
choices: %w[filtered all],
|
|
26
|
+
example: 'filtered',
|
|
27
|
+
description: '`filtered` (the default) keeps `search_params`; `all` ignores them and exports every record in scope.'
|
|
28
|
+
body.attribute :results_url, :string,
|
|
29
|
+
example: 'https://admin.example.com/store_abc/exports',
|
|
30
|
+
description: "Absolute URL of your admin exports view; the export-done email uses it as the download button target. Only honored when it matches one of the store's allowed origins."
|
|
31
|
+
# Read from the raw params: a Ransack hash nests groupings, which
|
|
32
|
+
# `permit(search_params: {})` rejects.
|
|
33
|
+
body.attribute :search_params, :hash,
|
|
34
|
+
permit: false,
|
|
35
|
+
example: { name_cont: 'shirt' },
|
|
36
|
+
description: 'A Ransack query, with the predicates the list endpoint accepts. A `price_list_prices` export requires `price_list_id_eq` naming a price list of the current store, and refuses `record_selection: "all"`.'
|
|
37
|
+
end
|
|
38
|
+
|
|
19
39
|
# We stream the CSV inline rather than redirecting to ActiveStorage's
|
|
20
40
|
# signed-URL endpoint because the SPA's Vite proxy only forwards
|
|
21
41
|
# `/api/*`. A cross-origin redirect to `/rails/active_storage/...`
|
|
@@ -92,13 +112,10 @@ module Spree
|
|
|
92
112
|
klass.new(attrs)
|
|
93
113
|
end
|
|
94
114
|
|
|
95
|
-
# `
|
|
96
|
-
#
|
|
97
|
-
# rejects nested hashes, so we extract via `to_unsafe_h`. `:format`
|
|
98
|
-
# is intentionally dropped — only CSV is supported and Rails' request
|
|
99
|
-
# format would otherwise overwrite the model's enum.
|
|
115
|
+
# `:format` is intentionally dropped — only CSV is supported and Rails'
|
|
116
|
+
# request format would otherwise overwrite the model's enum.
|
|
100
117
|
def permitted_params
|
|
101
|
-
attrs = params.permit(*
|
|
118
|
+
attrs = params.permit(*permitted_attributes)
|
|
102
119
|
raw = params[:search_params]
|
|
103
120
|
attrs[:search_params] = raw.respond_to?(:to_unsafe_h) ? raw.to_unsafe_h : raw if raw.present?
|
|
104
121
|
attrs
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Admin
|
|
5
|
+
class FilesController < Admin::BaseController
|
|
6
|
+
include Spree::Api::V3::FileUploads
|
|
7
|
+
|
|
8
|
+
# The endpoint that uses a file checks its own scope (`write_customers`
|
|
9
|
+
# for an avatar, and so on), so this gate is the floor, not the only
|
|
10
|
+
# check. `write_products` covers the dominant flow, product media.
|
|
11
|
+
scoped_resource :products
|
|
12
|
+
|
|
13
|
+
skip_before_action :authenticate_user
|
|
14
|
+
|
|
15
|
+
# Permitted by Spree::Api::V3::FileUploads, shared with the seller branch.
|
|
16
|
+
request_params 'FileUploadCreateParams', action: :create do |body|
|
|
17
|
+
body.include_attributes Spree::Api::V3::FileUploadRequestSchema
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
private
|
|
21
|
+
|
|
22
|
+
def file_upload_serializer
|
|
23
|
+
Spree.api.admin_file_upload_serializer
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -11,6 +11,25 @@ module Spree
|
|
|
11
11
|
class GiftCardBatchesController < ResourceController
|
|
12
12
|
scoped_resource :gift_cards
|
|
13
13
|
|
|
14
|
+
request_params :gift_card_batch do |body|
|
|
15
|
+
body.attribute :prefix, :string,
|
|
16
|
+
required: true, on: :create,
|
|
17
|
+
example: 'WELCOME',
|
|
18
|
+
description: 'Lowercased and prepended to every generated code.'
|
|
19
|
+
body.attribute :amount, :decimal,
|
|
20
|
+
required: true, on: :create,
|
|
21
|
+
example: '25.00',
|
|
22
|
+
description: 'The amount of each card, greater than zero.'
|
|
23
|
+
body.attribute :codes_count, :integer,
|
|
24
|
+
required: true, on: :create,
|
|
25
|
+
example: 100,
|
|
26
|
+
description: 'How many cards to generate. Capped at `gift_card_batch_limit`; batches over `gift_card_batch_web_limit` generate in the background.'
|
|
27
|
+
body.attribute :currency, :currency,
|
|
28
|
+
example: 'USD',
|
|
29
|
+
description: 'ISO 4217 currency code. Defaults to the store currency.'
|
|
30
|
+
body.attribute :expires_at, :date, nullable: true, example: '2030-12-31'
|
|
31
|
+
end
|
|
32
|
+
|
|
14
33
|
protected
|
|
15
34
|
|
|
16
35
|
def model_class
|
|
@@ -22,7 +41,7 @@ module Spree
|
|
|
22
41
|
end
|
|
23
42
|
|
|
24
43
|
def permitted_params
|
|
25
|
-
params.permit(*
|
|
44
|
+
params.permit(*permitted_attributes)
|
|
26
45
|
end
|
|
27
46
|
end
|
|
28
47
|
end
|
|
@@ -13,6 +13,24 @@ module Spree
|
|
|
13
13
|
class GiftCardsController < ResourceController
|
|
14
14
|
scoped_resource :gift_cards
|
|
15
15
|
|
|
16
|
+
request_params :gift_card do |body|
|
|
17
|
+
body.attribute :amount, :decimal,
|
|
18
|
+
required: true, on: :create,
|
|
19
|
+
example: '25.00',
|
|
20
|
+
description: 'Greater than zero.'
|
|
21
|
+
body.attribute :currency, :currency,
|
|
22
|
+
example: 'USD',
|
|
23
|
+
description: 'ISO 4217 currency code. Defaults to the store currency.'
|
|
24
|
+
body.attribute :code, :string, example: 'WELCOME50', description: 'Generated when omitted.'
|
|
25
|
+
body.attribute :expires_at, :date, nullable: true, example: '2030-12-31'
|
|
26
|
+
# Resolved through the caller's ability by `resolve_customer`.
|
|
27
|
+
body.attribute :customer_id, :id,
|
|
28
|
+
nullable: true,
|
|
29
|
+
permit: false,
|
|
30
|
+
example: 'cus_UkLWZg9DAJ',
|
|
31
|
+
description: 'The customer the card belongs to. Needs the `read_customers` permission; null detaches it.'
|
|
32
|
+
end
|
|
33
|
+
|
|
16
34
|
before_action :resolve_customer, only: [:create, :update]
|
|
17
35
|
|
|
18
36
|
protected
|
|
@@ -26,7 +44,7 @@ module Spree
|
|
|
26
44
|
end
|
|
27
45
|
|
|
28
46
|
def permitted_params
|
|
29
|
-
params.permit(*
|
|
47
|
+
params.permit(*permitted_attributes).tap do |attributes|
|
|
30
48
|
attributes[:customer] = @customer if params.key?(:customer_id)
|
|
31
49
|
end
|
|
32
50
|
end
|
|
@@ -17,10 +17,43 @@ module Spree
|
|
|
17
17
|
# writable ones instead of gating on a single scope.
|
|
18
18
|
skip_scope_check! only: :index
|
|
19
19
|
|
|
20
|
+
request_params :import do |body|
|
|
21
|
+
body.attribute :type, :string,
|
|
22
|
+
required: true, on: :create,
|
|
23
|
+
example: 'products',
|
|
24
|
+
description: 'Which dataset to import, as its shorthand: `products`, `customers`, `product_translations`, `price_list_prices`, `purchase_orders`, or a type an extension registers.'
|
|
25
|
+
body.attribute :attachment_signed_id, :string,
|
|
26
|
+
required: true, on: :create,
|
|
27
|
+
description: 'The `signed_id` of the uploaded CSV, from `files.upload()` with `visibility: "private"`.'
|
|
28
|
+
body.attribute :delimiter, :string,
|
|
29
|
+
choices: [',', ';', '|', "\t"],
|
|
30
|
+
example: ',',
|
|
31
|
+
description: 'CSV column separator. Defaults to a comma.'
|
|
32
|
+
body.attribute :results_url, :string,
|
|
33
|
+
example: 'https://admin.example.com/store_abc/settings/imports',
|
|
34
|
+
description: "Absolute URL of your admin imports view; the import-done email links back to it with `?import=<id>` appended. Only honored when it matches one of the store's allowed origins."
|
|
35
|
+
body.attribute :price_list_id, :id,
|
|
36
|
+
description: 'For `price_list_prices` imports: the price list the rows are merged into. Must belong to the current store; other types ignore it.'
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
request_params 'ImportCompleteMappingParams', action: :complete_mapping do |body|
|
|
40
|
+
body.attribute :mappings, :array,
|
|
41
|
+
description: 'Column assignments to apply before processing starts. Omit to accept the ones assigned on create.' do |mapping|
|
|
42
|
+
mapping.attribute :schema_field, :string,
|
|
43
|
+
required: true,
|
|
44
|
+
example: 'slug',
|
|
45
|
+
description: "A schema field name from the import's `schema_fields`."
|
|
46
|
+
mapping.attribute :file_column, :string,
|
|
47
|
+
nullable: true,
|
|
48
|
+
example: 'Product Handle',
|
|
49
|
+
description: 'The CSV header to read the field from; null unmaps the field.'
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
20
53
|
# POST /api/v3/admin/imports
|
|
21
54
|
#
|
|
22
|
-
# `
|
|
23
|
-
# POST /api/v3/admin/
|
|
55
|
+
# `attachment_signed_id` is a signed id obtained from
|
|
56
|
+
# POST /api/v3/admin/files. On success the import advances
|
|
24
57
|
# straight into `mapping` (auto-assigning file columns from the CSV
|
|
25
58
|
# headers), so the response already carries the mapping payload.
|
|
26
59
|
def create
|
|
@@ -48,12 +81,6 @@ module Spree
|
|
|
48
81
|
else
|
|
49
82
|
render_errors(@resource.errors)
|
|
50
83
|
end
|
|
51
|
-
rescue ActiveSupport::MessageVerifier::InvalidSignature
|
|
52
|
-
render_error(
|
|
53
|
-
code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:validation_error],
|
|
54
|
-
message: 'Invalid attachment signed id',
|
|
55
|
-
status: :unprocessable_content
|
|
56
|
-
)
|
|
57
84
|
end
|
|
58
85
|
|
|
59
86
|
# PATCH /api/v3/admin/imports/:id/complete_mapping
|
|
@@ -259,7 +286,7 @@ module Spree
|
|
|
259
286
|
end
|
|
260
287
|
|
|
261
288
|
def permitted_params
|
|
262
|
-
params.permit(*
|
|
289
|
+
params.permit(*permitted_attributes)
|
|
263
290
|
end
|
|
264
291
|
|
|
265
292
|
# A price-list import writes into one list, named by its prefixed id.
|
|
@@ -15,6 +15,18 @@ module Spree
|
|
|
15
15
|
subclassed_via -> { Spree::Integration.registered_classes },
|
|
16
16
|
unknown_type_error: 'unknown_integration_type'
|
|
17
17
|
|
|
18
|
+
request_params :integration do |body|
|
|
19
|
+
body.attribute :type, :string,
|
|
20
|
+
required: true,
|
|
21
|
+
only: :create,
|
|
22
|
+
example: 'carrier',
|
|
23
|
+
description: 'Wire shorthand from the integration types endpoint.'
|
|
24
|
+
body.attribute :active, :boolean,
|
|
25
|
+
description: 'Activating runs the connection check, and a failed check is a 422.'
|
|
26
|
+
body.attribute :preferences, :hash,
|
|
27
|
+
description: 'Credential values. Secret preferences come back masked, and sending a masked value back keeps the stored secret.'
|
|
28
|
+
end
|
|
29
|
+
|
|
18
30
|
# GET /api/v3/admin/integrations/types
|
|
19
31
|
# Pure registry discovery — which integrations are installed and how
|
|
20
32
|
# they're configured. Deliberately carries no per-store connected
|
|
@@ -47,7 +59,7 @@ module Spree
|
|
|
47
59
|
end
|
|
48
60
|
|
|
49
61
|
def permitted_params
|
|
50
|
-
params.permit(*
|
|
62
|
+
params.permit(*permitted_attributes)
|
|
51
63
|
end
|
|
52
64
|
|
|
53
65
|
# `types` is read-only discovery — maps to the read scope.
|
|
@@ -10,6 +10,14 @@ module Spree
|
|
|
10
10
|
skip_scope_check!
|
|
11
11
|
skip_before_action :authenticate_admin!, only: [:lookup, :accept]
|
|
12
12
|
|
|
13
|
+
request_params 'InvitationAcceptParams', action: :accept do |body|
|
|
14
|
+
body.attribute :password, :string,
|
|
15
|
+
description: 'Required when the invitee has no account yet: it creates one. An existing account signs in without it.'
|
|
16
|
+
body.attribute :password_confirmation, :string
|
|
17
|
+
body.attribute :first_name, :string
|
|
18
|
+
body.attribute :last_name, :string
|
|
19
|
+
end
|
|
20
|
+
|
|
13
21
|
rate_limit to: Spree::Api::Config[:rate_limit_login],
|
|
14
22
|
within: Spree::Api::Config[:rate_limit_window].seconds,
|
|
15
23
|
store: Rails.cache,
|
|
@@ -24,7 +32,6 @@ module Spree
|
|
|
24
32
|
end
|
|
25
33
|
|
|
26
34
|
# POST /api/v3/admin/auth/invitations/:id/accept?token=:token
|
|
27
|
-
# Body: { password?, password_confirmation?, first_name?, last_name? }
|
|
28
35
|
def accept
|
|
29
36
|
return unless load_invitation
|
|
30
37
|
|
|
@@ -99,7 +106,7 @@ module Spree
|
|
|
99
106
|
end
|
|
100
107
|
|
|
101
108
|
def signup_params(invitation)
|
|
102
|
-
params.permit(
|
|
109
|
+
params.permit(*declared_permitted_attributes).
|
|
103
110
|
merge(email: invitation.email)
|
|
104
111
|
end
|
|
105
112
|
|