spree_api 6.0.0.rc1 → 6.0.0.rc3
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/store/search_provider_support.rb +8 -3
- 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 +19 -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 +54 -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 +31 -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 +6 -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 +4 -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 +16 -30
- 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 +11 -6
- data/app/serializers/spree/api/v3/price_serializer.rb +17 -10
- 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 +12 -0
- data/app/serializers/spree/api/v3/seller/price_serializer.rb +13 -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
|
@@ -12,8 +12,65 @@ module Spree
|
|
|
12
12
|
# seller audience, because a seller must never see, let alone set, what
|
|
13
13
|
# anyone is charged.
|
|
14
14
|
class CommissionRatesController < ResourceController
|
|
15
|
+
# `value` is a percentage, a name too general to be in StrictMoneyParams' list.
|
|
16
|
+
before_action -> { decimal_param(:value) }, only: %i[create update]
|
|
15
17
|
scoped_resource :commissions
|
|
16
18
|
|
|
19
|
+
request_params :commission_rate do |body|
|
|
20
|
+
body.attribute :name, :string, required: true, on: :create, example: 'Audio sellers'
|
|
21
|
+
body.attribute :code, :string,
|
|
22
|
+
nullable: true,
|
|
23
|
+
example: 'audio',
|
|
24
|
+
description: 'Your own identifier for this rate; unique per store.'
|
|
25
|
+
body.attribute :enabled, :boolean
|
|
26
|
+
body.attribute :position, :integer,
|
|
27
|
+
example: 1,
|
|
28
|
+
description: 'Place in the list. Rates resolve top-down and the first whose rules match wins, so 1 is tried first. New rates are created at the top; send this to move one. A rate with no rules matches every sale, so the marketplace default belongs at the bottom.'
|
|
29
|
+
body.attribute :kind, :string,
|
|
30
|
+
required: true, on: :create,
|
|
31
|
+
choices: Spree::CommissionRate::KINDS,
|
|
32
|
+
example: 'percentage',
|
|
33
|
+
description: '`percentage` charges a share of the sale; `fixed` charges a flat fee.'
|
|
34
|
+
body.attribute :value, :decimal,
|
|
35
|
+
required: true, on: :create,
|
|
36
|
+
example: '12.5',
|
|
37
|
+
description: 'A percentage (10 = 10%) or a flat amount, per `kind`.'
|
|
38
|
+
body.attribute :tax_inclusive, :boolean,
|
|
39
|
+
description: "Charge on the price including the customer's VAT. Left off, commission is charged on the seller's net revenue, which is the usual basis where the fee is taxed as its own supply."
|
|
40
|
+
body.attribute :include_shipping, :boolean,
|
|
41
|
+
description: "Also charge commission on the seller's delivery revenue. Percentage rates only."
|
|
42
|
+
body.attribute :commission_tax_rate, :decimal,
|
|
43
|
+
nullable: true,
|
|
44
|
+
example: '0.21',
|
|
45
|
+
description: "VAT on the commission itself, as a fraction rather than a percentage. Null lets the store's tax engine answer for the seller's jurisdiction."
|
|
46
|
+
body.attribute :metadata, :hash
|
|
47
|
+
body.attribute :amounts, :hash,
|
|
48
|
+
example: { USD: '2.50', EUR: '2.00' },
|
|
49
|
+
description: 'What a flat fee charges, keyed by currency, as decimal strings. A sale in a currency with no amount falls to the next matching rate. Replaces the whole set.'
|
|
50
|
+
body.attribute :bounds, :hash,
|
|
51
|
+
example: { USD: { min_amount: '1.00', max_amount: '50.00' } },
|
|
52
|
+
description: 'The floor and cap a percentage charges within, keyed by currency: `{ min_amount, max_amount }` decimal strings. A sale in a currency with no bounds is charged unbounded. Replaces the whole set.'
|
|
53
|
+
# Permitted in `permitted_params`, with the keys each registered
|
|
54
|
+
# rule kind adds.
|
|
55
|
+
body.attribute :rules, :array,
|
|
56
|
+
permit: false,
|
|
57
|
+
as: 'CommissionRuleDraftParams',
|
|
58
|
+
description: 'The full targeting; what you send replaces what the rate holds.' do |rule|
|
|
59
|
+
rule.attribute :id, :id,
|
|
60
|
+
nullable: true,
|
|
61
|
+
description: 'Present for an existing rule; omit to create one.'
|
|
62
|
+
rule.attribute :type, :string,
|
|
63
|
+
required: true,
|
|
64
|
+
example: 'seller_rule',
|
|
65
|
+
description: 'A kind from `GET /commission_rates/rule_types`.'
|
|
66
|
+
rule.attribute :preferences, :hash,
|
|
67
|
+
example: { seller_ids: ['sel_a1b2c3'] },
|
|
68
|
+
description: "Configuration for the kind, per its type's `schema`."
|
|
69
|
+
rule.attribute :product_ids, :array, of: :id,
|
|
70
|
+
description: 'For kinds that name products, which are kept outside preferences.'
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
17
74
|
# GET /api/v3/admin/commission_rates/rule_types
|
|
18
75
|
#
|
|
19
76
|
# Every registered rule kind with its configuration schema, so a
|
|
@@ -27,7 +84,7 @@ module Spree
|
|
|
27
84
|
type: klass.api_type,
|
|
28
85
|
name: klass.human_name,
|
|
29
86
|
description: klass.human_description,
|
|
30
|
-
|
|
87
|
+
schema: klass.preference_json_schema,
|
|
31
88
|
# Config a rule takes beyond its preferences — a catalog-scale
|
|
32
89
|
# reference list lives in its own table, not the blob, and an
|
|
33
90
|
# editor has to know to render a picker for it.
|
|
@@ -81,17 +138,8 @@ module Spree
|
|
|
81
138
|
|
|
82
139
|
def permitted_params
|
|
83
140
|
attributes = normalize_params(
|
|
84
|
-
params.permit(
|
|
85
|
-
|
|
86
|
-
:tax_inclusive, :include_shipping, :commission_tax_rate,
|
|
87
|
-
metadata: {},
|
|
88
|
-
amounts: {},
|
|
89
|
-
# Nested one level deeper than +amounts+ — currency => floor and
|
|
90
|
-
# cap — so the whole subtree is permitted rather than its keys,
|
|
91
|
-
# which are currency codes and not knowable here.
|
|
92
|
-
bounds: {},
|
|
93
|
-
rules: [:id, :type, { preferences: {} }, *rule_association_attributes]
|
|
94
|
-
)
|
|
141
|
+
params.permit(*declared_permitted_attributes,
|
|
142
|
+
rules: [:id, :type, { preferences: {} }, *rule_association_attributes])
|
|
95
143
|
)
|
|
96
144
|
|
|
97
145
|
attributes[:rules] = resolved_rule_rows(attributes[:rules]) if attributes.key?(:rules)
|
|
@@ -8,6 +8,17 @@ module Spree
|
|
|
8
8
|
class AddressesController < BaseController
|
|
9
9
|
include Spree::Api::V3::CompanyAddressWrites
|
|
10
10
|
|
|
11
|
+
request_params :company_address do |body|
|
|
12
|
+
body.include_attributes Spree::Api::V3::AddressRequestSchema
|
|
13
|
+
body.require_attributes :first_name, :last_name, :address1, :city, :country_code, on: :create
|
|
14
|
+
body.attribute :default_billing, :boolean,
|
|
15
|
+
permit: false,
|
|
16
|
+
description: 'True makes this the default address of that kind, false gives the slot up, and leaving it out keeps the current default.'
|
|
17
|
+
body.attribute :default_shipping, :boolean,
|
|
18
|
+
permit: false,
|
|
19
|
+
description: 'True makes this the default address of that kind, false gives the slot up, and leaving it out keeps the current default.'
|
|
20
|
+
end
|
|
21
|
+
|
|
11
22
|
before_action :authorize_parent_access!
|
|
12
23
|
|
|
13
24
|
# POST /api/v3/admin/companies/:company_id/addresses
|
|
@@ -13,6 +13,14 @@ module Spree
|
|
|
13
13
|
# who buys for a node — and memberships carry customer emails.
|
|
14
14
|
before_action :authorize_parent_access!
|
|
15
15
|
|
|
16
|
+
request_params :company_membership do |body|
|
|
17
|
+
body.attribute :customer_email, :string,
|
|
18
|
+
required: true, on: :create,
|
|
19
|
+
example: 'buyer@example.com',
|
|
20
|
+
description: 'An existing customer becomes a member immediately; an unknown email becomes an invitation, and the response is an invitation instead of a membership.'
|
|
21
|
+
body.attribute :metadata, :hash
|
|
22
|
+
end
|
|
23
|
+
|
|
16
24
|
# POST /api/v3/admin/companies/:company_id/memberships
|
|
17
25
|
def create
|
|
18
26
|
result = Spree.company_add_member_service.call(
|
|
@@ -52,7 +60,7 @@ module Spree
|
|
|
52
60
|
end
|
|
53
61
|
|
|
54
62
|
def permitted_params
|
|
55
|
-
params.permit(
|
|
63
|
+
params.permit(*declared_permitted_attributes)
|
|
56
64
|
end
|
|
57
65
|
end
|
|
58
66
|
end
|
|
@@ -9,14 +9,29 @@ module Spree
|
|
|
9
9
|
class TaxExemptionCertificatesController < BaseController
|
|
10
10
|
include ActiveStorage::SetCurrent
|
|
11
11
|
|
|
12
|
+
request_params :tax_exemption_certificate do |body|
|
|
13
|
+
body.attribute :certificate_number, :string, required: true, on: :create,
|
|
14
|
+
example: 'DE-RESALE-7'
|
|
15
|
+
body.attribute :reason_code, :string, required: true, on: :create,
|
|
16
|
+
example: 'resale',
|
|
17
|
+
description: "Becomes the tax provider's entity use code."
|
|
18
|
+
body.attribute :issuing_authority, :string, nullable: true, example: 'Finanzamt Berlin'
|
|
19
|
+
body.attribute :issued_at, :datetime, nullable: true
|
|
20
|
+
body.attribute :expires_at, :datetime, nullable: true
|
|
21
|
+
body.attribute :country_code, :country,
|
|
22
|
+
nullable: true,
|
|
23
|
+
description: 'Where the certificate holds. Omit it and `state_code` for one valid everywhere.'
|
|
24
|
+
body.attribute :state_code, :string, nullable: true
|
|
25
|
+
body.attribute :document_signed_id, :string,
|
|
26
|
+
description: "A `signed_id` from `files.upload()` with `visibility: 'private'`."
|
|
27
|
+
body.attribute :metadata, :hash
|
|
28
|
+
end
|
|
29
|
+
|
|
12
30
|
before_action :authorize_parent_access!
|
|
13
31
|
# Re-declaring the filter replaces the inherited options, so the
|
|
14
32
|
# standard actions have to be listed alongside the custom ones.
|
|
15
33
|
before_action :set_resource, only: [:show, :update, :destroy, :verify, :revoke, :download]
|
|
16
34
|
|
|
17
|
-
# A tampered signed id would otherwise surface as a 500.
|
|
18
|
-
rescue_from ActiveSupport::MessageVerifier::InvalidSignature, with: :render_invalid_signature
|
|
19
|
-
|
|
20
35
|
# PATCH /api/v3/admin/companies/:company_id/tax_exemption_certificates/:id/verify
|
|
21
36
|
def verify
|
|
22
37
|
result = Spree.tax_exemption_certificate_verify_workflow.call(
|
|
@@ -88,12 +103,8 @@ module Spree
|
|
|
88
103
|
[{ document_attachment: :blob }]
|
|
89
104
|
end
|
|
90
105
|
|
|
91
|
-
# `document` is an ActiveStorage signed blob id from
|
|
92
|
-
# POST /api/v3/admin/direct_uploads.
|
|
93
106
|
def permitted_params
|
|
94
|
-
params.permit(
|
|
95
|
-
:issued_at, :expires_at, :country_code, :state_code, :document,
|
|
96
|
-
metadata: {})
|
|
107
|
+
params.permit(*declared_permitted_attributes)
|
|
97
108
|
end
|
|
98
109
|
|
|
99
110
|
def build_resource
|
|
@@ -111,16 +122,6 @@ module Spree
|
|
|
111
122
|
|
|
112
123
|
authorize!(mapped, resource)
|
|
113
124
|
end
|
|
114
|
-
|
|
115
|
-
private
|
|
116
|
-
|
|
117
|
-
def render_invalid_signature
|
|
118
|
-
render_error(
|
|
119
|
-
code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:validation_error],
|
|
120
|
-
message: 'Invalid document signed id',
|
|
121
|
-
status: :unprocessable_content
|
|
122
|
-
)
|
|
123
|
-
end
|
|
124
125
|
end
|
|
125
126
|
end
|
|
126
127
|
end
|
|
@@ -12,6 +12,11 @@ module Spree
|
|
|
12
12
|
class TaxIdentifiersController < BaseController
|
|
13
13
|
include Spree::Api::V3::TaxIdentifierValidation
|
|
14
14
|
|
|
15
|
+
request_params :tax_identifier do |body|
|
|
16
|
+
body.include_attributes Spree::Api::V3::Admin::TaxIdentifierRequestSchema
|
|
17
|
+
body.require_attributes :kind, :value, on: :create
|
|
18
|
+
end
|
|
19
|
+
|
|
15
20
|
before_action :authorize_parent_access!
|
|
16
21
|
# Re-declaring the filter replaces the inherited options, so the
|
|
17
22
|
# standard actions have to be listed alongside the custom one.
|
|
@@ -32,7 +37,7 @@ module Spree
|
|
|
32
37
|
end
|
|
33
38
|
|
|
34
39
|
def permitted_params
|
|
35
|
-
params.permit(
|
|
40
|
+
params.permit(*declared_permitted_attributes)
|
|
36
41
|
end
|
|
37
42
|
end
|
|
38
43
|
end
|
|
@@ -12,6 +12,22 @@ module Spree
|
|
|
12
12
|
class CompaniesController < ResourceController
|
|
13
13
|
scoped_resource :customers
|
|
14
14
|
|
|
15
|
+
request_params :company do |body|
|
|
16
|
+
body.external_references
|
|
17
|
+
body.attribute :name, :string, required: true, on: :create, example: 'Globex Corporation'
|
|
18
|
+
body.attribute :kind, :string,
|
|
19
|
+
choices: Spree::Company::KINDS,
|
|
20
|
+
example: 'company',
|
|
21
|
+
description: '`company` is a legal entity (may hold tax registrations), `division` an organizational unit. Roots must be `company`.'
|
|
22
|
+
body.attribute :parent_id, :id,
|
|
23
|
+
nullable: true,
|
|
24
|
+
example: 'comp_86Rf07xd4z',
|
|
25
|
+
description: 'The parent node. Omit or null for a root.'
|
|
26
|
+
body.attribute :po_number_required, :boolean,
|
|
27
|
+
description: "Whether this buyer's own procurement process demands a PO reference on every order: checkout asks for one and refuses to complete without it."
|
|
28
|
+
body.attribute :metadata, :hash
|
|
29
|
+
end
|
|
30
|
+
|
|
15
31
|
protected
|
|
16
32
|
|
|
17
33
|
def model_class
|
|
@@ -27,9 +43,7 @@ module Spree
|
|
|
27
43
|
end
|
|
28
44
|
|
|
29
45
|
def permitted_params
|
|
30
|
-
|
|
31
|
-
:name, :kind, :parent_id, :po_number_required, metadata: {})
|
|
32
|
-
resolve_parent_param(permitted)
|
|
46
|
+
resolve_parent_param(params.permit(*permitted_attributes))
|
|
33
47
|
end
|
|
34
48
|
|
|
35
49
|
private
|
|
@@ -24,6 +24,10 @@ module Spree
|
|
|
24
24
|
|
|
25
25
|
protected
|
|
26
26
|
|
|
27
|
+
def filterable?
|
|
28
|
+
false
|
|
29
|
+
end
|
|
30
|
+
|
|
27
31
|
def model_class
|
|
28
32
|
Spree::Country
|
|
29
33
|
end
|
|
@@ -33,7 +37,7 @@ module Spree
|
|
|
33
37
|
end
|
|
34
38
|
|
|
35
39
|
def scope
|
|
36
|
-
Spree::Country.all.sort_by(&:
|
|
40
|
+
Spree::Country.all.sort_by(&:iso)
|
|
37
41
|
end
|
|
38
42
|
|
|
39
43
|
def find_resource
|
|
@@ -10,6 +10,26 @@ module Spree
|
|
|
10
10
|
class CustomFieldDefinitionsController < ResourceController
|
|
11
11
|
scoped_resource :settings
|
|
12
12
|
|
|
13
|
+
request_params :custom_field_definition do |body|
|
|
14
|
+
body.attribute :namespace, :string, description: 'Defaults to `custom`.'
|
|
15
|
+
body.attribute :key, :string, required: true, on: :create
|
|
16
|
+
body.attribute :label, :string, description: 'Human-readable name; defaults to the titleized `key`.'
|
|
17
|
+
body.attribute :field_type, :string,
|
|
18
|
+
required: true, on: :create,
|
|
19
|
+
example: 'short_text',
|
|
20
|
+
description: 'Custom field type token (`short_text`, `long_text`, `rich_text`, `number`, …). An extension type that has no token is named by its registered class instead.'
|
|
21
|
+
body.attribute :resource_type, :string,
|
|
22
|
+
required: true, on: :create,
|
|
23
|
+
example: 'product',
|
|
24
|
+
description: 'Shorthand of the resource the field attaches to, from the resource types endpoint.'
|
|
25
|
+
body.attribute :storefront_visible, :boolean,
|
|
26
|
+
description: 'When false, the definition is admin-only and never exposed in the Store API.'
|
|
27
|
+
body.attribute :searchable, :boolean,
|
|
28
|
+
description: 'Include values in storefront product text search. Supported for `short_text`, `long_text` and `number` fields; other types are refused.'
|
|
29
|
+
body.attribute :sortable, :boolean,
|
|
30
|
+
description: 'Allow storefront product listings to sort by this field (`sort=cf_{namespace}_{key}`). Supported for `short_text` and `number` fields; other types are refused.'
|
|
31
|
+
end
|
|
32
|
+
|
|
13
33
|
# GET /api/v3/admin/custom_field_definitions/resource_types
|
|
14
34
|
#
|
|
15
35
|
# What a definition can be attached to, from
|
|
@@ -34,17 +54,7 @@ module Spree
|
|
|
34
54
|
end
|
|
35
55
|
|
|
36
56
|
def permitted_params
|
|
37
|
-
params.permit(*
|
|
38
|
-
:resource_type, :storefront_visible,
|
|
39
|
-
:searchable, :sortable)
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
# `resource_type` is a plain column rather than a polymorphic
|
|
43
|
-
# association, so its filter goes through the model's own normalizer.
|
|
44
|
-
def api_type_resolver(attribute)
|
|
45
|
-
return super unless attribute == 'resource_type'
|
|
46
|
-
|
|
47
|
-
->(api_type) { model_class.normalize_value_for(:resource_type, api_type) }
|
|
57
|
+
params.permit(*permitted_attributes)
|
|
48
58
|
end
|
|
49
59
|
|
|
50
60
|
# Pure registry discovery — maps to the read scope.
|
|
@@ -7,6 +7,16 @@ module Spree
|
|
|
7
7
|
# class is inferred from whichever `<segment>_id` route param matches a
|
|
8
8
|
# registered owner.
|
|
9
9
|
class CustomFieldsController < ResourceController
|
|
10
|
+
# Only `value` is mutable. Switching the linked definition is a
|
|
11
|
+
# delete-and-create: the model rejects it (definition + resource
|
|
12
|
+
# uniqueness) and the type wouldn't match.
|
|
13
|
+
request_params :custom_field do |body|
|
|
14
|
+
body.attribute :custom_field_definition_id, :id, required: true, only: :create, example: 'cfdef_abc123'
|
|
15
|
+
body.attribute :value, :any,
|
|
16
|
+
required: true,
|
|
17
|
+
description: "A value matching the definition's `field_type`: a scalar for text, number and boolean fields; a list or a hash for JSON fields."
|
|
18
|
+
end
|
|
19
|
+
|
|
10
20
|
# POST /api/v3/admin/<parent>/<parent_id>/custom_fields
|
|
11
21
|
def create
|
|
12
22
|
@resource = @parent.custom_fields.new(permitted_params)
|
|
@@ -20,9 +30,6 @@ module Spree
|
|
|
20
30
|
end
|
|
21
31
|
|
|
22
32
|
# PATCH /api/v3/admin/<parent>/<parent_id>/custom_fields/:id
|
|
23
|
-
# Only `value` is mutable. Switching the linked definition is a
|
|
24
|
-
# delete-and-create — the model rejects it (definition + resource
|
|
25
|
-
# uniqueness) and the type wouldn't match.
|
|
26
33
|
def update
|
|
27
34
|
authorize_resource!(@resource)
|
|
28
35
|
|
|
@@ -82,11 +89,11 @@ module Spree
|
|
|
82
89
|
# `custom_field_definition_id` is an alias_attribute on Spree::CustomField;
|
|
83
90
|
# AR resolves the prefixed-ID and the alias to the canonical FK on assign.
|
|
84
91
|
def permitted_params
|
|
85
|
-
params.permit(*
|
|
92
|
+
params.permit(*permitted_attributes)
|
|
86
93
|
end
|
|
87
94
|
|
|
88
95
|
def update_permitted_params
|
|
89
|
-
params.permit(
|
|
96
|
+
params.permit(*declared_permitted_attributes)
|
|
90
97
|
end
|
|
91
98
|
|
|
92
99
|
private
|
|
@@ -7,6 +7,14 @@ module Spree
|
|
|
7
7
|
class CustomerGroupsController < ResourceController
|
|
8
8
|
scoped_resource :customers
|
|
9
9
|
|
|
10
|
+
request_params :customer_group do |body|
|
|
11
|
+
body.attribute :name, :string, required: true, on: :create, example: 'Wholesale'
|
|
12
|
+
body.attribute :description, :string, nullable: true, example: 'B2B accounts'
|
|
13
|
+
body.attribute :customer_ids, :array, of: :id,
|
|
14
|
+
example: %w[cus_UkLWZg9DAJ],
|
|
15
|
+
description: "Replaces the group's members."
|
|
16
|
+
end
|
|
17
|
+
|
|
10
18
|
protected
|
|
11
19
|
|
|
12
20
|
def model_class
|
|
@@ -18,7 +26,7 @@ module Spree
|
|
|
18
26
|
end
|
|
19
27
|
|
|
20
28
|
def permitted_params
|
|
21
|
-
params.permit(*
|
|
29
|
+
params.permit(*permitted_attributes)
|
|
22
30
|
end
|
|
23
31
|
end
|
|
24
32
|
end
|
|
@@ -4,6 +4,17 @@ module Spree
|
|
|
4
4
|
module Admin
|
|
5
5
|
module Customers
|
|
6
6
|
class AddressesController < BaseController
|
|
7
|
+
request_params :customer_address do |body|
|
|
8
|
+
body.include_attributes Spree::Api::V3::Admin::AddressRequestSchema
|
|
9
|
+
body.require_attributes :first_name, :last_name, :address1, :city, :country_code, on: :create
|
|
10
|
+
body.attribute :quick_checkout, :boolean
|
|
11
|
+
body.attribute :is_default_billing, :boolean,
|
|
12
|
+
permit: false,
|
|
13
|
+
description: "Makes this the customer's default address of that kind."
|
|
14
|
+
body.attribute :is_default_shipping, :boolean,
|
|
15
|
+
permit: false,
|
|
16
|
+
description: "Makes this the customer's default address of that kind."
|
|
17
|
+
end
|
|
7
18
|
|
|
8
19
|
# POST /api/v3/admin/customers/:customer_id/addresses
|
|
9
20
|
def create
|
|
@@ -61,13 +72,7 @@ module Spree
|
|
|
61
72
|
private
|
|
62
73
|
|
|
63
74
|
def address_attrs
|
|
64
|
-
params.permit(
|
|
65
|
-
:firstname, :lastname, :first_name, :last_name,
|
|
66
|
-
:address1, :address2, :city,
|
|
67
|
-
:country_code, :state_code,
|
|
68
|
-
:zipcode, :postal_code, :phone, :alternative_phone,
|
|
69
|
-
:state_name, :company, :label, :quick_checkout
|
|
70
|
-
)
|
|
75
|
+
params.permit(*declared_permitted_attributes)
|
|
71
76
|
end
|
|
72
77
|
|
|
73
78
|
def default_billing_flag
|
|
@@ -9,9 +9,15 @@ module Spree
|
|
|
9
9
|
# broad customer access.
|
|
10
10
|
scoped_resource :store_credits
|
|
11
11
|
|
|
12
|
+
request_params :customer_store_credit do |body|
|
|
13
|
+
body.attribute :amount, :decimal, required: true, on: :create, example: '50.00'
|
|
14
|
+
body.attribute :currency, :currency, required: true, on: :create, only: :create, example: 'USD'
|
|
15
|
+
body.attribute :memo, :string
|
|
16
|
+
end
|
|
17
|
+
|
|
12
18
|
# POST /api/v3/admin/customers/:customer_id/store_credits
|
|
13
19
|
def create
|
|
14
|
-
@resource = @parent.store_credits.new(
|
|
20
|
+
@resource = @parent.store_credits.new(store_credit_attributes)
|
|
15
21
|
@resource.created_by = try_spree_current_user
|
|
16
22
|
@resource.store ||= current_store
|
|
17
23
|
authorize_resource!(@resource, :create)
|
|
@@ -27,7 +33,7 @@ module Spree
|
|
|
27
33
|
def update
|
|
28
34
|
authorize_resource!(@resource)
|
|
29
35
|
|
|
30
|
-
if @resource.amount_used.positive? &&
|
|
36
|
+
if @resource.amount_used.positive? && store_credit_attributes.key?(:amount)
|
|
31
37
|
render_error(
|
|
32
38
|
code: 'store_credit_in_use',
|
|
33
39
|
message: 'Cannot change amount on a store credit that has already been used',
|
|
@@ -36,7 +42,7 @@ module Spree
|
|
|
36
42
|
return
|
|
37
43
|
end
|
|
38
44
|
|
|
39
|
-
if @resource.update(
|
|
45
|
+
if @resource.update(store_credit_attributes)
|
|
40
46
|
render json: serialize_resource(@resource.reload)
|
|
41
47
|
else
|
|
42
48
|
render_validation_error(@resource.errors)
|
|
@@ -78,12 +84,8 @@ module Spree
|
|
|
78
84
|
|
|
79
85
|
private
|
|
80
86
|
|
|
81
|
-
def
|
|
82
|
-
params.permit(
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
def update_attrs
|
|
86
|
-
params.permit(:memo, :amount).to_h
|
|
87
|
+
def store_credit_attributes
|
|
88
|
+
params.permit(*declared_permitted_attributes).to_h
|
|
87
89
|
end
|
|
88
90
|
end
|
|
89
91
|
end
|
|
@@ -8,6 +8,11 @@ module Spree
|
|
|
8
8
|
|
|
9
9
|
include Spree::Api::V3::TaxIdentifierValidation
|
|
10
10
|
|
|
11
|
+
request_params :tax_identifier do |body|
|
|
12
|
+
body.include_attributes Spree::Api::V3::Admin::TaxIdentifierRequestSchema
|
|
13
|
+
body.require_attributes :kind, :value, on: :create
|
|
14
|
+
end
|
|
15
|
+
|
|
11
16
|
# Re-declaring the filter replaces the inherited options, so the
|
|
12
17
|
# standard actions have to be listed alongside the custom one.
|
|
13
18
|
before_action :set_resource, only: [:show, :update, :destroy, :validate]
|
|
@@ -33,7 +38,7 @@ module Spree
|
|
|
33
38
|
end
|
|
34
39
|
|
|
35
40
|
def permitted_params
|
|
36
|
-
params.permit(
|
|
41
|
+
params.permit(*declared_permitted_attributes)
|
|
37
42
|
end
|
|
38
43
|
end
|
|
39
44
|
end
|
|
@@ -7,6 +7,40 @@ module Spree
|
|
|
7
7
|
|
|
8
8
|
scoped_resource :customers
|
|
9
9
|
|
|
10
|
+
request_params :customer do |body|
|
|
11
|
+
body.attribute :email, :string, required: true, on: :create, example: 'new@example.com'
|
|
12
|
+
body.attribute :first_name, :string
|
|
13
|
+
body.attribute :last_name, :string
|
|
14
|
+
body.attribute :phone, :string
|
|
15
|
+
body.attribute :password, :string,
|
|
16
|
+
description: 'Optional: a customer created without one claims the account through a password reset.'
|
|
17
|
+
body.attribute :password_confirmation, :string,
|
|
18
|
+
description: 'Optional: a customer created without one claims the account through a password reset.'
|
|
19
|
+
body.attribute :selected_locale, :string
|
|
20
|
+
body.attribute :avatar_signed_id, :string, description: 'A `signed_id` from `files.upload()`.'
|
|
21
|
+
body.attribute :accepts_email_marketing, :boolean
|
|
22
|
+
body.attribute :internal_note, :string,
|
|
23
|
+
description: 'Rich text HTML. Reads come back as this plus `internal_note_html`.'
|
|
24
|
+
body.attribute :metadata, :hash
|
|
25
|
+
body.attribute :tags, :array, of: :string
|
|
26
|
+
body.attribute :customer_group_ids, :array, of: :id,
|
|
27
|
+
description: "Replaces the customer's group membership."
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
%i[bulk_add_to_groups bulk_remove_from_groups].each do |action|
|
|
31
|
+
request_params 'CustomerBulkGroupsParams', action: action do |body|
|
|
32
|
+
body.attribute :ids, :array, of: :id, required: true, example: %w[cus_UkLWZg9DAJ cus_QrLWXg9CAJ]
|
|
33
|
+
body.attribute :customer_group_ids, :array, of: :id,
|
|
34
|
+
required: true,
|
|
35
|
+
example: %w[cg_UkLWZg9DAJ],
|
|
36
|
+
description: 'Groups from other stores are ignored.'
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
%i[bulk_add_tags bulk_remove_tags].each do |action|
|
|
41
|
+
request_params('BulkTagsParams', action: action) { |body| body.include_attributes Spree::Api::V3::Admin::BulkTagsRequestSchema }
|
|
42
|
+
end
|
|
43
|
+
|
|
10
44
|
# Re-declaring a `before_action` for the same method REPLACES the
|
|
11
45
|
# inherited registration rather than adding to it, so the inherited
|
|
12
46
|
# actions have to be repeated here or show/update/destroy silently
|
|
@@ -258,13 +292,7 @@ module Spree
|
|
|
258
292
|
end
|
|
259
293
|
|
|
260
294
|
def permitted_params
|
|
261
|
-
params.permit(
|
|
262
|
-
*model_additional_permitted_attributes,
|
|
263
|
-
:email, :first_name, :last_name, :phone,
|
|
264
|
-
:password, :password_confirmation, :selected_locale,
|
|
265
|
-
:avatar, :accepts_email_marketing, :internal_note,
|
|
266
|
-
metadata: {}, tags: [], customer_group_ids: []
|
|
267
|
-
)
|
|
295
|
+
params.permit(*permitted_attributes)
|
|
268
296
|
end
|
|
269
297
|
|
|
270
298
|
# Authorises bulk group mutation, decodes prefixed IDs, then dispatches
|
|
@@ -11,6 +11,14 @@ module Spree
|
|
|
11
11
|
class DataRequestsController < ResourceController
|
|
12
12
|
scoped_resource :customers
|
|
13
13
|
|
|
14
|
+
request_params 'DataRequestCreateParams', action: :create do |body|
|
|
15
|
+
body.attribute :customer_id, :id, required: true
|
|
16
|
+
body.attribute :kind, :string,
|
|
17
|
+
required: true,
|
|
18
|
+
choices: Spree::DataRequest::KINDS,
|
|
19
|
+
description: "`access` asks for a copy of the customer's personal data; `erasure` asks for it to be erased."
|
|
20
|
+
end
|
|
21
|
+
|
|
14
22
|
def create
|
|
15
23
|
authorize! :create, Spree::DataRequest
|
|
16
24
|
|
|
@@ -15,7 +15,7 @@ module Spree
|
|
|
15
15
|
type: klass.api_type,
|
|
16
16
|
name: klass.human_name,
|
|
17
17
|
description: klass.human_description,
|
|
18
|
-
|
|
18
|
+
schema: klass.preference_json_schema,
|
|
19
19
|
# Association-backed config (e.g. `product_ids`) a rule accepts
|
|
20
20
|
# beyond its preferences, so admin UIs can render the right
|
|
21
21
|
# editor without hardcoding rule types.
|
|
@@ -8,6 +8,18 @@ module Spree
|
|
|
8
8
|
class RulesController < ResourceController
|
|
9
9
|
scoped_resource :delivery_methods
|
|
10
10
|
|
|
11
|
+
request_params :delivery_method_rule do |body|
|
|
12
|
+
body.attribute :type, :string,
|
|
13
|
+
required: true,
|
|
14
|
+
only: :create,
|
|
15
|
+
example: 'excluded_products_rule',
|
|
16
|
+
description: 'A rule kind from the delivery method rule types endpoint.'
|
|
17
|
+
body.attribute :active, :boolean, description: 'Defaults to true on create.'
|
|
18
|
+
body.attribute :preferences, :hash, description: "Values for the rule kind's preference schema."
|
|
19
|
+
body.attribute :product_ids, :array, of: :id,
|
|
20
|
+
description: 'Products an association-backed rule (`excluded_products_rule`) applies to. An empty list clears them.'
|
|
21
|
+
end
|
|
22
|
+
|
|
11
23
|
def create
|
|
12
24
|
rule_class = Spree.delivery_method_rules.detect do |klass|
|
|
13
25
|
klass.api_type == params[:type].to_s
|
|
@@ -17,7 +29,7 @@ module Spree
|
|
|
17
29
|
return render_error(
|
|
18
30
|
code: ERROR_CODES[:validation_error],
|
|
19
31
|
message: I18n.t('spree.errors.messages.invalid_delivery_method_rule'),
|
|
20
|
-
status: :
|
|
32
|
+
status: :unprocessable_content
|
|
21
33
|
)
|
|
22
34
|
end
|
|
23
35
|
|
|
@@ -62,7 +74,7 @@ module Spree
|
|
|
62
74
|
end
|
|
63
75
|
|
|
64
76
|
def permitted_params
|
|
65
|
-
params.permit(*
|
|
77
|
+
params.permit(*permitted_attributes)
|
|
66
78
|
end
|
|
67
79
|
|
|
68
80
|
private
|
|
@@ -86,11 +98,7 @@ module Spree
|
|
|
86
98
|
end
|
|
87
99
|
|
|
88
100
|
def assign_rule_preferences(rule)
|
|
89
|
-
(permitted_params[:preferences]
|
|
90
|
-
next unless rule.has_preference?(key)
|
|
91
|
-
|
|
92
|
-
rule.set_preference(key, value)
|
|
93
|
-
end
|
|
101
|
+
rule.assign_preferences(permitted_params[:preferences]) if permitted_params[:preferences]
|
|
94
102
|
end
|
|
95
103
|
|
|
96
104
|
# Association-backed rule config (ExcludedProductsRule). Products are
|