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
|
@@ -80,7 +80,7 @@ module Spree
|
|
|
80
80
|
# which raises before the controller hook fires and yields 403.
|
|
81
81
|
def destroy
|
|
82
82
|
if @resource.respond_to?(:can_be_deleted?) && !@resource.can_be_deleted?
|
|
83
|
-
message =
|
|
83
|
+
message = I18n.t('spree.api.cannot_delete', model: @resource.class.model_name.human)
|
|
84
84
|
return render_error(
|
|
85
85
|
code: ERROR_CODES[:validation_error],
|
|
86
86
|
message: message,
|
|
@@ -96,6 +96,18 @@ module Spree
|
|
|
96
96
|
|
|
97
97
|
protected
|
|
98
98
|
|
|
99
|
+
# Runs the block's assignments and saves the resource as one unit:
|
|
100
|
+
# assigning a has_one (a calculator, say) on a saved record writes it
|
|
101
|
+
# at once, so anything refused afterwards rolls that back too.
|
|
102
|
+
#
|
|
103
|
+
# @return [Boolean] whether the resource was saved
|
|
104
|
+
def save_atomically
|
|
105
|
+
model_class.transaction do
|
|
106
|
+
yield
|
|
107
|
+
@resource.save || raise(ActiveRecord::Rollback)
|
|
108
|
+
end || false
|
|
109
|
+
end
|
|
110
|
+
|
|
99
111
|
def authenticate_request!
|
|
100
112
|
raise NotImplementedError, "#{self.class} must implement authenticate_request!"
|
|
101
113
|
end
|
|
@@ -272,6 +284,32 @@ module Spree
|
|
|
272
284
|
nil
|
|
273
285
|
end
|
|
274
286
|
|
|
287
|
+
# Whether this endpoint's list filters through Ransack on
|
|
288
|
+
# {#model_class}. An index that ignores `q`, or whose model depends on
|
|
289
|
+
# the request, has no filter table to publish.
|
|
290
|
+
#
|
|
291
|
+
# @return [Boolean]
|
|
292
|
+
def filterable?
|
|
293
|
+
true
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
# Sort keys this endpoint accepts beyond the model's sortable
|
|
297
|
+
# attributes, for a controller that sorts outside Ransack.
|
|
298
|
+
#
|
|
299
|
+
# @return [Array<String>]
|
|
300
|
+
def additional_sort_fields
|
|
301
|
+
[]
|
|
302
|
+
end
|
|
303
|
+
|
|
304
|
+
# Whether this endpoint also filters and sorts on the store's
|
|
305
|
+
# searchable custom fields (`cf_<namespace>_<key>`), which are store
|
|
306
|
+
# data and so cannot be listed in the contract.
|
|
307
|
+
#
|
|
308
|
+
# @return [Boolean]
|
|
309
|
+
def custom_field_filters?
|
|
310
|
+
false
|
|
311
|
+
end
|
|
312
|
+
|
|
275
313
|
# Override in subclass to disable distinct (e.g., for custom sorting with computed columns)
|
|
276
314
|
# @return [Boolean] whether to apply distinct to the collection
|
|
277
315
|
def collection_distinct?
|
|
@@ -297,6 +335,7 @@ module Spree
|
|
|
297
335
|
def ransack_params
|
|
298
336
|
rp = params[:q]&.to_unsafe_h || params[:q] || {}
|
|
299
337
|
rp = decode_prefixed_id_predicates(rp)
|
|
338
|
+
rp = decode_api_type_predicates(rp)
|
|
300
339
|
sort_value = sort_param
|
|
301
340
|
|
|
302
341
|
if sort_value.present?
|
|
@@ -329,6 +368,60 @@ module Spree
|
|
|
329
368
|
end
|
|
330
369
|
end
|
|
331
370
|
|
|
371
|
+
# Filters on a type column take the same shorthand responses carry
|
|
372
|
+
# (`type_eq=orders`, `receivable_type_eq=purchase_order`), translated
|
|
373
|
+
# here to the class name the column stores. Only the model's own STI
|
|
374
|
+
# column and its polymorphic `*_type` columns are translated; any other
|
|
375
|
+
# `*_type` attribute (`media_type`, `key_type`) is a plain value.
|
|
376
|
+
RANSACK_TYPE_PREDICATE_RE = /\A(?<attribute>(?:\w+_)?type)_(?:eq|not_eq|in|not_in)\z/.freeze
|
|
377
|
+
def decode_api_type_predicates(hash)
|
|
378
|
+
return hash unless hash.is_a?(Hash)
|
|
379
|
+
|
|
380
|
+
hash.each_with_object({}) do |(key, value), result|
|
|
381
|
+
resolver = api_type_resolver(RANSACK_TYPE_PREDICATE_RE.match(key.to_s)&.[](:attribute))
|
|
382
|
+
result[key] = if resolver
|
|
383
|
+
resolve_api_type_values(value, resolver)
|
|
384
|
+
elsif value.is_a?(Hash)
|
|
385
|
+
decode_api_type_predicates(value)
|
|
386
|
+
else
|
|
387
|
+
value
|
|
388
|
+
end
|
|
389
|
+
end
|
|
390
|
+
end
|
|
391
|
+
|
|
392
|
+
# A scalar stays a scalar; a list — including the indexed form
|
|
393
|
+
# (`type_in[0]=orders`) that arrives as a hash — becomes an array.
|
|
394
|
+
def resolve_api_type_values(value, resolver)
|
|
395
|
+
case value
|
|
396
|
+
when Hash, Array then (value.is_a?(Hash) ? value.values : value).map { |entry| resolve_api_type_values(entry, resolver) }
|
|
397
|
+
else resolver.call(value.to_s) || value
|
|
398
|
+
end
|
|
399
|
+
end
|
|
400
|
+
|
|
401
|
+
# A `*type` column of {#model_class}, or of a model it reaches through
|
|
402
|
+
# its associations (`payment_method_type`), as the filter tables publish.
|
|
403
|
+
#
|
|
404
|
+
# @param attribute [String, nil]
|
|
405
|
+
# @return [Proc, nil] shorthand → stored class name
|
|
406
|
+
def api_type_resolver(attribute, model = model_class, depth = 0)
|
|
407
|
+
return if attribute.nil? || !model.respond_to?(:api_type_resolver)
|
|
408
|
+
|
|
409
|
+
model.api_type_resolver(attribute) || begin
|
|
410
|
+
return if depth >= Spree::Api::V3::FilterTable::MAX_DEPTH
|
|
411
|
+
|
|
412
|
+
model.reflect_on_all_associations.each do |reflection|
|
|
413
|
+
next if reflection.polymorphic? || !attribute.start_with?("#{reflection.name}_")
|
|
414
|
+
|
|
415
|
+
resolver = api_type_resolver(attribute.delete_prefix("#{reflection.name}_"), reflection.klass, depth + 1)
|
|
416
|
+
return resolver if resolver
|
|
417
|
+
rescue NameError
|
|
418
|
+
# A reflection naming a class this installation does not load.
|
|
419
|
+
next
|
|
420
|
+
end
|
|
421
|
+
nil
|
|
422
|
+
end
|
|
423
|
+
end
|
|
424
|
+
|
|
332
425
|
# Matches both prefixed-FK predicates (`product_id_in`, `tax_category_id_eq`)
|
|
333
426
|
# and the bare-`id` predicates (`id_in`, `id_eq`) on the resource's
|
|
334
427
|
# primary key. Without the bare-id branch, `q[id_in][]=prod_x` would
|
|
@@ -468,9 +561,12 @@ module Spree
|
|
|
468
561
|
resource_permitted_attributes + model_additional_permitted_attributes
|
|
469
562
|
end
|
|
470
563
|
|
|
471
|
-
#
|
|
564
|
+
# The resource's writable attributes: its `request_params`
|
|
565
|
+
# declaration, or an override in the subclass.
|
|
472
566
|
def resource_permitted_attributes
|
|
473
|
-
|
|
567
|
+
return declared_permitted_attributes if request_params_schema
|
|
568
|
+
|
|
569
|
+
raise NotImplementedError, 'Subclass must declare request_params, or implement resource_permitted_attributes or permitted_params'
|
|
474
570
|
end
|
|
475
571
|
|
|
476
572
|
# Attributes extensions have declared on the model via
|
|
@@ -35,6 +35,14 @@ module Spree
|
|
|
35
35
|
skip_before_action :set_current_seller_context, only: [:create, :refresh, :logout, :providers]
|
|
36
36
|
skip_before_action :authenticate_seller!, only: [:create, :refresh, :logout, :providers]
|
|
37
37
|
|
|
38
|
+
request_params 'LoginParams' do |body|
|
|
39
|
+
body.attribute :provider, :string,
|
|
40
|
+
choices: %w[email],
|
|
41
|
+
description: 'The authentication method. Defaults to `email`.'
|
|
42
|
+
body.attribute :email, :string, required: true, example: 'seller@example.com'
|
|
43
|
+
body.attribute :password, :string, required: true, example: 'password123'
|
|
44
|
+
end
|
|
45
|
+
|
|
38
46
|
# POST /api/v3/seller/auth/login
|
|
39
47
|
def create
|
|
40
48
|
strategy = authentication_strategy
|
|
@@ -48,7 +56,7 @@ module Spree
|
|
|
48
56
|
# not enough: without a role on some seller there is no panel to
|
|
49
57
|
# sign in to, and minting a token would hand out an audience the
|
|
50
58
|
# holder can do nothing with.
|
|
51
|
-
return render_authentication_failed(
|
|
59
|
+
return render_authentication_failed(I18n.t('spree.seller_membership_required')) unless user.seller_member?
|
|
52
60
|
|
|
53
61
|
set_refresh_cookie(
|
|
54
62
|
Spree::RefreshToken.create_for(
|
|
@@ -100,7 +108,7 @@ module Spree
|
|
|
100
108
|
clear_refresh_cookie
|
|
101
109
|
return render_error(
|
|
102
110
|
code: ErrorHandler::ERROR_CODES[:access_denied],
|
|
103
|
-
message:
|
|
111
|
+
message: I18n.t('spree.seller_membership_required'),
|
|
104
112
|
status: :forbidden
|
|
105
113
|
)
|
|
106
114
|
end
|
|
@@ -14,9 +14,9 @@ module Spree
|
|
|
14
14
|
# GET /api/v3/seller/countries
|
|
15
15
|
#
|
|
16
16
|
# Unpaginated: there are ~250 countries and an address dropdown needs
|
|
17
|
-
# them all at once, which Pagy's global
|
|
17
|
+
# them all at once, which Pagy's global client_limit would prevent.
|
|
18
18
|
def index
|
|
19
|
-
countries = Spree::Country.all.sort_by(&:
|
|
19
|
+
countries = Spree::Country.all.sort_by(&:iso)
|
|
20
20
|
|
|
21
21
|
render json: {
|
|
22
22
|
data: countries.map { |country| serialize_country(country) },
|
|
@@ -27,7 +27,7 @@ module Spree
|
|
|
27
27
|
private
|
|
28
28
|
|
|
29
29
|
def serialize_country(country)
|
|
30
|
-
Spree.api.
|
|
30
|
+
Spree.api.seller_country_serializer.new(
|
|
31
31
|
country, params: { store: current_store, expand: ['states'] }
|
|
32
32
|
).to_h
|
|
33
33
|
end
|
|
@@ -19,6 +19,42 @@ module Spree
|
|
|
19
19
|
class DeliveryMethodsController < Seller::ResourceController
|
|
20
20
|
scoped_resource :delivery_methods
|
|
21
21
|
|
|
22
|
+
# No provider fields: both are fixed for a seller's method, and
|
|
23
|
+
# permitting them would let a write fail validation for a choice the
|
|
24
|
+
# seller was never offered. No markup either — that prices a
|
|
25
|
+
# carrier's quote, and a seller has no carrier.
|
|
26
|
+
request_params :delivery_method do |body|
|
|
27
|
+
body.attribute :name, :string, required: true, on: :create
|
|
28
|
+
body.attribute :admin_name, :string, nullable: true
|
|
29
|
+
body.attribute :code, :string, nullable: true
|
|
30
|
+
body.attribute :delivery_profile_id, :id, description: "One of the marketplace's delivery profiles."
|
|
31
|
+
body.attribute :delivery_zone_id, :id,
|
|
32
|
+
nullable: true,
|
|
33
|
+
description: 'Narrows where the method ships; null serves everywhere the profile reaches.'
|
|
34
|
+
body.attribute :storefront_visible, :boolean
|
|
35
|
+
body.attribute :tracking_url, :string, nullable: true
|
|
36
|
+
body.attribute :estimated_transit_business_days_min, :integer, nullable: true
|
|
37
|
+
body.attribute :estimated_transit_business_days_max, :integer, nullable: true
|
|
38
|
+
body.attribute :calculator, :object,
|
|
39
|
+
description: "How the method is priced: a type from `/delivery_methods/calculators` and its preferences, per that type's `schema`." do |calculator|
|
|
40
|
+
calculator.attribute :type, :string, example: 'flat_rate'
|
|
41
|
+
calculator.attribute :preferences, :hash, example: { amount: '12.5' }
|
|
42
|
+
end
|
|
43
|
+
# Permitted in `permitted_params`, together with the attributes
|
|
44
|
+
# the seller's rule kinds declare on their own classes.
|
|
45
|
+
body.attribute :rules, :array,
|
|
46
|
+
permit: false,
|
|
47
|
+
as: 'DeliveryMethodRuleParams',
|
|
48
|
+
description: 'Replaces the whole set: a rule dropped here is deleted, so re-send surviving rules with their `id`. An empty list clears every condition.' do |rule|
|
|
49
|
+
rule.attribute :id, :id
|
|
50
|
+
rule.attribute :type, :string,
|
|
51
|
+
required: true,
|
|
52
|
+
description: 'A type from `/delivery_methods/rule_types`.'
|
|
53
|
+
rule.attribute :active, :boolean
|
|
54
|
+
rule.attribute :preferences, :hash
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
22
58
|
# GET /api/v3/seller/delivery_methods/calculators
|
|
23
59
|
# The ways a seller can price a method, with the preference schema
|
|
24
60
|
# each one's form is rendered from.
|
|
@@ -29,7 +65,7 @@ module Spree
|
|
|
29
65
|
{
|
|
30
66
|
type: calculator_class.api_type,
|
|
31
67
|
name: calculator_class.description,
|
|
32
|
-
|
|
68
|
+
schema: calculator_class.preference_json_schema
|
|
33
69
|
}
|
|
34
70
|
end
|
|
35
71
|
|
|
@@ -48,7 +84,7 @@ module Spree
|
|
|
48
84
|
type: klass.api_type,
|
|
49
85
|
name: klass.human_name,
|
|
50
86
|
description: klass.human_description,
|
|
51
|
-
|
|
87
|
+
schema: klass.preference_json_schema
|
|
52
88
|
}
|
|
53
89
|
end
|
|
54
90
|
|
|
@@ -64,9 +100,9 @@ module Spree
|
|
|
64
100
|
@resource.assign_attributes(assignable_params)
|
|
65
101
|
authorize_resource!(@resource, :create)
|
|
66
102
|
rederive_origin_group(@resource)
|
|
67
|
-
|
|
103
|
+
@resource.assign_calculator_attributes(permitted_params[:calculator])
|
|
68
104
|
|
|
69
|
-
if @resource.
|
|
105
|
+
if @resource.save
|
|
70
106
|
render json: serialize_resource(@resource), status: :created
|
|
71
107
|
else
|
|
72
108
|
render_validation_error(@resource.errors)
|
|
@@ -74,11 +110,13 @@ module Spree
|
|
|
74
110
|
end
|
|
75
111
|
|
|
76
112
|
def update
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
113
|
+
saved = save_atomically do
|
|
114
|
+
@resource.assign_attributes(assignable_params)
|
|
115
|
+
rederive_origin_group(@resource)
|
|
116
|
+
@resource.assign_calculator_attributes(permitted_params[:calculator])
|
|
117
|
+
end
|
|
80
118
|
|
|
81
|
-
if
|
|
119
|
+
if saved
|
|
82
120
|
render json: serialize_resource(@resource)
|
|
83
121
|
else
|
|
84
122
|
render_validation_error(@resource.errors)
|
|
@@ -116,19 +154,10 @@ module Spree
|
|
|
116
154
|
action_name == 'show' ? super : resource_scope.find_by_prefix_id!(params[:id])
|
|
117
155
|
end
|
|
118
156
|
|
|
119
|
-
# No provider fields: both are fixed for a seller's method, and
|
|
120
|
-
# permitting them would let a write fail validation for a choice the
|
|
121
|
-
# seller was never offered. No markup either — that prices a
|
|
122
|
-
# carrier's quote, and a seller has no carrier.
|
|
123
157
|
def permitted_params
|
|
124
158
|
params.permit(
|
|
125
|
-
*
|
|
126
|
-
:
|
|
127
|
-
:estimated_transit_business_days_min, :estimated_transit_business_days_max,
|
|
128
|
-
:calculator_type,
|
|
129
|
-
:delivery_profile_id, :delivery_zone_id,
|
|
130
|
-
calculator_preferences: {},
|
|
131
|
-
rules: [:id, :type, :active, { preferences: {} }, *subclassed_rule_attributes]
|
|
159
|
+
*permitted_attributes,
|
|
160
|
+
rules: [*request_params_schema.fields[:rules].schema.permit_list, *subclassed_rule_attributes]
|
|
132
161
|
)
|
|
133
162
|
end
|
|
134
163
|
|
|
@@ -175,7 +204,7 @@ module Spree
|
|
|
175
204
|
# resolves its own pickers.
|
|
176
205
|
def assignable_params
|
|
177
206
|
attributes = permitted_params.except(
|
|
178
|
-
:delivery_profile_id, :delivery_zone_id, :
|
|
207
|
+
:delivery_profile_id, :delivery_zone_id, :calculator, :rules
|
|
179
208
|
)
|
|
180
209
|
|
|
181
210
|
if params.key?(:delivery_profile_id)
|
|
@@ -218,46 +247,6 @@ module Spree
|
|
|
218
247
|
row
|
|
219
248
|
end
|
|
220
249
|
end
|
|
221
|
-
|
|
222
|
-
def assign_calculator(delivery_method)
|
|
223
|
-
calculator_type = permitted_params[:calculator_type]
|
|
224
|
-
preferences = permitted_params[:calculator_preferences]
|
|
225
|
-
|
|
226
|
-
if calculator_type.present? && delivery_method.calculator&.class&.api_type != calculator_type
|
|
227
|
-
registered = Spree::DeliveryMethod.calculators.find do |klass|
|
|
228
|
-
klass.api_type == calculator_type
|
|
229
|
-
end
|
|
230
|
-
unless registered
|
|
231
|
-
delivery_method.errors.add(:calculator_type, :invalid)
|
|
232
|
-
return
|
|
233
|
-
end
|
|
234
|
-
|
|
235
|
-
# Resolved from the registry entry's OWN name, never the
|
|
236
|
-
# request's: nothing user-supplied reaches `constantize`. Going
|
|
237
|
-
# back through the name rather than instantiating `registered`
|
|
238
|
-
# directly is what survives a reload — in development the
|
|
239
|
-
# registry holds a class from an earlier one, and an instance of
|
|
240
|
-
# it fails the association's type check.
|
|
241
|
-
delivery_method.calculator = registered.to_s.constantize.new
|
|
242
|
-
end
|
|
243
|
-
|
|
244
|
-
return if preferences.blank?
|
|
245
|
-
|
|
246
|
-
# A payload may carry preferences without naming a calculator —
|
|
247
|
-
# editing the amount on a method that already has one, or creating
|
|
248
|
-
# with the default. The model only builds the default calculator
|
|
249
|
-
# at validation, so without this the preferences land on nothing
|
|
250
|
-
# and the amount the merchant typed is silently replaced by a free
|
|
251
|
-
# rate.
|
|
252
|
-
delivery_method.ensure_calculator
|
|
253
|
-
return if delivery_method.calculator.nil?
|
|
254
|
-
|
|
255
|
-
preferences.each do |key, value|
|
|
256
|
-
next unless delivery_method.calculator.has_preference?(key)
|
|
257
|
-
|
|
258
|
-
delivery_method.calculator.set_preference(key, value)
|
|
259
|
-
end
|
|
260
|
-
end
|
|
261
250
|
end
|
|
262
251
|
end
|
|
263
252
|
end
|
|
@@ -25,6 +25,23 @@ module Spree
|
|
|
25
25
|
|
|
26
26
|
scoped_resource :exports
|
|
27
27
|
|
|
28
|
+
request_params 'SellerExportCreateParams' do |body|
|
|
29
|
+
body.attribute :type, :string,
|
|
30
|
+
required: true,
|
|
31
|
+
choices: ALLOWED_TYPES,
|
|
32
|
+
description: 'Which dataset to export.'
|
|
33
|
+
body.attribute :record_selection, :string,
|
|
34
|
+
choices: %w[filtered all],
|
|
35
|
+
description: '`filtered` (default) keeps `search_params`; `all` exports everything this seller owns.'
|
|
36
|
+
# Read from the raw params: an arbitrary Ransack hash with nested
|
|
37
|
+
# groupings, which `permit(k: {})` rejects.
|
|
38
|
+
body.attribute :search_params, :hash,
|
|
39
|
+
permit: false,
|
|
40
|
+
description: 'Ransack predicates, the same shape the list endpoints take. Ignored when `record_selection` is `all`.'
|
|
41
|
+
body.attribute :results_url, :string,
|
|
42
|
+
description: "Panel URL the export-done email links back to. Honored only when it matches one of the store's allowed origins."
|
|
43
|
+
end
|
|
44
|
+
|
|
28
45
|
# POST /api/v3/seller/exports
|
|
29
46
|
#
|
|
30
47
|
# Refused before the record is built when the type is not one a
|
|
@@ -140,7 +157,7 @@ module Spree
|
|
|
140
157
|
# `to_unsafe_h`. `:format` is deliberately dropped: only CSV exists,
|
|
141
158
|
# and Rails' request format would otherwise overwrite the enum.
|
|
142
159
|
def permitted_params
|
|
143
|
-
attrs = params.permit(*
|
|
160
|
+
attrs = params.permit(*permitted_attributes)
|
|
144
161
|
raw = params[:search_params]
|
|
145
162
|
attrs[:search_params] = raw.respond_to?(:to_unsafe_h) ? raw.to_unsafe_h : raw if raw.present?
|
|
146
163
|
attrs
|
|
@@ -181,9 +198,9 @@ module Spree
|
|
|
181
198
|
def render_unsupported_type
|
|
182
199
|
render_error(
|
|
183
200
|
code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:validation_error],
|
|
184
|
-
message:
|
|
185
|
-
'api.errors.unsupported_export_type',
|
|
186
|
-
|
|
201
|
+
message: I18n.t(
|
|
202
|
+
'spree.api.errors.unsupported_export_type',
|
|
203
|
+
types: ALLOWED_TYPES.join(', ')
|
|
187
204
|
),
|
|
188
205
|
status: :unprocessable_content
|
|
189
206
|
)
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Seller
|
|
5
|
+
# A file stored here is attached to nothing until the seller sends its
|
|
6
|
+
# `signed_id` to an endpoint that checks the target is theirs, so the
|
|
7
|
+
# narrowest meaningful gate is the seller's own profile, which every
|
|
8
|
+
# member of a seller's team holds.
|
|
9
|
+
class FilesController < Seller::BaseController
|
|
10
|
+
include Spree::Api::V3::FileUploads
|
|
11
|
+
|
|
12
|
+
scoped_resource :seller_profile
|
|
13
|
+
|
|
14
|
+
request_params 'FileUploadCreateParams', action: :create do |body|
|
|
15
|
+
body.include_attributes Spree::Api::V3::FileUploadRequestSchema
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
|
|
20
|
+
def file_upload_serializer
|
|
21
|
+
Spree.api.seller_file_upload_serializer
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -32,10 +32,32 @@ module Spree
|
|
|
32
32
|
|
|
33
33
|
scoped_resource :products
|
|
34
34
|
|
|
35
|
+
request_params 'ImportCreateParams' do |body|
|
|
36
|
+
body.attribute :type, :string, required: true, choices: %w[products]
|
|
37
|
+
body.attribute :attachment_signed_id, :string,
|
|
38
|
+
required: true,
|
|
39
|
+
description: "The `signed_id` of the uploaded CSV, from `POST /files` with `visibility: 'private'`."
|
|
40
|
+
body.attribute :delimiter, :string, description: 'CSV column separator. Defaults to a comma.'
|
|
41
|
+
body.attribute :results_url, :string,
|
|
42
|
+
description: "Absolute URL of the panel's imports view; the import-done email links back to it. Honored only when it matches one of the store's allowed origins."
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
request_params 'ImportCompleteMappingParams', action: :complete_mapping do |body|
|
|
46
|
+
body.attribute :mappings, :array,
|
|
47
|
+
permit: false,
|
|
48
|
+
description: 'Column assignments to apply before processing starts.' do |mapping|
|
|
49
|
+
mapping.attribute :schema_field, :string, required: true, description: 'Canonical schema field name.'
|
|
50
|
+
mapping.attribute :file_column, :string,
|
|
51
|
+
required: true,
|
|
52
|
+
nullable: true,
|
|
53
|
+
description: 'CSV header to read the field from; `null` unmaps the field.'
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
35
57
|
# POST /api/v3/seller/imports
|
|
36
58
|
#
|
|
37
|
-
# `
|
|
38
|
-
# POST /api/v3/seller/
|
|
59
|
+
# `attachment_signed_id` is a signed id from
|
|
60
|
+
# POST /api/v3/seller/files. On success the import is
|
|
39
61
|
# already in `mapping`, carrying the auto-assigned columns.
|
|
40
62
|
def create
|
|
41
63
|
@resource = build_resource
|
|
@@ -59,12 +81,6 @@ module Spree
|
|
|
59
81
|
else
|
|
60
82
|
render_errors(@resource.errors)
|
|
61
83
|
end
|
|
62
|
-
rescue ActiveSupport::MessageVerifier::InvalidSignature
|
|
63
|
-
render_error(
|
|
64
|
-
code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:validation_error],
|
|
65
|
-
message: 'Invalid attachment signed id',
|
|
66
|
-
status: :unprocessable_content
|
|
67
|
-
)
|
|
68
84
|
end
|
|
69
85
|
|
|
70
86
|
# PATCH /api/v3/seller/imports/:id/complete_mapping
|
|
@@ -248,7 +264,7 @@ module Spree
|
|
|
248
264
|
end
|
|
249
265
|
|
|
250
266
|
def permitted_params
|
|
251
|
-
params.permit(*
|
|
267
|
+
params.permit(*permitted_attributes)
|
|
252
268
|
end
|
|
253
269
|
|
|
254
270
|
# The registered Import subclass matching `name`, or nil.
|
|
@@ -22,6 +22,14 @@ module Spree
|
|
|
22
22
|
only: [:lookup, :accept],
|
|
23
23
|
with: -> { render_rate_limited(limit: Spree::Api::Config[:rate_limit_login]) }
|
|
24
24
|
|
|
25
|
+
request_params 'InvitationAcceptParams', action: :accept do |body|
|
|
26
|
+
body.attribute :password, :string,
|
|
27
|
+
description: 'Sets the password of a new account, or confirms the password of an existing one.'
|
|
28
|
+
body.attribute :password_confirmation, :string
|
|
29
|
+
body.attribute :first_name, :string, description: 'Used only when the invitation creates a new account.'
|
|
30
|
+
body.attribute :last_name, :string, description: 'Used only when the invitation creates a new account.'
|
|
31
|
+
end
|
|
32
|
+
|
|
25
33
|
# GET /api/v3/seller/auth/invitations/:id/lookup?token=:token
|
|
26
34
|
def lookup
|
|
27
35
|
return unless load_invitation
|
|
@@ -74,7 +82,7 @@ module Spree
|
|
|
74
82
|
unless @invitation
|
|
75
83
|
render_error(
|
|
76
84
|
code: ErrorHandler::ERROR_CODES[:record_not_found],
|
|
77
|
-
message:
|
|
85
|
+
message: I18n.t('spree.invitation_not_acceptable'),
|
|
78
86
|
status: :not_found
|
|
79
87
|
)
|
|
80
88
|
return false
|
|
@@ -101,7 +109,7 @@ module Spree
|
|
|
101
109
|
|
|
102
110
|
render_error(
|
|
103
111
|
code: ErrorHandler::ERROR_CODES[:authentication_failed],
|
|
104
|
-
message:
|
|
112
|
+
message: I18n.t('spree.invalid_password'),
|
|
105
113
|
status: :unauthorized
|
|
106
114
|
)
|
|
107
115
|
nil
|
|
@@ -111,7 +119,7 @@ module Spree
|
|
|
111
119
|
if params[:password].blank?
|
|
112
120
|
render_error(
|
|
113
121
|
code: ErrorHandler::ERROR_CODES[:parameter_missing],
|
|
114
|
-
message:
|
|
122
|
+
message: I18n.t('spree.password_required_to_create_account'),
|
|
115
123
|
status: :unprocessable_content
|
|
116
124
|
)
|
|
117
125
|
return nil
|
|
@@ -121,7 +129,7 @@ module Spree
|
|
|
121
129
|
end
|
|
122
130
|
|
|
123
131
|
def signup_params(invitation)
|
|
124
|
-
params.permit(
|
|
132
|
+
params.permit(*declared_permitted_attributes).
|
|
125
133
|
merge(email: invitation.email)
|
|
126
134
|
end
|
|
127
135
|
|
|
@@ -16,6 +16,17 @@ module Spree
|
|
|
16
16
|
skip_before_action :set_current_seller_context
|
|
17
17
|
before_action :require_current_user!
|
|
18
18
|
|
|
19
|
+
request_params 'AccountUpdateParams' do |body|
|
|
20
|
+
body.attribute :first_name, :string, example: 'Ada'
|
|
21
|
+
body.attribute :last_name, :string, example: 'Lovelace'
|
|
22
|
+
body.attribute :selected_locale, :string,
|
|
23
|
+
example: 'de',
|
|
24
|
+
description: "The panel's display language, as a code the panel ships."
|
|
25
|
+
body.attribute :avatar_signed_id, :string,
|
|
26
|
+
nullable: true,
|
|
27
|
+
description: 'A `signed_id` from `POST /files` to set the photo, or `null` to remove it. Omit to leave the current one alone.'
|
|
28
|
+
end
|
|
29
|
+
|
|
19
30
|
def show
|
|
20
31
|
render json: me_response
|
|
21
32
|
end
|
|
@@ -27,8 +38,8 @@ module Spree
|
|
|
27
38
|
# seller they are acting for.
|
|
28
39
|
#
|
|
29
40
|
# Distinct from PATCH /profile, which writes the seller business.
|
|
30
|
-
# `
|
|
31
|
-
#
|
|
41
|
+
# `avatar_signed_id` takes a signed id from POST /files to set the
|
|
42
|
+
# photo, or `null` to remove it.
|
|
32
43
|
def update
|
|
33
44
|
if current_user.update(permitted_params)
|
|
34
45
|
render json: me_response
|
|
@@ -40,7 +51,7 @@ module Spree
|
|
|
40
51
|
private
|
|
41
52
|
|
|
42
53
|
def permitted_params
|
|
43
|
-
params.permit(
|
|
54
|
+
params.permit(*declared_permitted_attributes)
|
|
44
55
|
end
|
|
45
56
|
|
|
46
57
|
def me_response
|
|
@@ -83,7 +94,7 @@ module Spree
|
|
|
83
94
|
|
|
84
95
|
render_error(
|
|
85
96
|
code: ErrorHandler::ERROR_CODES[:record_not_found],
|
|
86
|
-
message:
|
|
97
|
+
message: I18n.t('spree.me_no_current_user'),
|
|
87
98
|
status: :not_found
|
|
88
99
|
)
|
|
89
100
|
false
|
|
@@ -12,6 +12,17 @@ module Spree
|
|
|
12
12
|
class OnboardingController < Seller::BaseController
|
|
13
13
|
scoped_resource :seller_profile
|
|
14
14
|
|
|
15
|
+
request_params 'OnboardingPayoutAccountParams', action: :payout_account do |body|
|
|
16
|
+
body.attribute :refresh_url, :string,
|
|
17
|
+
required: true,
|
|
18
|
+
format: :uri,
|
|
19
|
+
description: "Where the provider sends the seller back. Must be on the seller panel's origin; any other address is replaced with the panel's."
|
|
20
|
+
body.attribute :return_url, :string,
|
|
21
|
+
required: true,
|
|
22
|
+
format: :uri,
|
|
23
|
+
description: "Where the provider sends the seller back. Must be on the seller panel's origin; any other address is replaced with the panel's."
|
|
24
|
+
end
|
|
25
|
+
|
|
15
26
|
# GET /api/v3/seller/onboarding
|
|
16
27
|
def show
|
|
17
28
|
render json: onboarding_payload
|