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
|
@@ -5,6 +5,125 @@ module Spree
|
|
|
5
5
|
class StoreController < Admin::BaseController
|
|
6
6
|
scoped_resource :settings
|
|
7
7
|
|
|
8
|
+
request_params :store do |body|
|
|
9
|
+
body.attribute :name, :string, example: 'My Store'
|
|
10
|
+
body.attribute :admin_locale, :string, example: 'en'
|
|
11
|
+
body.attribute :timezone, :string, example: 'Europe/Berlin'
|
|
12
|
+
body.attribute :weight_unit, :string, choices: Spree::Variant::WEIGHT_UNITS
|
|
13
|
+
body.attribute :unit_system, :string, choices: Spree::Store::UNIT_SYSTEMS
|
|
14
|
+
body.attribute :storefront_access, :string,
|
|
15
|
+
choices: Spree::Channel::Gating::STOREFRONT_ACCESS,
|
|
16
|
+
description: "The store-wide default for what anonymous visitors can see. Channels fall back to it when they don't set their own."
|
|
17
|
+
body.attribute :storefront_url, :string,
|
|
18
|
+
nullable: true,
|
|
19
|
+
description: "The storefront's public URL, the base for links in customer emails. Saving it also completes the storefront setup task."
|
|
20
|
+
body.attribute :guest_checkout, :boolean,
|
|
21
|
+
description: 'The store-wide default for guest checkout. Channels fall back to it.'
|
|
22
|
+
body.attribute :always_include_confirm_step, :boolean,
|
|
23
|
+
description: 'Always show a confirmation step in checkout, even when no payment method requires one.'
|
|
24
|
+
body.attribute :company_field_enabled, :boolean, description: 'Shows a company field on address forms.'
|
|
25
|
+
body.attribute :address_requires_company, :boolean,
|
|
26
|
+
description: 'Makes a company name mandatory on addresses.'
|
|
27
|
+
body.attribute :address_requires_phone, :boolean,
|
|
28
|
+
description: 'Makes a phone number mandatory on customer addresses.'
|
|
29
|
+
body.attribute :capture_method, :string,
|
|
30
|
+
choices: Spree::CaptureMethod::CAPTURE_METHODS,
|
|
31
|
+
description: "The store-wide default for when a customer is charged rather than only authorized. A payment method's own setting wins when set."
|
|
32
|
+
body.attribute :track_inventory_levels, :boolean,
|
|
33
|
+
description: 'Counts on-hand quantities. Off means everything is treated as always available.'
|
|
34
|
+
body.attribute :stock_reservations_enabled, :boolean,
|
|
35
|
+
description: "Holds stock for shoppers while they check out, so the same item can't be sold twice."
|
|
36
|
+
body.attribute :low_stock_threshold, :integer,
|
|
37
|
+
description: 'On-hand units at or below which a tracked variant counts as low stock on the home screen; 0 turns the warning off.'
|
|
38
|
+
body.attribute :tax_using_ship_address, :boolean,
|
|
39
|
+
description: 'Calculates tax from the shipping address. When false, tax is calculated from the billing address.'
|
|
40
|
+
body.attribute :track_price_history, :boolean,
|
|
41
|
+
description: 'Records price changes for the EU Omnibus lowest-price-in-30-days display.'
|
|
42
|
+
body.attribute :show_products_without_price, :boolean,
|
|
43
|
+
description: "Whether products with no price in the shopper's currency still appear in listings."
|
|
44
|
+
body.attribute :disable_sku_validation, :boolean,
|
|
45
|
+
description: 'Lets more than one variant share the same SKU.'
|
|
46
|
+
body.attribute :order_routing_strategy, :string,
|
|
47
|
+
description: 'The store-wide order routing strategy shorthand. Channels fall back to it.'
|
|
48
|
+
body.attribute :pricing_provider, :string,
|
|
49
|
+
description: 'Where prices come from: a registered provider key, or `internal`.'
|
|
50
|
+
body.attribute :inventory_provider, :string,
|
|
51
|
+
description: 'Where stock levels come from: a registered provider key, or `internal`.'
|
|
52
|
+
body.attribute :pricing_provider_failure_policy, :string,
|
|
53
|
+
choices: Spree::ProviderFailurePolicy::VALUES,
|
|
54
|
+
description: '`strict` refuses to price when the provider cannot answer; `fallback` uses the catalog.'
|
|
55
|
+
body.attribute :inventory_provider_failure_policy, :string,
|
|
56
|
+
choices: Spree::ProviderFailurePolicy::VALUES,
|
|
57
|
+
description: '`fallback` sells on the local stock snapshot when the provider cannot answer; `strict` refuses.'
|
|
58
|
+
body.attribute :payout_provider, :string,
|
|
59
|
+
description: 'Blank means the built-in provider: the marketplace settles by hand.'
|
|
60
|
+
body.attribute :default_payouts_schedule_interval, :string, choices: Spree::Seller::PAYOUT_INTERVALS
|
|
61
|
+
body.attribute :default_minimum_payout_amount, :decimal,
|
|
62
|
+
example: '50.00',
|
|
63
|
+
description: "In the store's currency."
|
|
64
|
+
body.attribute :auto_approve_sellers, :boolean,
|
|
65
|
+
description: 'Admits a seller as soon as they finish onboarding, with no operator review.'
|
|
66
|
+
body.attribute :auto_approve_seller_products, :boolean,
|
|
67
|
+
description: 'Puts a seller product on sale the moment it is submitted, with no review.'
|
|
68
|
+
body.attribute :send_seller_transactional_emails, :boolean,
|
|
69
|
+
description: 'When false, transactional seller emails (approval, payouts and so on) are not sent.'
|
|
70
|
+
body.attribute :default_commission_tax_rate, :decimal,
|
|
71
|
+
example: '0.23',
|
|
72
|
+
description: 'Tax charged on commission as a fraction (`"0.23"` is 23%), when neither the commission rate nor the tax provider names one.'
|
|
73
|
+
body.attribute :document_number_format, :string,
|
|
74
|
+
example: 'sequential',
|
|
75
|
+
description: 'How document numbers are produced: `sequential` or `random`. Applies to every numbered document.'
|
|
76
|
+
body.attribute :order_number_prefix, :string,
|
|
77
|
+
example: 'R',
|
|
78
|
+
description: 'Leads every order number. Uppercase letters, digits, dashes and # only.'
|
|
79
|
+
body.attribute :order_number_suffix, :string,
|
|
80
|
+
description: 'Ends every order number. Uppercase letters, digits, dashes and # only.'
|
|
81
|
+
body.attribute :order_number_sequence_start, :integer,
|
|
82
|
+
description: "The first sequential order number. Only applies before the store's first order."
|
|
83
|
+
body.attribute :limit_digital_download_count, :boolean,
|
|
84
|
+
description: 'Whether a digital download link stops working after a number of clicks.'
|
|
85
|
+
body.attribute :digital_asset_authorized_clicks, :integer,
|
|
86
|
+
description: 'How many clicks a download link allows, unless the file sets its own.'
|
|
87
|
+
body.attribute :limit_digital_download_days, :boolean,
|
|
88
|
+
description: 'Whether a digital download link expires after a number of days.'
|
|
89
|
+
body.attribute :digital_asset_authorized_days, :integer,
|
|
90
|
+
description: 'How many days a download link stays valid, unless the file sets its own.'
|
|
91
|
+
body.attribute :mail_from_address, :string, description: 'Sender address of every transactional email.'
|
|
92
|
+
body.attribute :customer_support_email, :string,
|
|
93
|
+
nullable: true,
|
|
94
|
+
description: 'Customer-facing reply-to address shown in the storefront and email footers.'
|
|
95
|
+
body.attribute :new_order_notifications_email, :string,
|
|
96
|
+
nullable: true,
|
|
97
|
+
description: 'Recipient of "new order placed" staff notifications.'
|
|
98
|
+
body.attribute :send_consumer_transactional_emails, :boolean,
|
|
99
|
+
description: 'When false, transactional customer emails (order confirmation and so on) are not sent.'
|
|
100
|
+
body.attribute :email_accent_color, :string,
|
|
101
|
+
nullable: true,
|
|
102
|
+
description: 'Customer email buttons and links, as `#RRGGBB`. Blank keeps the outlined buttons emails ship with.'
|
|
103
|
+
body.attribute :email_background_color, :string,
|
|
104
|
+
nullable: true,
|
|
105
|
+
description: 'Customer email page background, as `#RRGGBB`.'
|
|
106
|
+
body.attribute :email_card_color, :string,
|
|
107
|
+
nullable: true,
|
|
108
|
+
description: 'Customer email card behind the content, as `#RRGGBB`.'
|
|
109
|
+
body.attribute :email_text_color, :string,
|
|
110
|
+
nullable: true,
|
|
111
|
+
description: 'Customer email body text, as `#RRGGBB`.'
|
|
112
|
+
body.attribute :email_heading_color, :string,
|
|
113
|
+
nullable: true,
|
|
114
|
+
description: 'Customer email headings and emphasized text, as `#RRGGBB`.'
|
|
115
|
+
body.attribute :email_font, :string,
|
|
116
|
+
nullable: true,
|
|
117
|
+
example: 'inter',
|
|
118
|
+
description: 'Customer email font: `inter`, `system`, `helvetica`, `georgia`, `roboto`, `lato` or `merriweather`.'
|
|
119
|
+
body.attribute :logo_signed_id, :string,
|
|
120
|
+
nullable: true,
|
|
121
|
+
description: 'A `signed_id` from `files.upload()` for the store logo, or null to remove it.'
|
|
122
|
+
body.attribute :mailer_logo_signed_id, :string,
|
|
123
|
+
nullable: true,
|
|
124
|
+
description: 'A `signed_id` from `files.upload()` for the logo in transactional emails, or null to remove it.'
|
|
125
|
+
end
|
|
126
|
+
|
|
8
127
|
# Reading the current store is shell data — the dashboard needs the
|
|
9
128
|
# name, logo, timezone, currency and locales to render anything at
|
|
10
129
|
# all, so every signed-in staff member can read it regardless of
|
|
@@ -56,7 +175,6 @@ module Spree
|
|
|
56
175
|
{
|
|
57
176
|
key: provider_class.key,
|
|
58
177
|
name: provider_class.provider_name,
|
|
59
|
-
integration_class: provider_class.integration_class,
|
|
60
178
|
integration_type: provider_class.integration_class.presence&.safe_constantize&.api_type,
|
|
61
179
|
available: provider_class.available_for_store?(current_store)
|
|
62
180
|
}
|
|
@@ -71,54 +189,10 @@ module Spree
|
|
|
71
189
|
Spree.api.admin_store_serializer
|
|
72
190
|
end
|
|
73
191
|
|
|
192
|
+
# Extensions' fields too: the store settings page saves the fields
|
|
193
|
+
# plugins add to it with the rest of the form.
|
|
74
194
|
def permitted_params
|
|
75
|
-
params.permit(
|
|
76
|
-
:name,
|
|
77
|
-
:preferred_admin_locale,
|
|
78
|
-
:preferred_timezone,
|
|
79
|
-
:preferred_weight_unit,
|
|
80
|
-
:preferred_unit_system,
|
|
81
|
-
:preferred_storefront_access,
|
|
82
|
-
:preferred_storefront_url,
|
|
83
|
-
:preferred_guest_checkout,
|
|
84
|
-
:preferred_always_include_confirm_step,
|
|
85
|
-
:preferred_company_field_enabled,
|
|
86
|
-
:preferred_address_requires_company,
|
|
87
|
-
:preferred_address_requires_phone,
|
|
88
|
-
:preferred_capture_method,
|
|
89
|
-
# @deprecated Superseded by preferred_capture_method; the model
|
|
90
|
-
# maps them onto it. Removed in 6.1.
|
|
91
|
-
:preferred_auto_capture,
|
|
92
|
-
:preferred_auto_capture_on_dispatch,
|
|
93
|
-
:preferred_track_inventory_levels,
|
|
94
|
-
:preferred_stock_reservations_enabled,
|
|
95
|
-
:preferred_low_stock_threshold,
|
|
96
|
-
:preferred_tax_using_ship_address,
|
|
97
|
-
:preferred_track_price_history,
|
|
98
|
-
:preferred_show_products_without_price,
|
|
99
|
-
:preferred_disable_sku_validation,
|
|
100
|
-
:preferred_order_routing_strategy,
|
|
101
|
-
:preferred_pricing_provider,
|
|
102
|
-
:preferred_inventory_provider,
|
|
103
|
-
:preferred_pricing_provider_failure_policy,
|
|
104
|
-
:preferred_inventory_provider_failure_policy,
|
|
105
|
-
:preferred_payout_provider,
|
|
106
|
-
:preferred_default_payouts_schedule_interval,
|
|
107
|
-
:preferred_default_minimum_payout_amount,
|
|
108
|
-
:preferred_auto_approve_sellers,
|
|
109
|
-
:preferred_auto_approve_seller_products,
|
|
110
|
-
:preferred_send_seller_transactional_emails,
|
|
111
|
-
:preferred_default_commission_tax_rate,
|
|
112
|
-
:preferred_document_number_format,
|
|
113
|
-
:preferred_order_number_prefix,
|
|
114
|
-
:preferred_order_number_suffix,
|
|
115
|
-
:preferred_order_number_sequence_start,
|
|
116
|
-
:mail_from_address,
|
|
117
|
-
:customer_support_email,
|
|
118
|
-
:new_order_notifications_email,
|
|
119
|
-
:preferred_send_consumer_transactional_emails,
|
|
120
|
-
:mailer_logo
|
|
121
|
-
)
|
|
195
|
+
params.permit(*declared_permitted_attributes, *Array(Spree::Store.additional_permitted_attributes))
|
|
122
196
|
end
|
|
123
197
|
end
|
|
124
198
|
end
|
|
@@ -63,9 +63,6 @@ module Spree
|
|
|
63
63
|
)
|
|
64
64
|
|
|
65
65
|
rows.map do |currency, amount, used, authorized|
|
|
66
|
-
# `SUM` answers an Integer on a whole-number total, and these
|
|
67
|
-
# totals render beside rows that serialize decimal strings — so
|
|
68
|
-
# "50" must not appear against their "50.0".
|
|
69
66
|
figures = {
|
|
70
67
|
amount: amount.to_d,
|
|
71
68
|
amount_used: used.to_d,
|
|
@@ -74,10 +71,7 @@ module Spree
|
|
|
74
71
|
figures[:amount_remaining] =
|
|
75
72
|
figures[:amount] - figures[:amount_used] - figures[:amount_authorized]
|
|
76
73
|
|
|
77
|
-
|
|
78
|
-
transform_values { |value| Spree::Money.new(value, currency: currency).to_s }
|
|
79
|
-
|
|
80
|
-
{ currency: currency }.merge(figures.transform_values(&:to_s)).merge(displays)
|
|
74
|
+
{ currency: currency }.merge(figures.transform_values { |value| Spree::Money::Rounding.format(value, currency) })
|
|
81
75
|
end
|
|
82
76
|
end
|
|
83
77
|
end
|
|
@@ -8,6 +8,22 @@ module Spree
|
|
|
8
8
|
class SuppliersController < ResourceController
|
|
9
9
|
scoped_resource :purchasing
|
|
10
10
|
|
|
11
|
+
request_params :supplier do |body|
|
|
12
|
+
body.attribute :name, :string, required: true, on: :create, example: 'Northwind Trading'
|
|
13
|
+
body.attribute :contact_name, :string, nullable: true, example: 'Dana Okafor'
|
|
14
|
+
body.attribute :email, :string, nullable: true, example: 'sales@northwind.test'
|
|
15
|
+
body.attribute :phone, :string, nullable: true, example: '555-0100'
|
|
16
|
+
body.attribute :notes, :string, nullable: true
|
|
17
|
+
body.attribute :address1, :string, nullable: true, example: '1 Warehouse Way'
|
|
18
|
+
body.attribute :address2, :string, nullable: true
|
|
19
|
+
body.attribute :city, :string, nullable: true, example: 'Brooklyn'
|
|
20
|
+
body.attribute :state_name, :string, nullable: true
|
|
21
|
+
body.attribute :state_code, :string, nullable: true, example: 'NY'
|
|
22
|
+
body.attribute :country_code, :country, nullable: true, example: 'US'
|
|
23
|
+
body.attribute :postal_code, :string, nullable: true, example: '11201'
|
|
24
|
+
body.attribute :metadata, :hash, nullable: true
|
|
25
|
+
end
|
|
26
|
+
|
|
11
27
|
protected
|
|
12
28
|
|
|
13
29
|
def model_class
|
|
@@ -17,12 +33,6 @@ module Spree
|
|
|
17
33
|
def serializer_class
|
|
18
34
|
Spree.api.admin_supplier_serializer
|
|
19
35
|
end
|
|
20
|
-
|
|
21
|
-
def resource_permitted_attributes
|
|
22
|
-
[:name, :contact_name, :email, :phone, :notes,
|
|
23
|
-
:address1, :address2, :city, :state_name, :state_code,
|
|
24
|
-
:country_code, :postal_code, { metadata: {} }]
|
|
25
|
-
end
|
|
26
36
|
end
|
|
27
37
|
end
|
|
28
38
|
end
|
|
@@ -45,16 +45,19 @@ module Spree
|
|
|
45
45
|
|
|
46
46
|
private
|
|
47
47
|
|
|
48
|
+
# The class name taggings store for the requested shorthand
|
|
49
|
+
# (`product` → `Spree::Product`), or nil when it is not taggable.
|
|
48
50
|
def taggable_type
|
|
49
|
-
params[:taggable_type]
|
|
51
|
+
@taggable_type ||= Spree::Base.polymorphic_type_for(params[:taggable_type], allowed_taggable_types)
|
|
50
52
|
end
|
|
51
53
|
|
|
52
54
|
def valid_taggable_type?
|
|
53
|
-
return true if
|
|
55
|
+
return true if taggable_type
|
|
54
56
|
|
|
57
|
+
allowed = allowed_taggable_types.map { |type| Spree::Base.polymorphic_api_type(type) }
|
|
55
58
|
render_error(
|
|
56
59
|
code: 'invalid_taggable_type',
|
|
57
|
-
message: "taggable_type must be one of #{
|
|
60
|
+
message: "taggable_type must be one of #{allowed.join(', ')}",
|
|
58
61
|
status: :unprocessable_content
|
|
59
62
|
)
|
|
60
63
|
false
|
|
@@ -83,7 +86,7 @@ module Spree
|
|
|
83
86
|
# admins are gated by store membership + CanCanCan, not scopes.
|
|
84
87
|
def authorize_taggable_scope!
|
|
85
88
|
return unless current_api_key
|
|
86
|
-
return unless
|
|
89
|
+
return unless taggable_type
|
|
87
90
|
|
|
88
91
|
required = self.class.scope_for_taggable_type.fetch(taggable_type, 'read_all')
|
|
89
92
|
return if current_api_key.has_scope?(required)
|
|
@@ -101,7 +104,7 @@ module Spree
|
|
|
101
104
|
# list in an initializer without overriding this controller:
|
|
102
105
|
# Spree.taggable_types << 'MyApp::Seller'
|
|
103
106
|
def allowed_taggable_types
|
|
104
|
-
Spree.taggable_types
|
|
107
|
+
Spree.taggable_types.map(&:to_s)
|
|
105
108
|
end
|
|
106
109
|
end
|
|
107
110
|
end
|
|
@@ -5,6 +5,13 @@ module Spree
|
|
|
5
5
|
class TaxCategoriesController < ResourceController
|
|
6
6
|
scoped_resource :settings
|
|
7
7
|
|
|
8
|
+
request_params :tax_category do |body|
|
|
9
|
+
body.attribute :name, :string, required: true, on: :create
|
|
10
|
+
body.attribute :tax_code, :string, nullable: true
|
|
11
|
+
body.attribute :description, :string, nullable: true
|
|
12
|
+
body.attribute :is_default, :boolean
|
|
13
|
+
end
|
|
14
|
+
|
|
8
15
|
protected
|
|
9
16
|
|
|
10
17
|
def model_class
|
|
@@ -14,10 +21,6 @@ module Spree
|
|
|
14
21
|
def serializer_class
|
|
15
22
|
Spree.api.admin_tax_category_serializer
|
|
16
23
|
end
|
|
17
|
-
|
|
18
|
-
def resource_permitted_attributes
|
|
19
|
-
[:name, :tax_code, :description, :is_default]
|
|
20
|
-
end
|
|
21
24
|
end
|
|
22
25
|
end
|
|
23
26
|
end
|
|
@@ -7,6 +7,26 @@ module Spree
|
|
|
7
7
|
class TaxRatesController < ResourceController
|
|
8
8
|
scoped_resource :settings
|
|
9
9
|
|
|
10
|
+
request_params :tax_rate do |body|
|
|
11
|
+
body.attribute :name, :string, required: true, on: :create, example: 'VAT', description: 'Customer-facing rate name.'
|
|
12
|
+
body.attribute :rate, :decimal,
|
|
13
|
+
example: '0.19',
|
|
14
|
+
description: 'The rate as a fraction. Send this or `rate_percent`.'
|
|
15
|
+
body.attribute :rate_percent, :decimal, example: '19', description: 'The rate as a percentage.'
|
|
16
|
+
body.attribute :included_in_price, :boolean
|
|
17
|
+
body.attribute :show_rate_in_label, :boolean
|
|
18
|
+
body.attribute :tax_category_id, :id, required: true, on: :create
|
|
19
|
+
body.attribute :country_code, :country,
|
|
20
|
+
nullable: true,
|
|
21
|
+
example: 'DE',
|
|
22
|
+
description: 'ISO country code. A rate naming no country taxes everywhere.'
|
|
23
|
+
body.attribute :state_code, :string,
|
|
24
|
+
nullable: true,
|
|
25
|
+
example: 'CA',
|
|
26
|
+
description: 'State abbreviation within that country.'
|
|
27
|
+
body.attribute :metadata, :hash
|
|
28
|
+
end
|
|
29
|
+
|
|
10
30
|
protected
|
|
11
31
|
|
|
12
32
|
def model_class
|
|
@@ -22,9 +42,7 @@ module Spree
|
|
|
22
42
|
end
|
|
23
43
|
|
|
24
44
|
def permitted_params
|
|
25
|
-
params.permit(*
|
|
26
|
-
:show_rate_in_label, :tax_category_id,
|
|
27
|
-
:country_code, :state_code, metadata: {})
|
|
45
|
+
params.permit(*permitted_attributes)
|
|
28
46
|
end
|
|
29
47
|
end
|
|
30
48
|
end
|
|
@@ -13,15 +13,6 @@ module Spree
|
|
|
13
13
|
# resource_type + resource_id, so the controller stays free of
|
|
14
14
|
# per-model branching.
|
|
15
15
|
#
|
|
16
|
-
# POST /api/v3/admin/translations/batch
|
|
17
|
-
# Body:
|
|
18
|
-
# { "translations": [
|
|
19
|
-
# { "resource_type": "option_type", "resource_id": "opt_…",
|
|
20
|
-
# "values": { "de": { "label": "Größe" } } },
|
|
21
|
-
# { "resource_type": "option_value", "resource_id": "optval_…",
|
|
22
|
-
# "values": { "de": { "label": "Klein" } } }
|
|
23
|
-
# ] }
|
|
24
|
-
#
|
|
25
16
|
# All entries succeed or none do — a validation failure on any entry
|
|
26
17
|
# rolls back the whole transaction and returns per-entry detail.
|
|
27
18
|
# The orchestration (resolve → upsert → rollback) lives in
|
|
@@ -34,6 +25,23 @@ module Spree
|
|
|
34
25
|
# which is stricter than the static check and keeps the audit model.
|
|
35
26
|
skip_scope_check!
|
|
36
27
|
|
|
28
|
+
request_params 'TranslationBatchParams' do |body|
|
|
29
|
+
body.attribute :translations, :array,
|
|
30
|
+
required: true,
|
|
31
|
+
as: 'TranslationBatchEntryParams',
|
|
32
|
+
description: 'At least one entry. All entries are saved, or none are.' do |translation|
|
|
33
|
+
translation.attribute :resource_type, :string,
|
|
34
|
+
required: true,
|
|
35
|
+
example: 'option_type',
|
|
36
|
+
description: 'Translatable resource type token, e.g. `option_type`.'
|
|
37
|
+
translation.attribute :resource_id, :id, required: true, example: 'opt_abc123'
|
|
38
|
+
translation.attribute :values, :hash,
|
|
39
|
+
required: true,
|
|
40
|
+
example: { de: { label: 'Größe' } },
|
|
41
|
+
description: 'Translated fields keyed by locale code, then by field name.'
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
37
45
|
# POST /api/v3/admin/translations/batch
|
|
38
46
|
def create
|
|
39
47
|
raw = params[:translations]
|
|
@@ -31,6 +31,11 @@ module Spree
|
|
|
31
31
|
|
|
32
32
|
protected
|
|
33
33
|
|
|
34
|
+
# The model, and so the filters, follow `resource_type`.
|
|
35
|
+
def filterable?
|
|
36
|
+
false
|
|
37
|
+
end
|
|
38
|
+
|
|
34
39
|
# Resolved from the required `resource_type` param. An unknown or
|
|
35
40
|
# untranslatable type is a 404 rather than a 500 from a nil class.
|
|
36
41
|
def model_class
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Admin
|
|
5
|
+
# Whether a newer Spree release exists, for the dashboard's update
|
|
6
|
+
# notice. Asks spreecloud.io at most once a day (see Spree::UpdateCheck).
|
|
7
|
+
#
|
|
8
|
+
# The only place the Admin API reveals the running Spree version, so it
|
|
9
|
+
# answers signed-in staff who can manage the store and nobody else. A
|
|
10
|
+
# secret API key gets a 404, like GET /me: an integration key would
|
|
11
|
+
# otherwise fingerprint the deployment for anyone matching CVEs.
|
|
12
|
+
class UpdatesController < Admin::BaseController
|
|
13
|
+
skip_scope_check!
|
|
14
|
+
|
|
15
|
+
before_action :require_current_user!
|
|
16
|
+
|
|
17
|
+
# GET /api/v3/admin/updates
|
|
18
|
+
def show
|
|
19
|
+
authorize! :manage, current_store
|
|
20
|
+
|
|
21
|
+
render json: Spree.api.admin_update_status_serializer.new(Spree::UpdateCheck.status).to_h
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
private
|
|
25
|
+
|
|
26
|
+
def require_current_user!
|
|
27
|
+
return if current_user
|
|
28
|
+
|
|
29
|
+
render_error(
|
|
30
|
+
code: ERROR_CODES[:record_not_found],
|
|
31
|
+
message: I18n.t('spree.me_no_current_user'),
|
|
32
|
+
status: :not_found
|
|
33
|
+
)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -8,6 +8,28 @@ module Spree
|
|
|
8
8
|
class WebhookEndpointsController < ResourceController
|
|
9
9
|
scoped_resource :webhooks
|
|
10
10
|
|
|
11
|
+
request_params :webhook_endpoint do |body|
|
|
12
|
+
body.attribute :name, :string,
|
|
13
|
+
nullable: true,
|
|
14
|
+
example: 'Order pipeline',
|
|
15
|
+
description: 'A label shown in the dashboard list.'
|
|
16
|
+
body.attribute :url, :string,
|
|
17
|
+
required: true, on: :create,
|
|
18
|
+
example: 'https://example.com/webhooks/orders',
|
|
19
|
+
description: 'HTTPS destination URL. It cannot resolve to a private IP address outside development.'
|
|
20
|
+
body.attribute :active, :boolean,
|
|
21
|
+
description: 'Defaults to true on create. Prefer the disable and enable endpoints to pause one.'
|
|
22
|
+
body.attribute :subscriptions, :array, of: :string,
|
|
23
|
+
example: %w[order.placed order.canceled],
|
|
24
|
+
description: 'Event names this endpoint receives. An empty list or `["*"]` subscribes to every event; otherwise list exact names (`order.completed`) or patterns (`order.*`).'
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
request_params 'WebhookEndpointDisableParams', action: :disable do |body|
|
|
28
|
+
body.attribute :reason, :string,
|
|
29
|
+
example: 'Investigating elevated 5xx rate',
|
|
30
|
+
description: 'Shown next to the disabled indicator. Defaults to "Manually disabled".'
|
|
31
|
+
end
|
|
32
|
+
|
|
11
33
|
before_action :reject_unauthorized_credential_subscription!, only: [:create, :update]
|
|
12
34
|
|
|
13
35
|
# POST /api/v3/admin/webhook_endpoints/:id/send_test
|
|
@@ -68,32 +90,37 @@ module Spree
|
|
|
68
90
|
end
|
|
69
91
|
|
|
70
92
|
def permitted_params
|
|
71
|
-
params.permit(*
|
|
93
|
+
params.permit(*permitted_attributes)
|
|
72
94
|
end
|
|
73
95
|
|
|
74
96
|
private
|
|
75
97
|
|
|
76
|
-
#
|
|
77
|
-
# webhooks permission alone cannot subscribe an endpoint to
|
|
78
|
-
# repoint an endpoint that already receives
|
|
98
|
+
# A customer's password reset token is an account credential, so the
|
|
99
|
+
# webhooks permission alone cannot subscribe an endpoint to it, or
|
|
100
|
+
# repoint an endpoint that already receives it: that needs the
|
|
101
|
+
# permission the event catalog names for it (`write_customers`).
|
|
79
102
|
def reject_unauthorized_credential_subscription!
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
return if requested.empty? && !repoints_credential_endpoint?
|
|
103
|
+
events = requested_credential_events | repointed_credential_events
|
|
104
|
+
missing = events.reject { |entry| holds_permission?(entry.credential_permission) }
|
|
105
|
+
return if missing.empty?
|
|
84
106
|
|
|
85
107
|
render_error(
|
|
86
108
|
code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:access_denied],
|
|
87
|
-
message: "Receiving #{
|
|
109
|
+
message: "Receiving #{missing.map(&:name).to_sentence} requires the " \
|
|
110
|
+
"#{missing.map(&:credential_permission).uniq.to_sentence} permission",
|
|
88
111
|
status: :forbidden
|
|
89
112
|
)
|
|
90
113
|
end
|
|
91
114
|
|
|
92
|
-
def
|
|
93
|
-
|
|
94
|
-
|
|
115
|
+
def requested_credential_events
|
|
116
|
+
Spree::Events.catalog.credential_events(Array(permitted_params[:subscriptions]))
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def repointed_credential_events
|
|
120
|
+
return [] unless action_name == 'update'
|
|
121
|
+
return [] unless permitted_params.key?(:url) || permitted_params.key?(:subscriptions)
|
|
95
122
|
|
|
96
|
-
current_store.webhook_endpoints.find_by_prefix_id(params[:id])&.
|
|
123
|
+
current_store.webhook_endpoints.find_by_prefix_id(params[:id])&.credential_subscriptions || []
|
|
97
124
|
end
|
|
98
125
|
end
|
|
99
126
|
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Admin
|
|
5
|
+
# The events a webhook endpoint can subscribe to — every event Spree
|
|
6
|
+
# and the installed extensions declare, so the endpoint picker never
|
|
7
|
+
# drifts from what the server really publishes.
|
|
8
|
+
class WebhookEventsController < Admin::BaseController
|
|
9
|
+
scoped_resource :webhooks
|
|
10
|
+
|
|
11
|
+
# GET /api/v3/admin/webhook_events
|
|
12
|
+
def index
|
|
13
|
+
authorize!(:show, Spree::WebhookEndpoint)
|
|
14
|
+
entries = Spree::Events.catalog.webhook_events
|
|
15
|
+
|
|
16
|
+
render json: {
|
|
17
|
+
data: entries.map { |entry| Spree.api.admin_webhook_event_serializer.new(entry).to_h },
|
|
18
|
+
meta: { count: entries.size }
|
|
19
|
+
}
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -12,6 +12,8 @@ module Spree
|
|
|
12
12
|
include Spree::Api::V3::JwtAuthentication
|
|
13
13
|
include Spree::Api::V3::ApiKeyAuthentication
|
|
14
14
|
include Spree::Api::V3::ErrorHandler
|
|
15
|
+
include Spree::Api::V3::MoneyParams
|
|
16
|
+
include Spree::Api::V3::RequestParams
|
|
15
17
|
include Spree::Api::V3::SecurityHeaders
|
|
16
18
|
include Spree::Api::V3::ResourceSerializer
|
|
17
19
|
include Spree::Api::V3::RateLimitHeaders
|
|
@@ -70,6 +72,16 @@ module Spree
|
|
|
70
72
|
request.headers['x-spree-token']
|
|
71
73
|
end
|
|
72
74
|
|
|
75
|
+
# Renders a workflow's result: the serialized record on success, its
|
|
76
|
+
# errors otherwise.
|
|
77
|
+
def render_result(result, status: :ok)
|
|
78
|
+
if result.success?
|
|
79
|
+
render json: serialize_resource(result.value), status: status
|
|
80
|
+
else
|
|
81
|
+
render_result_error(result)
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
73
85
|
# Renders a failed service/workflow Result: validation errors become a
|
|
74
86
|
# 422 field-error payload, anything else a plain service error. Shared
|
|
75
87
|
# by both APIs — Store endpoints surface workflow failures (a rejected
|