spree_api 6.0.0.beta4 → 6.0.0.rc2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Rakefile +4 -48
- data/app/controllers/concerns/spree/api/v3/admin/email_template_lookup.rb +139 -0
- data/app/controllers/concerns/spree/api/v3/admin/product_membership.rb +10 -0
- data/app/controllers/concerns/spree/api/v3/admin/stock_receipt_actions.rb +26 -4
- data/app/controllers/concerns/spree/api/v3/admin/store_context.rb +1 -1
- data/app/controllers/concerns/spree/api/v3/admin/subclassed_resource.rb +15 -29
- data/app/controllers/concerns/spree/api/v3/admin/validation_details.rb +1 -1
- data/app/controllers/concerns/spree/api/v3/cart_resolvable.rb +10 -2
- data/app/controllers/concerns/spree/api/v3/channel_resolution.rb +3 -3
- data/app/controllers/concerns/spree/api/v3/company_address_writes.rb +3 -1
- data/app/controllers/concerns/spree/api/v3/current_password_confirmation.rb +1 -1
- data/app/controllers/concerns/spree/api/v3/error_handler.rb +55 -4
- data/app/controllers/concerns/spree/api/v3/file_uploads.rb +35 -0
- data/app/controllers/concerns/spree/api/v3/http_caching.rb +44 -11
- data/app/controllers/concerns/spree/api/v3/idempotent.rb +20 -5
- data/app/controllers/concerns/spree/api/v3/items_payload.rb +1 -1
- data/app/controllers/concerns/spree/api/v3/money_params.rb +52 -0
- data/app/controllers/concerns/spree/api/v3/order_lock.rb +2 -2
- data/app/controllers/concerns/spree/api/v3/orders/claim_actions.rb +1 -5
- data/app/controllers/concerns/spree/api/v3/orders/delivery_actions.rb +7 -11
- data/app/controllers/concerns/spree/api/v3/orders/exchange_actions.rb +1 -4
- data/app/controllers/concerns/spree/api/v3/orders/fulfillment_actions.rb +3 -15
- data/app/controllers/concerns/spree/api/v3/orders/post_sale_actions.rb +2 -10
- data/app/controllers/concerns/spree/api/v3/orders/return_actions.rb +1 -4
- data/app/controllers/concerns/spree/api/v3/orders/shipping_label_actions.rb +8 -28
- data/app/controllers/concerns/spree/api/v3/params_normalizer.rb +5 -0
- data/app/controllers/concerns/spree/api/v3/permission_serialization.rb +9 -1
- data/app/controllers/concerns/spree/api/v3/purchase_serialization.rb +26 -0
- data/app/controllers/concerns/spree/api/v3/request_params.rb +65 -0
- data/app/controllers/concerns/spree/api/v3/seller/seller_context.rb +1 -1
- data/app/controllers/concerns/spree/api/v3/store/storefront_products.rb +5 -4
- data/app/controllers/concerns/spree/api/v3/storefront_gating.rb +11 -5
- data/app/controllers/concerns/spree/api/v3/strict_money_params.rb +94 -0
- data/app/controllers/spree/api/v3/admin/admin_users_controller.rb +8 -4
- data/app/controllers/spree/api/v3/admin/allowed_origins_controller.rb +8 -1
- data/app/controllers/spree/api/v3/admin/api_keys_controller.rb +16 -8
- data/app/controllers/spree/api/v3/admin/base_controller.rb +1 -0
- data/app/controllers/spree/api/v3/admin/catalogs/order_minimums_controller.rb +2 -6
- data/app/controllers/spree/api/v3/admin/catalogs/quantity_rules_controller.rb +7 -9
- data/app/controllers/spree/api/v3/admin/catalogs_controller.rb +61 -34
- data/app/controllers/spree/api/v3/admin/categories/products_controller.rb +4 -1
- data/app/controllers/spree/api/v3/admin/categories_controller.rb +40 -20
- data/app/controllers/spree/api/v3/admin/channels_controller.rb +39 -10
- data/app/controllers/spree/api/v3/admin/claim_reasons_controller.rb +5 -1
- data/app/controllers/spree/api/v3/admin/collections/products_controller.rb +5 -3
- data/app/controllers/spree/api/v3/admin/collections_controller.rb +44 -15
- data/app/controllers/spree/api/v3/admin/commission_rates_controller.rb +62 -14
- data/app/controllers/spree/api/v3/admin/companies/addresses_controller.rb +11 -4
- data/app/controllers/spree/api/v3/admin/companies/invitations_controller.rb +1 -5
- data/app/controllers/spree/api/v3/admin/companies/memberships_controller.rb +9 -5
- data/app/controllers/spree/api/v3/admin/companies/tax_exemption_certificates_controller.rb +20 -27
- data/app/controllers/spree/api/v3/admin/companies/tax_identifiers_controller.rb +6 -5
- data/app/controllers/spree/api/v3/admin/companies_controller.rb +17 -7
- data/app/controllers/spree/api/v3/admin/countries_controller.rb +6 -2
- data/app/controllers/spree/api/v3/admin/coupon_codes_controller.rb +0 -4
- data/app/controllers/spree/api/v3/admin/custom_field_definitions_controller.rb +22 -4
- data/app/controllers/spree/api/v3/admin/custom_fields_controller.rb +12 -9
- data/app/controllers/spree/api/v3/admin/customer_groups_controller.rb +9 -5
- data/app/controllers/spree/api/v3/admin/customers/addresses_controller.rb +12 -11
- data/app/controllers/spree/api/v3/admin/customers/credit_cards_controller.rb +0 -4
- data/app/controllers/spree/api/v3/admin/customers/store_credits_controller.rb +11 -13
- data/app/controllers/spree/api/v3/admin/customers/tax_identifiers_controller.rb +6 -1
- data/app/controllers/spree/api/v3/admin/customers_controller.rb +37 -9
- data/app/controllers/spree/api/v3/admin/data_requests_controller.rb +8 -0
- data/app/controllers/spree/api/v3/admin/delivery_method_rules_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/delivery_methods/rules_controller.rb +16 -8
- data/app/controllers/spree/api/v3/admin/delivery_methods_controller.rb +95 -62
- data/app/controllers/spree/api/v3/admin/delivery_profiles/origin_groups_controller.rb +8 -1
- data/app/controllers/spree/api/v3/admin/delivery_profiles_controller.rb +14 -7
- data/app/controllers/spree/api/v3/admin/delivery_zones_controller.rb +21 -5
- data/app/controllers/spree/api/v3/admin/email_templates/drafts_controller.rb +53 -0
- data/app/controllers/spree/api/v3/admin/email_templates/previews_controller.rb +34 -0
- data/app/controllers/spree/api/v3/admin/email_templates/publications_controller.rb +37 -0
- data/app/controllers/spree/api/v3/admin/email_templates/restorations_controller.rb +42 -0
- data/app/controllers/spree/api/v3/admin/email_templates/revisions_controller.rb +35 -0
- data/app/controllers/spree/api/v3/admin/email_templates/sample_records_controller.rb +33 -0
- data/app/controllers/spree/api/v3/admin/email_templates/test_emails_controller.rb +44 -0
- data/app/controllers/spree/api/v3/admin/email_templates_controller.rb +46 -0
- data/app/controllers/spree/api/v3/admin/exports_controller.rb +23 -6
- data/app/controllers/spree/api/v3/admin/files_controller.rb +29 -0
- data/app/controllers/spree/api/v3/admin/gift_card_batches_controller.rb +20 -1
- data/app/controllers/spree/api/v3/admin/gift_cards_controller.rb +19 -1
- data/app/controllers/spree/api/v3/admin/imports_controller.rb +37 -11
- data/app/controllers/spree/api/v3/admin/integrations_controller.rb +13 -1
- data/app/controllers/spree/api/v3/admin/invitation_acceptances_controller.rb +9 -2
- data/app/controllers/spree/api/v3/admin/invitations_controller.rb +8 -8
- data/app/controllers/spree/api/v3/admin/locales_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/markets_controller.rb +30 -9
- data/app/controllers/spree/api/v3/admin/me_controller.rb +13 -4
- data/app/controllers/spree/api/v3/admin/media_controller.rb +22 -9
- data/app/controllers/spree/api/v3/admin/media_library_controller.rb +9 -5
- data/app/controllers/spree/api/v3/admin/option_types_controller.rb +24 -7
- data/app/controllers/spree/api/v3/admin/order_cancellation_reasons_controller.rb +5 -1
- data/app/controllers/spree/api/v3/admin/order_routing_rules_controller.rb +13 -5
- data/app/controllers/spree/api/v3/admin/orders/claims_controller.rb +39 -1
- data/app/controllers/spree/api/v3/admin/orders/deliveries_controller.rb +20 -6
- data/app/controllers/spree/api/v3/admin/orders/discount_codes_controller.rb +6 -2
- data/app/controllers/spree/api/v3/admin/orders/discounts_controller.rb +30 -6
- data/app/controllers/spree/api/v3/admin/orders/exchanges_controller.rb +36 -1
- data/app/controllers/spree/api/v3/admin/orders/fees_controller.rb +22 -1
- data/app/controllers/spree/api/v3/admin/orders/fulfillments_controller.rb +83 -22
- data/app/controllers/spree/api/v3/admin/orders/gift_cards_controller.rb +9 -5
- data/app/controllers/spree/api/v3/admin/orders/items_controller.rb +11 -1
- data/app/controllers/spree/api/v3/admin/orders/labels_controller.rb +37 -12
- data/app/controllers/spree/api/v3/admin/orders/payments_controller.rb +18 -19
- data/app/controllers/spree/api/v3/admin/orders/refunds_controller.rb +7 -5
- data/app/controllers/spree/api/v3/admin/orders/returns_controller.rb +37 -1
- data/app/controllers/spree/api/v3/admin/orders/store_credits_controller.rb +6 -3
- data/app/controllers/spree/api/v3/admin/orders_controller.rb +76 -62
- data/app/controllers/spree/api/v3/admin/package_types_controller.rb +30 -5
- data/app/controllers/spree/api/v3/admin/password_resets_controller.rb +26 -7
- data/app/controllers/spree/api/v3/admin/payment_methods_controller.rb +38 -22
- data/app/controllers/spree/api/v3/admin/policies_controller.rb +8 -4
- data/app/controllers/spree/api/v3/admin/price_lists_controller.rb +32 -67
- data/app/controllers/spree/api/v3/admin/prices_controller.rb +51 -8
- data/app/controllers/spree/api/v3/admin/product_types_controller.rb +25 -8
- data/app/controllers/spree/api/v3/admin/products/digital_assets_controller.rb +29 -16
- data/app/controllers/spree/api/v3/admin/products/variants_controller.rb +9 -18
- data/app/controllers/spree/api/v3/admin/products_controller.rb +122 -71
- data/app/controllers/spree/api/v3/admin/promotion_actions_controller.rb +11 -6
- data/app/controllers/spree/api/v3/admin/promotion_rules_controller.rb +10 -5
- data/app/controllers/spree/api/v3/admin/promotions_controller.rb +50 -14
- data/app/controllers/spree/api/v3/admin/purchase_orders_controller.rb +55 -8
- data/app/controllers/spree/api/v3/admin/refund_reasons_controller.rb +5 -1
- data/app/controllers/spree/api/v3/admin/reporting/saved_reports_controller.rb +9 -1
- data/app/controllers/spree/api/v3/admin/reporting_controller.rb +34 -0
- data/app/controllers/spree/api/v3/admin/resource_controller.rb +2 -1
- data/app/controllers/spree/api/v3/admin/return_reasons_controller.rb +5 -1
- data/app/controllers/spree/api/v3/admin/roles_controller.rb +13 -1
- data/app/controllers/spree/api/v3/admin/seller_payouts_controller.rb +7 -9
- data/app/controllers/spree/api/v3/admin/seller_requirement_submissions_controller.rb +17 -10
- data/app/controllers/spree/api/v3/admin/seller_requirements_controller.rb +32 -6
- data/app/controllers/spree/api/v3/admin/seller_transfers_controller.rb +0 -4
- data/app/controllers/spree/api/v3/admin/sellers/invitations_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/sellers/payouts_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/sellers_controller.rb +77 -32
- data/app/controllers/spree/api/v3/admin/setup_controller.rb +54 -23
- data/app/controllers/spree/api/v3/admin/stock_levels_controller.rb +38 -9
- data/app/controllers/spree/api/v3/admin/stock_locations_controller.rb +41 -9
- data/app/controllers/spree/api/v3/admin/stock_transfers_controller.rb +49 -8
- data/app/controllers/spree/api/v3/admin/store_controller.rb +122 -48
- data/app/controllers/spree/api/v3/admin/store_credits_controller.rb +1 -7
- data/app/controllers/spree/api/v3/admin/suppliers_controller.rb +16 -6
- data/app/controllers/spree/api/v3/admin/tags_controller.rb +8 -5
- data/app/controllers/spree/api/v3/admin/tax_categories_controller.rb +7 -4
- data/app/controllers/spree/api/v3/admin/tax_rates_controller.rb +21 -3
- data/app/controllers/spree/api/v3/admin/tracking_carriers_controller.rb +4 -0
- data/app/controllers/spree/api/v3/admin/translations/batches_controller.rb +17 -9
- data/app/controllers/spree/api/v3/admin/translations_controller.rb +4 -0
- data/app/controllers/spree/api/v3/admin/translations_coverage_controller.rb +5 -0
- data/app/controllers/spree/api/v3/admin/updates_controller.rb +39 -0
- data/app/controllers/spree/api/v3/admin/webhook_endpoints_controller.rb +40 -13
- data/app/controllers/spree/api/v3/admin/webhook_events_controller.rb +25 -0
- data/app/controllers/spree/api/v3/base_controller.rb +12 -0
- data/app/controllers/spree/api/v3/resource_controller.rb +99 -3
- data/app/controllers/spree/api/v3/seller/auth_controller.rb +10 -2
- data/app/controllers/spree/api/v3/seller/base_controller.rb +1 -0
- data/app/controllers/spree/api/v3/seller/countries_controller.rb +3 -3
- data/app/controllers/spree/api/v3/seller/delivery_methods_controller.rb +49 -60
- data/app/controllers/spree/api/v3/seller/exports_controller.rb +21 -4
- data/app/controllers/spree/api/v3/seller/files_controller.rb +27 -0
- data/app/controllers/spree/api/v3/seller/imports_controller.rb +25 -9
- data/app/controllers/spree/api/v3/seller/invitation_acceptances_controller.rb +12 -4
- data/app/controllers/spree/api/v3/seller/invitations_controller.rb +1 -1
- data/app/controllers/spree/api/v3/seller/me_controller.rb +15 -4
- data/app/controllers/spree/api/v3/seller/onboarding_controller.rb +11 -0
- data/app/controllers/spree/api/v3/seller/orders/claims_controller.rb +35 -0
- data/app/controllers/spree/api/v3/seller/orders/deliveries_controller.rb +12 -0
- data/app/controllers/spree/api/v3/seller/orders/exchanges_controller.rb +33 -0
- data/app/controllers/spree/api/v3/seller/orders/fulfillments_controller.rb +28 -2
- data/app/controllers/spree/api/v3/seller/orders/labels_controller.rb +23 -2
- data/app/controllers/spree/api/v3/seller/orders/notes_controller.rb +8 -1
- data/app/controllers/spree/api/v3/seller/orders/returns_controller.rb +32 -0
- data/app/controllers/spree/api/v3/seller/orders_controller.rb +35 -14
- data/app/controllers/spree/api/v3/seller/package_types_controller.rb +21 -9
- data/app/controllers/spree/api/v3/seller/password_resets_controller.rb +20 -11
- data/app/controllers/spree/api/v3/seller/policies_controller.rb +12 -4
- data/app/controllers/spree/api/v3/seller/products_controller.rb +115 -28
- data/app/controllers/spree/api/v3/seller/profile_controller.rb +33 -10
- data/app/controllers/spree/api/v3/seller/requirement_submissions_controller.rb +13 -6
- data/app/controllers/spree/api/v3/seller/resource_controller.rb +12 -0
- data/app/controllers/spree/api/v3/seller/stock_locations_controller.rb +44 -13
- data/app/controllers/spree/api/v3/seller/tax_identifiers_controller.rb +10 -1
- data/app/controllers/spree/api/v3/seller/team_controller.rb +5 -1
- data/app/controllers/spree/api/v3/store/auth_controller.rb +10 -0
- data/app/controllers/spree/api/v3/store/carts/discount_codes_controller.rb +9 -2
- data/app/controllers/spree/api/v3/store/carts/fulfillments_controller.rb +11 -11
- data/app/controllers/spree/api/v3/store/carts/gift_cards_controller.rb +13 -4
- data/app/controllers/spree/api/v3/store/carts/items_controller.rb +23 -7
- data/app/controllers/spree/api/v3/store/carts/payment_sessions_controller.rb +21 -7
- data/app/controllers/spree/api/v3/store/carts/payments_controller.rb +16 -3
- data/app/controllers/spree/api/v3/store/carts/po_documents_controller.rb +26 -28
- data/app/controllers/spree/api/v3/store/carts/store_credits_controller.rb +9 -1
- data/app/controllers/spree/api/v3/store/carts/tax_identifiers_controller.rb +5 -1
- data/app/controllers/spree/api/v3/store/carts_controller.rb +64 -52
- data/app/controllers/spree/api/v3/store/companies/addresses_controller.rb +12 -8
- data/app/controllers/spree/api/v3/store/companies/invitations_controller.rb +1 -5
- data/app/controllers/spree/api/v3/store/companies/members_controller.rb +4 -0
- data/app/controllers/spree/api/v3/store/companies_controller.rb +5 -1
- data/app/controllers/spree/api/v3/store/company_invitations_controller.rb +10 -2
- data/app/controllers/spree/api/v3/store/customer/addresses_controller.rb +8 -11
- data/app/controllers/spree/api/v3/store/customer/credit_cards_controller.rb +0 -4
- data/app/controllers/spree/api/v3/store/customer/data_requests_controller.rb +5 -5
- data/app/controllers/spree/api/v3/store/customer/digital_links_controller.rb +0 -4
- data/app/controllers/spree/api/v3/store/customer/gift_cards_controller.rb +0 -4
- data/app/controllers/spree/api/v3/store/customer/orders_controller.rb +0 -4
- data/app/controllers/spree/api/v3/store/customer/password_resets_controller.rb +25 -6
- data/app/controllers/spree/api/v3/store/customer/payment_setup_sessions_controller.rb +10 -9
- data/app/controllers/spree/api/v3/store/customer/store_credits_controller.rb +0 -5
- data/app/controllers/spree/api/v3/store/customer/tax_identifiers_controller.rb +5 -1
- data/app/controllers/spree/api/v3/store/customers_controller.rb +28 -2
- data/app/controllers/spree/api/v3/store/data_request_downloads_controller.rb +1 -1
- data/app/controllers/spree/api/v3/store/delivery_methods_controller.rb +1 -1
- data/app/controllers/spree/api/v3/store/newsletter_subscribers_controller.rb +27 -14
- data/app/controllers/spree/api/v3/store/orders/claims_controller.rb +12 -7
- data/app/controllers/spree/api/v3/store/orders/returns_controller.rb +11 -6
- data/app/controllers/spree/api/v3/store/orders_controller.rb +47 -10
- data/app/controllers/spree/api/v3/store/products_controller.rb +8 -0
- data/app/controllers/spree/api/v3/store/wishlist_items_controller.rb +10 -8
- data/app/controllers/spree/api/v3/store/wishlists_controller.rb +12 -4
- data/app/request_schemas/spree/api/v3/address_request_schema.rb +27 -0
- data/app/request_schemas/spree/api/v3/admin/address_request_schema.rb +13 -0
- data/app/request_schemas/spree/api/v3/admin/bulk_tags_request_schema.rb +17 -0
- data/app/request_schemas/spree/api/v3/admin/catalog_order_minimum_request_schema.rb +17 -0
- data/app/request_schemas/spree/api/v3/admin/email_template_language_request_schema.rb +17 -0
- data/app/request_schemas/spree/api/v3/admin/email_template_preview_request_schema.rb +32 -0
- data/app/request_schemas/spree/api/v3/admin/price_adjustment_tier_request_schema.rb +21 -0
- data/app/request_schemas/spree/api/v3/admin/price_list_price_request_schema.rb +21 -0
- data/app/request_schemas/spree/api/v3/admin/price_list_rule_request_schema.rb +19 -0
- data/app/request_schemas/spree/api/v3/admin/product_membership_reposition_request_schema.rb +17 -0
- data/app/request_schemas/spree/api/v3/admin/promotion_action_calculator_request_schema.rb +18 -0
- data/app/request_schemas/spree/api/v3/admin/promotion_action_line_item_request_schema.rb +15 -0
- data/app/request_schemas/spree/api/v3/admin/promotion_action_request_schema.rb +19 -0
- data/app/request_schemas/spree/api/v3/admin/promotion_rule_request_schema.rb +22 -0
- data/app/request_schemas/spree/api/v3/admin/reason_request_schema.rb +14 -0
- data/app/request_schemas/spree/api/v3/admin/tax_identifier_request_schema.rb +15 -0
- data/app/request_schemas/spree/api/v3/custom_field_value_request_schema.rb +15 -0
- data/app/request_schemas/spree/api/v3/file_upload_request_schema.rb +20 -0
- data/app/request_schemas/spree/api/v3/media_request_schema.rb +27 -0
- data/app/request_schemas/spree/api/v3/price_request_schema.rb +17 -0
- data/app/request_schemas/spree/api/v3/stock_level_request_schema.rb +18 -0
- data/app/request_schemas/spree/api/v3/store/address_request_schema.rb +29 -0
- data/app/request_schemas/spree/api/v3/tax_identifier_request_schema.rb +18 -0
- data/app/request_schemas/spree/api/v3/variant_option_request_schema.rb +13 -0
- data/app/request_schemas/spree/api/v3/variant_request_schema.rb +52 -0
- data/app/serializers/concerns/spree/api/v3/purchase_summary.rb +48 -0
- data/app/serializers/spree/api/v3/address_serializer.rb +4 -2
- data/app/serializers/spree/api/v3/admin/address_serializer.rb +8 -7
- data/app/serializers/spree/api/v3/admin/api_key_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/admin/applied_promotion_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/admin/cart_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/admin/catalog_assignment_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/catalog_order_minimum_serializer.rb +3 -8
- data/app/serializers/spree/api/v3/admin/catalog_price_serializer.rb +3 -4
- data/app/serializers/spree/api/v3/admin/catalog_price_tier_serializer.rb +4 -3
- data/app/serializers/spree/api/v3/admin/catalog_product_term_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/catalog_quantity_rule_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/channel_serializer.rb +7 -10
- data/app/serializers/spree/api/v3/admin/claim_line_item_serializer.rb +7 -0
- data/app/serializers/spree/api/v3/admin/claim_reason_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/claim_serializer.rb +5 -0
- data/app/serializers/spree/api/v3/admin/commission_line_serializer.rb +7 -18
- data/app/serializers/spree/api/v3/admin/commission_rate_serializer.rb +7 -11
- data/app/serializers/spree/api/v3/admin/commission_rule_serializer.rb +1 -5
- data/app/serializers/spree/api/v3/admin/country_serializer.rb +4 -0
- data/app/serializers/spree/api/v3/admin/coupon_code_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/credit_card_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/custom_field_definition_serializer.rb +6 -2
- data/app/serializers/spree/api/v3/admin/customer_serializer.rb +5 -17
- data/app/serializers/spree/api/v3/admin/data_request_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/admin/delivery_method_rule_serializer.rb +0 -2
- data/app/serializers/spree/api/v3/admin/delivery_method_serializer.rb +20 -30
- data/app/serializers/spree/api/v3/admin/delivery_method_service_serializer.rb +9 -1
- data/app/serializers/spree/api/v3/admin/delivery_origin_group_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/delivery_rate_serializer.rb +8 -0
- data/app/serializers/spree/api/v3/admin/delivery_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/delivery_zone_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/digital_asset_serializer.rb +4 -2
- data/app/serializers/spree/api/v3/admin/discount_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/admin/email_template_draft_serializer.rb +19 -0
- data/app/serializers/spree/api/v3/admin/email_template_preview_serializer.rb +38 -0
- data/app/serializers/spree/api/v3/admin/email_template_revision_serializer.rb +18 -0
- data/app/serializers/spree/api/v3/admin/email_template_sample_record_serializer.rb +13 -0
- data/app/serializers/spree/api/v3/admin/email_template_serializer.rb +61 -0
- data/app/serializers/spree/api/v3/admin/exchange_line_item_serializer.rb +5 -0
- data/app/serializers/spree/api/v3/admin/exchange_serializer.rb +6 -3
- data/app/serializers/spree/api/v3/admin/export_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/fee_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/admin/file_upload_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/admin/file_upload_target_serializer.rb +10 -0
- data/app/serializers/spree/api/v3/admin/fulfillment_item_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/fulfillment_serializer.rb +13 -17
- data/app/serializers/spree/api/v3/admin/gift_card_serializer.rb +4 -10
- data/app/serializers/spree/api/v3/admin/import_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/admin/integration_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/line_item_serializer.rb +14 -18
- data/app/serializers/spree/api/v3/admin/locale_serializer.rb +13 -0
- data/app/serializers/spree/api/v3/admin/market_serializer.rb +7 -2
- data/app/serializers/spree/api/v3/admin/media_serializer.rb +4 -5
- data/app/serializers/spree/api/v3/admin/order_cancellation_reason_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/order_group_serializer.rb +5 -9
- data/app/serializers/spree/api/v3/admin/order_routing_rule_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/admin/order_serializer.rb +38 -48
- data/app/serializers/spree/api/v3/admin/package_type_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/payment_method_serializer.rb +7 -4
- data/app/serializers/spree/api/v3/admin/payment_serializer.rb +6 -8
- data/app/serializers/spree/api/v3/admin/payment_split_serializer.rb +8 -9
- data/app/serializers/spree/api/v3/admin/permission_serializer.rb +4 -4
- data/app/serializers/spree/api/v3/admin/price_adjustment_tier_serializer.rb +3 -6
- data/app/serializers/spree/api/v3/admin/price_history_serializer.rb +5 -2
- data/app/serializers/spree/api/v3/admin/price_list_serializer.rb +1 -5
- data/app/serializers/spree/api/v3/admin/price_rule_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/admin/price_serializer.rb +2 -0
- data/app/serializers/spree/api/v3/admin/product_serializer.rb +4 -10
- data/app/serializers/spree/api/v3/admin/product_submission_serializer.rb +2 -10
- data/app/serializers/spree/api/v3/admin/product_type_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/promotion_action_serializer.rb +5 -9
- data/app/serializers/spree/api/v3/admin/promotion_rule_serializer.rb +1 -5
- data/app/serializers/spree/api/v3/admin/purchase_order_item_serializer.rb +6 -25
- data/app/serializers/spree/api/v3/admin/purchase_order_serializer.rb +4 -17
- data/app/serializers/spree/api/v3/admin/refund_reason_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/refund_serializer.rb +7 -0
- data/app/serializers/spree/api/v3/admin/reporting_result_serializer.rb +9 -2
- data/app/serializers/spree/api/v3/admin/return_line_item_serializer.rb +9 -0
- data/app/serializers/spree/api/v3/admin/return_reason_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/return_serializer.rb +8 -12
- data/app/serializers/spree/api/v3/admin/saved_report_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/seller_balance_serializer.rb +15 -10
- data/app/serializers/spree/api/v3/admin/seller_payout_serializer.rb +7 -7
- data/app/serializers/spree/api/v3/admin/seller_requirement_status_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/admin/seller_requirement_submission_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/seller_serializer.rb +8 -16
- data/app/serializers/spree/api/v3/admin/seller_transfer_serializer.rb +11 -10
- data/app/serializers/spree/api/v3/admin/shipping_label_serializer.rb +8 -21
- data/app/serializers/spree/api/v3/admin/stock_level_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/stock_location_serializer.rb +4 -3
- data/app/serializers/spree/api/v3/admin/stock_movement_serializer.rb +3 -9
- data/app/serializers/spree/api/v3/admin/stock_receipt_item_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/admin/stock_receipt_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/stock_reservation_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/stock_transfer_item_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/store_credit_event_serializer.rb +6 -3
- data/app/serializers/spree/api/v3/admin/store_credit_serializer.rb +11 -20
- data/app/serializers/spree/api/v3/admin/store_serializer.rb +21 -84
- data/app/serializers/spree/api/v3/admin/supplier_serializer.rb +2 -4
- data/app/serializers/spree/api/v3/admin/tax_exemption_certificate_serializer.rb +6 -10
- data/app/serializers/spree/api/v3/admin/tax_identifier_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/tax_line_serializer.rb +9 -3
- data/app/serializers/spree/api/v3/admin/tax_rate_serializer.rb +3 -19
- data/app/serializers/spree/api/v3/admin/update_status_serializer.rb +28 -0
- data/app/serializers/spree/api/v3/admin/variant_serializer.rb +13 -10
- data/app/serializers/spree/api/v3/admin/webhook_delivery_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/webhook_event_serializer.rb +23 -0
- data/app/serializers/spree/api/v3/applied_promotion_serializer.rb +2 -4
- data/app/serializers/spree/api/v3/base_serializer.rb +132 -7
- data/app/serializers/spree/api/v3/cart_serializer.rb +20 -66
- data/app/serializers/spree/api/v3/category_serializer.rb +5 -15
- data/app/serializers/spree/api/v3/claim_line_item_serializer.rb +6 -29
- data/app/serializers/spree/api/v3/claim_serializer.rb +2 -16
- data/app/serializers/spree/api/v3/collection_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/company_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/country_serializer.rb +2 -1
- data/app/serializers/spree/api/v3/currency_serializer.rb +9 -1
- data/app/serializers/spree/api/v3/custom_field_serializer.rb +1 -2
- data/app/serializers/spree/api/v3/customer_serializer.rb +3 -2
- data/app/serializers/spree/api/v3/delivery_rate_serializer.rb +8 -32
- data/app/serializers/spree/api/v3/delivery_zone_member_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/digital_asset_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/digital_link_serializer.rb +3 -9
- data/app/serializers/spree/api/v3/discount_serializer.rb +4 -12
- data/app/serializers/spree/api/v3/exchange_line_item_serializer.rb +6 -30
- data/app/serializers/spree/api/v3/exchange_serializer.rb +2 -16
- data/app/serializers/spree/api/v3/export_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/fee_serializer.rb +2 -10
- data/app/serializers/spree/api/v3/file_upload_serializer.rb +28 -0
- data/app/serializers/spree/api/v3/file_upload_target_serializer.rb +17 -0
- data/app/serializers/spree/api/v3/fulfillment_serializer.rb +4 -11
- data/app/serializers/spree/api/v3/gift_card_batch_serializer.rb +3 -7
- data/app/serializers/spree/api/v3/gift_card_serializer.rb +7 -17
- data/app/serializers/spree/api/v3/import_row_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/import_serializer.rb +3 -26
- data/app/serializers/spree/api/v3/invitation_serializer.rb +2 -19
- data/app/serializers/spree/api/v3/line_item_serializer.rb +19 -23
- data/app/serializers/spree/api/v3/locale_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/market_serializer.rb +5 -5
- data/app/serializers/spree/api/v3/media_event_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/media_serializer.rb +8 -5
- data/app/serializers/spree/api/v3/newsletter_subscriber_request_event_serializer.rb +35 -0
- data/app/serializers/spree/api/v3/newsletter_subscriber_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/option_value_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/order_group_serializer.rb +12 -25
- data/app/serializers/spree/api/v3/order_serializer.rb +14 -58
- data/app/serializers/spree/api/v3/password_reset_requested_event_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/payment_method_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/payment_serializer.rb +5 -10
- data/app/serializers/spree/api/v3/payment_session_serializer.rb +5 -13
- data/app/serializers/spree/api/v3/payment_setup_session_serializer.rb +3 -11
- data/app/serializers/spree/api/v3/policy_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/price_history_serializer.rb +6 -8
- data/app/serializers/spree/api/v3/price_serializer.rb +7 -12
- data/app/serializers/spree/api/v3/product_filter_price_range_serializer.rb +10 -4
- data/app/serializers/spree/api/v3/product_publication_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/product_serializer.rb +10 -24
- data/app/serializers/spree/api/v3/product_submission_serializer.rb +26 -0
- data/app/serializers/spree/api/v3/purchase_order_event_serializer.rb +23 -4
- data/app/serializers/spree/api/v3/refund_serializer.rb +11 -16
- data/app/serializers/spree/api/v3/return_line_item_serializer.rb +6 -21
- data/app/serializers/spree/api/v3/return_serializer.rb +4 -16
- data/app/serializers/spree/api/v3/saved_report_event_serializer.rb +23 -0
- data/app/serializers/spree/api/v3/seller/address_serializer.rb +12 -0
- data/app/serializers/spree/api/v3/seller/balance_serializer.rb +15 -10
- data/app/serializers/spree/api/v3/seller/claim_line_item_serializer.rb +7 -0
- data/app/serializers/spree/api/v3/seller/claim_serializer.rb +5 -0
- data/app/serializers/spree/api/v3/seller/country_serializer.rb +19 -0
- data/app/serializers/spree/api/v3/seller/delivery_method_rule_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/seller/delivery_method_serializer.rb +5 -15
- data/app/serializers/spree/api/v3/seller/delivery_rate_serializer.rb +8 -13
- data/app/serializers/spree/api/v3/seller/delivery_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/seller/delivery_zone_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/seller/exchange_line_item_serializer.rb +5 -0
- data/app/serializers/spree/api/v3/seller/exchange_serializer.rb +6 -3
- data/app/serializers/spree/api/v3/seller/file_upload_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/seller/file_upload_target_serializer.rb +10 -0
- data/app/serializers/spree/api/v3/seller/fulfillment_item_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/seller/fulfillment_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/seller/import_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/seller/invitation_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/seller/media_serializer.rb +2 -5
- data/app/serializers/spree/api/v3/seller/order_line_item_serializer.rb +8 -13
- data/app/serializers/spree/api/v3/seller/order_serializer.rb +19 -40
- data/app/serializers/spree/api/v3/seller/payment_split_serializer.rb +8 -9
- data/app/serializers/spree/api/v3/seller/payout_serializer.rb +6 -6
- data/app/serializers/spree/api/v3/seller/price_history_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/seller/price_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/seller/product_serializer.rb +3 -7
- data/app/serializers/spree/api/v3/seller/product_submission_serializer.rb +1 -21
- data/app/serializers/spree/api/v3/seller/profile_serializer.rb +9 -13
- data/app/serializers/spree/api/v3/seller/requirement_status_serializer.rb +3 -9
- data/app/serializers/spree/api/v3/seller/return_line_item_serializer.rb +8 -0
- data/app/serializers/spree/api/v3/seller/return_serializer.rb +8 -17
- data/app/serializers/spree/api/v3/seller/state_serializer.rb +10 -0
- data/app/serializers/spree/api/v3/seller/stock_location_serializer.rb +3 -0
- data/app/serializers/spree/api/v3/seller/transfer_serializer.rb +10 -9
- data/app/serializers/spree/api/v3/seller/variant_serializer.rb +8 -4
- data/app/serializers/spree/api/v3/seller_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/shipping_label_event_serializer.rb +22 -4
- data/app/serializers/spree/api/v3/stock_level_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/stock_location_serializer.rb +8 -1
- data/app/serializers/spree/api/v3/stock_movement_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/stock_receipt_event_serializer.rb +20 -4
- data/app/serializers/spree/api/v3/stock_transfer_serializer.rb +1 -7
- data/app/serializers/spree/api/v3/store_credit_event_serializer.rb +2 -13
- data/app/serializers/spree/api/v3/store_credit_serializer.rb +3 -27
- data/app/serializers/spree/api/v3/supplier_event_serializer.rb +6 -4
- data/app/serializers/spree/api/v3/tax_line_serializer.rb +11 -23
- data/app/serializers/spree/api/v3/variant_serializer.rb +10 -24
- data/app/serializers/spree/api/v3/wishlist_item_serializer.rb +1 -11
- data/app/serializers/spree/api/v3/wishlist_serializer.rb +2 -6
- data/app/services/spree/api/v3/filter_predicates.rb +29 -0
- data/app/services/spree/api/v3/filter_table.rb +337 -0
- data/app/services/spree/api/v3/filters_aggregator.rb +2 -2
- data/app/services/spree/api/v3/request_schema.rb +430 -0
- data/app/services/spree/webhooks/deliver_webhook.rb +7 -3
- data/app/subscribers/spree/webhook_event_subscriber.rb +3 -10
- data/config/initializers/pagy.rb +1 -1
- data/config/initializers/typelizer.rb +7 -9
- data/config/locales/ar.yml +15 -0
- data/config/locales/be.yml +15 -0
- data/config/locales/bg.yml +15 -0
- data/config/locales/ca.yml +15 -0
- data/config/locales/cs.yml +15 -0
- data/config/locales/da.yml +15 -0
- data/config/locales/de-CH.yml +11 -0
- data/config/locales/de.yml +15 -0
- data/config/locales/el.yml +15 -0
- data/config/locales/en.yml +5 -40
- data/config/locales/es-CL.yml +10 -0
- data/config/locales/es-EC.yml +11 -0
- data/config/locales/es-MX.yml +12 -0
- data/config/locales/es.yml +15 -0
- data/config/locales/et.yml +15 -0
- data/config/locales/fa.yml +15 -0
- data/config/locales/fi.yml +15 -0
- data/config/locales/fr.yml +15 -0
- data/config/locales/hu.yml +15 -0
- data/config/locales/id.yml +15 -0
- data/config/locales/it.yml +15 -0
- data/config/locales/ja.yml +15 -0
- data/config/locales/km.yml +15 -0
- data/config/locales/ko.yml +15 -0
- data/config/locales/ku.yml +15 -0
- data/config/locales/lt.yml +15 -0
- data/config/locales/lv.yml +15 -0
- data/config/locales/nb.yml +15 -0
- data/config/locales/ne.yml +15 -0
- data/config/locales/nl.yml +15 -0
- data/config/locales/pl.yml +15 -0
- data/config/locales/pt-BR.yml +13 -0
- data/config/locales/pt.yml +15 -0
- data/config/locales/ro.yml +15 -0
- data/config/locales/ru.yml +15 -0
- data/config/locales/sk.yml +15 -0
- data/config/locales/sl-SI.yml +15 -0
- data/config/locales/sv.yml +15 -0
- data/config/locales/th.yml +15 -0
- data/config/locales/tr.yml +15 -0
- data/config/locales/uk.yml +15 -0
- data/config/locales/vi.yml +15 -0
- data/config/locales/zh-CN.yml +15 -0
- data/config/locales/zh-TW.yml +15 -0
- data/config/routes.rb +54 -102
- data/lib/spree/api/configuration.rb +5 -0
- data/lib/spree/api/dependencies.rb +54 -274
- data/lib/spree/api/middleware/request_size_limit.rb +24 -3
- data/lib/spree/api/openapi/filter_documentation.rb +136 -0
- data/lib/spree/api/openapi/schema_helper.rb +127 -81
- data/lib/spree/api/preference_families.rb +46 -0
- data/lib/spree/api/preference_types.rb +138 -0
- data/lib/spree/api/typelizer_generation.rb +39 -0
- data/lib/spree/api/webhook_event_types.rb +140 -0
- data/lib/spree/api.rb +0 -2
- data/lib/tasks/filters.rake +12 -0
- data/lib/typelizer/open_enums.rb +10 -0
- metadata +125 -40
- data/app/controllers/concerns/spree/api/v3/address_params.rb +0 -17
- data/app/controllers/concerns/spree/api/v3/direct_uploads.rb +0 -35
- data/app/controllers/spree/api/v3/admin/direct_uploads_controller.rb +0 -54
- data/app/controllers/spree/api/v3/seller/direct_uploads_controller.rb +0 -21
- data/config/i18n-tasks.yml +0 -40
- data/config/initializers/alba.rb +0 -5
|
@@ -10,6 +10,47 @@ module Spree
|
|
|
10
10
|
class CollectionsController < ResourceController
|
|
11
11
|
scoped_resource :collections
|
|
12
12
|
|
|
13
|
+
request_params :collection do |body|
|
|
14
|
+
body.attribute :name, :string, required: true, on: :create, example: 'On Sale'
|
|
15
|
+
body.attribute :description, :string,
|
|
16
|
+
description: 'Rich text HTML. Reads come back as this (plain text) plus `description_html`.'
|
|
17
|
+
body.attribute :permalink, :string
|
|
18
|
+
body.attribute :position, :integer,
|
|
19
|
+
description: "1-based position among the store's collections; the server shifts its siblings. The nested products reposition endpoints, unlike this, take 0-based indexes."
|
|
20
|
+
body.attribute :meta_title, :string
|
|
21
|
+
body.attribute :meta_description, :string
|
|
22
|
+
body.attribute :meta_keywords, :string
|
|
23
|
+
body.attribute :image_signed_id, :string,
|
|
24
|
+
nullable: true,
|
|
25
|
+
description: 'A `signed_id` from `files.upload()` for the landscape image, or null to remove it.'
|
|
26
|
+
body.attribute :square_image_signed_id, :string,
|
|
27
|
+
nullable: true,
|
|
28
|
+
description: 'A `signed_id` from `files.upload()` for the square image, or null to remove it.'
|
|
29
|
+
body.attribute :automatic, :boolean,
|
|
30
|
+
description: 'When true, membership is materialized from `rules` instead of curated by hand.'
|
|
31
|
+
body.attribute :rules_match_policy, :string,
|
|
32
|
+
choices: Spree::Collection::RULES_MATCH_POLICIES,
|
|
33
|
+
description: 'Whether a product must match all rules or any of them. Defaults to `all`.'
|
|
34
|
+
body.attribute :sort_order, :string,
|
|
35
|
+
choices: Spree::Collection::SORT_ORDERS,
|
|
36
|
+
description: "Default product sort for the storefront listing; a shopper's own sort wins. Defaults to `manual`."
|
|
37
|
+
# Applied by the model's sync setter (Spree::Collection#rules=).
|
|
38
|
+
body.attribute :rules, :array,
|
|
39
|
+
as: 'CollectionRuleParams',
|
|
40
|
+
description: 'The complete desired rule set. Entries with an `id` update, entries without one are created, and existing rules left out are removed.' do |rule|
|
|
41
|
+
rule.attribute :id, :id, example: 'crule_abc123', description: 'Omit to create a new rule.'
|
|
42
|
+
rule.attribute :type, :string,
|
|
43
|
+
example: 'tag',
|
|
44
|
+
description: 'Wire shorthand for the rule kind, from the collection rule types endpoint.'
|
|
45
|
+
rule.attribute :value, :string, example: 'summer'
|
|
46
|
+
rule.attribute :match_policy, :string,
|
|
47
|
+
choices: Spree::CollectionRule::MATCH_POLICIES,
|
|
48
|
+
example: 'contains'
|
|
49
|
+
end
|
|
50
|
+
body.attribute :custom_fields, :array, of: Spree::Api::V3::CustomFieldValueRequestSchema,
|
|
51
|
+
description: 'Custom field values, each validated against its definition.'
|
|
52
|
+
end
|
|
53
|
+
|
|
13
54
|
protected
|
|
14
55
|
|
|
15
56
|
def model_class
|
|
@@ -32,22 +73,10 @@ module Spree
|
|
|
32
73
|
super.ordered
|
|
33
74
|
end
|
|
34
75
|
|
|
35
|
-
#
|
|
36
|
-
#
|
|
37
|
-
# +crule_+ ids update, missing ids build, omitted rules are removed —
|
|
38
|
-
# so normalize_params is deliberately NOT called (that would rewrite
|
|
39
|
-
# +rules+ to +rules_attributes+ and route past the setter).
|
|
76
|
+
# normalize_params is deliberately NOT called: it would rewrite
|
|
77
|
+
# +rules+ to +rules_attributes+ and route past the sync setter.
|
|
40
78
|
def permitted_params
|
|
41
|
-
params.permit(
|
|
42
|
-
:name, :description, :permalink, :position,
|
|
43
|
-
:meta_title, :meta_description, :meta_keywords,
|
|
44
|
-
:image, :square_image,
|
|
45
|
-
:automatic, :rules_match_policy, :sort_order,
|
|
46
|
-
rules: [:id, :type, :value, :match_policy],
|
|
47
|
-
# Inline custom field values keyed by definition id (see
|
|
48
|
-
# CategoriesController#permitted_params for the value shapes).
|
|
49
|
-
custom_fields: [:id, :custom_field_definition_id, :value, { value: [] }, { value: {} }]
|
|
50
|
-
)
|
|
79
|
+
params.permit(*permitted_attributes)
|
|
51
80
|
end
|
|
52
81
|
end
|
|
53
82
|
end
|
|
@@ -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
|
|
@@ -26,8 +83,8 @@ module Spree
|
|
|
26
83
|
{
|
|
27
84
|
type: klass.api_type,
|
|
28
85
|
name: klass.human_name,
|
|
29
|
-
description: klass.
|
|
30
|
-
|
|
86
|
+
description: klass.human_description,
|
|
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)
|
|
@@ -139,7 +187,7 @@ module Spree
|
|
|
139
187
|
errors = ActiveModel::Errors.new(Spree::CommissionRate.new)
|
|
140
188
|
unknown.each do |type|
|
|
141
189
|
errors.add(:rules, :invalid_commission_rule_type, type: type,
|
|
142
|
-
message:
|
|
190
|
+
message: I18n.t('spree.errors.messages.invalid_commission_rule_type', type: type))
|
|
143
191
|
end
|
|
144
192
|
render_validation_error(errors)
|
|
145
193
|
|
|
@@ -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
|
|
@@ -53,10 +64,6 @@ module Spree
|
|
|
53
64
|
def scope
|
|
54
65
|
@parent.addresses
|
|
55
66
|
end
|
|
56
|
-
|
|
57
|
-
def parent_association
|
|
58
|
-
:addresses
|
|
59
|
-
end
|
|
60
67
|
end
|
|
61
68
|
end
|
|
62
69
|
end
|
|
@@ -17,7 +17,7 @@ module Spree
|
|
|
17
17
|
else
|
|
18
18
|
render_error(
|
|
19
19
|
code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:validation_error],
|
|
20
|
-
message:
|
|
20
|
+
message: I18n.t('spree.company_invitations.not_pending'),
|
|
21
21
|
status: :unprocessable_content
|
|
22
22
|
)
|
|
23
23
|
end
|
|
@@ -44,10 +44,6 @@ module Spree
|
|
|
44
44
|
def scope
|
|
45
45
|
action_name == 'index' ? @parent.invitations.pending : @parent.invitations
|
|
46
46
|
end
|
|
47
|
-
|
|
48
|
-
def parent_association
|
|
49
|
-
:invitations
|
|
50
|
-
end
|
|
51
47
|
end
|
|
52
48
|
end
|
|
53
49
|
end
|
|
@@ -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(
|
|
@@ -47,16 +55,12 @@ module Spree
|
|
|
47
55
|
@parent.memberships
|
|
48
56
|
end
|
|
49
57
|
|
|
50
|
-
def parent_association
|
|
51
|
-
:memberships
|
|
52
|
-
end
|
|
53
|
-
|
|
54
58
|
def collection_includes
|
|
55
59
|
[:customer]
|
|
56
60
|
end
|
|
57
61
|
|
|
58
62
|
def permitted_params
|
|
59
|
-
params.permit(
|
|
63
|
+
params.permit(*declared_permitted_attributes)
|
|
60
64
|
end
|
|
61
65
|
end
|
|
62
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(
|
|
@@ -24,11 +39,7 @@ module Spree
|
|
|
24
39
|
verified_by: try_spree_current_user
|
|
25
40
|
)
|
|
26
41
|
|
|
27
|
-
|
|
28
|
-
render json: serialize_resource(result.value)
|
|
29
|
-
else
|
|
30
|
-
render_result_error(result)
|
|
31
|
-
end
|
|
42
|
+
render_result(result)
|
|
32
43
|
end
|
|
33
44
|
|
|
34
45
|
# PATCH .../:id/revoke — withdrawing evidence that was accepted.
|
|
@@ -88,20 +99,12 @@ module Spree
|
|
|
88
99
|
@parent.tax_exemption_certificates
|
|
89
100
|
end
|
|
90
101
|
|
|
91
|
-
def parent_association
|
|
92
|
-
:tax_exemption_certificates
|
|
93
|
-
end
|
|
94
|
-
|
|
95
102
|
def collection_includes
|
|
96
103
|
[{ document_attachment: :blob }]
|
|
97
104
|
end
|
|
98
105
|
|
|
99
|
-
# `document` is an ActiveStorage signed blob id from
|
|
100
|
-
# POST /api/v3/admin/direct_uploads.
|
|
101
106
|
def permitted_params
|
|
102
|
-
params.permit(
|
|
103
|
-
:issued_at, :expires_at, :country_code, :state_code, :document,
|
|
104
|
-
metadata: {})
|
|
107
|
+
params.permit(*declared_permitted_attributes)
|
|
105
108
|
end
|
|
106
109
|
|
|
107
110
|
def build_resource
|
|
@@ -119,16 +122,6 @@ module Spree
|
|
|
119
122
|
|
|
120
123
|
authorize!(mapped, resource)
|
|
121
124
|
end
|
|
122
|
-
|
|
123
|
-
private
|
|
124
|
-
|
|
125
|
-
def render_invalid_signature
|
|
126
|
-
render_error(
|
|
127
|
-
code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:validation_error],
|
|
128
|
-
message: 'Invalid document signed id',
|
|
129
|
-
status: :unprocessable_content
|
|
130
|
-
)
|
|
131
|
-
end
|
|
132
125
|
end
|
|
133
126
|
end
|
|
134
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.
|
|
@@ -31,12 +36,8 @@ module Spree
|
|
|
31
36
|
@parent.tax_identifiers
|
|
32
37
|
end
|
|
33
38
|
|
|
34
|
-
def parent_association
|
|
35
|
-
:tax_identifiers
|
|
36
|
-
end
|
|
37
|
-
|
|
38
39
|
def permitted_params
|
|
39
|
-
params.permit(
|
|
40
|
+
params.permit(*declared_permitted_attributes)
|
|
40
41
|
end
|
|
41
42
|
end
|
|
42
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
|
|
@@ -22,18 +38,12 @@ module Spree
|
|
|
22
38
|
Spree.api.admin_company_serializer
|
|
23
39
|
end
|
|
24
40
|
|
|
25
|
-
def scope
|
|
26
|
-
super.for_store(current_store)
|
|
27
|
-
end
|
|
28
|
-
|
|
29
41
|
def collection_includes
|
|
30
42
|
[:children, :memberships, :external_references]
|
|
31
43
|
end
|
|
32
44
|
|
|
33
45
|
def permitted_params
|
|
34
|
-
|
|
35
|
-
:name, :kind, :parent_id, :po_number_required, metadata: {})
|
|
36
|
-
resolve_parent_param(permitted)
|
|
46
|
+
resolve_parent_param(params.permit(*permitted_attributes))
|
|
37
47
|
end
|
|
38
48
|
|
|
39
49
|
private
|
|
@@ -11,7 +11,7 @@ module Spree
|
|
|
11
11
|
|
|
12
12
|
# Override base index to skip pagination — there are ~250 countries
|
|
13
13
|
# and address-form dropdowns need them all at once. Pagy's global
|
|
14
|
-
#
|
|
14
|
+
# client_limit (100) prevents using the paginated path for this.
|
|
15
15
|
#
|
|
16
16
|
# Countries are reference data rather than records, so this reads
|
|
17
17
|
# from the registry and needs no authorization beyond the admin
|
|
@@ -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
|
|
@@ -4,12 +4,32 @@ module Spree
|
|
|
4
4
|
module Admin
|
|
5
5
|
# Schema-side metadata for custom fields. Definitions are per resource
|
|
6
6
|
# *type* (every Spree::Product shares the same definitions), so this is
|
|
7
|
-
# a flat top-level endpoint. Filter by
|
|
7
|
+
# a flat top-level endpoint. Filter by `q[resource_type_eq]=product`
|
|
8
8
|
# (or any other registered custom-field-bearing resource) to scope the
|
|
9
9
|
# list to one parent type.
|
|
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,9 +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)
|
|
57
|
+
params.permit(*permitted_attributes)
|
|
40
58
|
end
|
|
41
59
|
|
|
42
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
|
|
|
@@ -43,10 +50,6 @@ module Spree
|
|
|
43
50
|
Spree.api.admin_custom_field_serializer
|
|
44
51
|
end
|
|
45
52
|
|
|
46
|
-
def parent_association
|
|
47
|
-
:custom_fields
|
|
48
|
-
end
|
|
49
|
-
|
|
50
53
|
def set_parent
|
|
51
54
|
# Routes always mount this controller under a recognized parent, so
|
|
52
55
|
# `parent_lookup` matches in normal flows. The explicit raise is a
|
|
@@ -86,11 +89,11 @@ module Spree
|
|
|
86
89
|
# `custom_field_definition_id` is an alias_attribute on Spree::CustomField;
|
|
87
90
|
# AR resolves the prefixed-ID and the alias to the canonical FK on assign.
|
|
88
91
|
def permitted_params
|
|
89
|
-
params.permit(*
|
|
92
|
+
params.permit(*permitted_attributes)
|
|
90
93
|
end
|
|
91
94
|
|
|
92
95
|
def update_permitted_params
|
|
93
|
-
params.permit(
|
|
96
|
+
params.permit(*declared_permitted_attributes)
|
|
94
97
|
end
|
|
95
98
|
|
|
96
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
|
|
@@ -17,12 +25,8 @@ module Spree
|
|
|
17
25
|
Spree.api.admin_customer_group_serializer
|
|
18
26
|
end
|
|
19
27
|
|
|
20
|
-
def scope
|
|
21
|
-
super.for_store(current_store)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
28
|
def permitted_params
|
|
25
|
-
params.permit(*
|
|
29
|
+
params.permit(*permitted_attributes)
|
|
26
30
|
end
|
|
27
31
|
end
|
|
28
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
|
|
@@ -50,10 +61,6 @@ module Spree
|
|
|
50
61
|
|
|
51
62
|
protected
|
|
52
63
|
|
|
53
|
-
def parent_association
|
|
54
|
-
:addresses
|
|
55
|
-
end
|
|
56
|
-
|
|
57
64
|
def model_class
|
|
58
65
|
Spree::Address
|
|
59
66
|
end
|
|
@@ -65,13 +72,7 @@ module Spree
|
|
|
65
72
|
private
|
|
66
73
|
|
|
67
74
|
def address_attrs
|
|
68
|
-
params.permit(
|
|
69
|
-
:firstname, :lastname, :first_name, :last_name,
|
|
70
|
-
:address1, :address2, :city,
|
|
71
|
-
:country_code, :state_code,
|
|
72
|
-
:zipcode, :postal_code, :phone, :alternative_phone,
|
|
73
|
-
:state_name, :company, :label, :quick_checkout
|
|
74
|
-
)
|
|
75
|
+
params.permit(*declared_permitted_attributes)
|
|
75
76
|
end
|
|
76
77
|
|
|
77
78
|
def default_billing_flag
|
|
@@ -6,10 +6,6 @@ module Spree
|
|
|
6
6
|
class CreditCardsController < BaseController
|
|
7
7
|
protected
|
|
8
8
|
|
|
9
|
-
def parent_association
|
|
10
|
-
:credit_cards
|
|
11
|
-
end
|
|
12
|
-
|
|
13
9
|
# Customers are global; a saved card belongs to the store-scoped
|
|
14
10
|
# payment method it was created against, so the nested collection is
|
|
15
11
|
# bound to the current store's payment methods.
|