spree_api 6.0.0.rc1 → 6.0.0.rc3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Rakefile +0 -17
- data/app/controllers/concerns/spree/api/v3/admin/product_membership.rb +10 -0
- data/app/controllers/concerns/spree/api/v3/admin/stock_receipt_actions.rb +26 -4
- data/app/controllers/concerns/spree/api/v3/admin/subclassed_resource.rb +14 -28
- data/app/controllers/concerns/spree/api/v3/admin/validation_details.rb +1 -1
- data/app/controllers/concerns/spree/api/v3/cart_resolvable.rb +3 -2
- data/app/controllers/concerns/spree/api/v3/channel_resolution.rb +1 -1
- data/app/controllers/concerns/spree/api/v3/company_address_writes.rb +3 -1
- data/app/controllers/concerns/spree/api/v3/error_handler.rb +48 -2
- data/app/controllers/concerns/spree/api/v3/file_uploads.rb +35 -0
- data/app/controllers/concerns/spree/api/v3/money_params.rb +52 -0
- data/app/controllers/concerns/spree/api/v3/orders/claim_actions.rb +1 -5
- data/app/controllers/concerns/spree/api/v3/orders/delivery_actions.rb +6 -6
- data/app/controllers/concerns/spree/api/v3/orders/exchange_actions.rb +1 -4
- data/app/controllers/concerns/spree/api/v3/orders/fulfillment_actions.rb +1 -5
- data/app/controllers/concerns/spree/api/v3/orders/return_actions.rb +1 -4
- data/app/controllers/concerns/spree/api/v3/orders/shipping_label_actions.rb +5 -21
- data/app/controllers/concerns/spree/api/v3/params_normalizer.rb +5 -0
- data/app/controllers/concerns/spree/api/v3/purchase_serialization.rb +26 -0
- data/app/controllers/concerns/spree/api/v3/request_params.rb +65 -0
- data/app/controllers/concerns/spree/api/v3/store/search_provider_support.rb +8 -3
- data/app/controllers/concerns/spree/api/v3/strict_money_params.rb +94 -0
- data/app/controllers/spree/api/v3/admin/admin_users_controller.rb +10 -1
- data/app/controllers/spree/api/v3/admin/allowed_origins_controller.rb +8 -1
- data/app/controllers/spree/api/v3/admin/api_keys_controller.rb +15 -7
- data/app/controllers/spree/api/v3/admin/base_controller.rb +1 -0
- data/app/controllers/spree/api/v3/admin/catalogs/order_minimums_controller.rb +3 -1
- data/app/controllers/spree/api/v3/admin/catalogs/quantity_rules_controller.rb +7 -5
- data/app/controllers/spree/api/v3/admin/catalogs_controller.rb +60 -33
- data/app/controllers/spree/api/v3/admin/categories/products_controller.rb +4 -1
- data/app/controllers/spree/api/v3/admin/categories_controller.rb +40 -20
- data/app/controllers/spree/api/v3/admin/channels_controller.rb +39 -6
- data/app/controllers/spree/api/v3/admin/claim_reasons_controller.rb +5 -1
- data/app/controllers/spree/api/v3/admin/collections/products_controller.rb +4 -1
- data/app/controllers/spree/api/v3/admin/collections_controller.rb +44 -15
- data/app/controllers/spree/api/v3/admin/commission_rates_controller.rb +60 -12
- data/app/controllers/spree/api/v3/admin/companies/addresses_controller.rb +11 -0
- data/app/controllers/spree/api/v3/admin/companies/memberships_controller.rb +9 -1
- data/app/controllers/spree/api/v3/admin/companies/tax_exemption_certificates_controller.rb +19 -18
- data/app/controllers/spree/api/v3/admin/companies/tax_identifiers_controller.rb +6 -1
- data/app/controllers/spree/api/v3/admin/companies_controller.rb +17 -3
- data/app/controllers/spree/api/v3/admin/countries_controller.rb +5 -1
- data/app/controllers/spree/api/v3/admin/custom_field_definitions_controller.rb +21 -11
- data/app/controllers/spree/api/v3/admin/custom_fields_controller.rb +12 -5
- data/app/controllers/spree/api/v3/admin/customer_groups_controller.rb +9 -1
- data/app/controllers/spree/api/v3/admin/customers/addresses_controller.rb +12 -7
- data/app/controllers/spree/api/v3/admin/customers/store_credits_controller.rb +11 -9
- data/app/controllers/spree/api/v3/admin/customers/tax_identifiers_controller.rb +6 -1
- data/app/controllers/spree/api/v3/admin/customers_controller.rb +35 -7
- data/app/controllers/spree/api/v3/admin/data_requests_controller.rb +8 -0
- data/app/controllers/spree/api/v3/admin/delivery_method_rules_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/delivery_methods/rules_controller.rb +15 -7
- data/app/controllers/spree/api/v3/admin/delivery_methods_controller.rb +92 -57
- data/app/controllers/spree/api/v3/admin/delivery_profiles/origin_groups_controller.rb +8 -1
- data/app/controllers/spree/api/v3/admin/delivery_profiles_controller.rb +13 -1
- data/app/controllers/spree/api/v3/admin/delivery_zones_controller.rb +21 -5
- data/app/controllers/spree/api/v3/admin/email_templates/drafts_controller.rb +14 -1
- data/app/controllers/spree/api/v3/admin/email_templates/previews_controller.rb +4 -0
- data/app/controllers/spree/api/v3/admin/email_templates/publications_controller.rb +7 -0
- data/app/controllers/spree/api/v3/admin/email_templates/restorations_controller.rb +8 -0
- data/app/controllers/spree/api/v3/admin/email_templates/test_emails_controller.rb +4 -0
- data/app/controllers/spree/api/v3/admin/exports_controller.rb +23 -6
- data/app/controllers/spree/api/v3/admin/files_controller.rb +29 -0
- data/app/controllers/spree/api/v3/admin/gift_card_batches_controller.rb +20 -1
- data/app/controllers/spree/api/v3/admin/gift_cards_controller.rb +19 -1
- data/app/controllers/spree/api/v3/admin/imports_controller.rb +36 -9
- data/app/controllers/spree/api/v3/admin/integrations_controller.rb +13 -1
- data/app/controllers/spree/api/v3/admin/invitation_acceptances_controller.rb +9 -2
- data/app/controllers/spree/api/v3/admin/invitations_controller.rb +8 -1
- data/app/controllers/spree/api/v3/admin/locales_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/markets_controller.rb +30 -9
- data/app/controllers/spree/api/v3/admin/me_controller.rb +12 -3
- data/app/controllers/spree/api/v3/admin/media_controller.rb +22 -9
- data/app/controllers/spree/api/v3/admin/media_library_controller.rb +4 -0
- data/app/controllers/spree/api/v3/admin/option_types_controller.rb +24 -7
- data/app/controllers/spree/api/v3/admin/order_cancellation_reasons_controller.rb +5 -1
- data/app/controllers/spree/api/v3/admin/order_routing_rules_controller.rb +13 -1
- data/app/controllers/spree/api/v3/admin/orders/claims_controller.rb +39 -1
- data/app/controllers/spree/api/v3/admin/orders/deliveries_controller.rb +19 -1
- data/app/controllers/spree/api/v3/admin/orders/discount_codes_controller.rb +5 -1
- data/app/controllers/spree/api/v3/admin/orders/discounts_controller.rb +29 -5
- data/app/controllers/spree/api/v3/admin/orders/exchanges_controller.rb +36 -1
- data/app/controllers/spree/api/v3/admin/orders/fees_controller.rb +22 -1
- data/app/controllers/spree/api/v3/admin/orders/fulfillments_controller.rb +66 -7
- data/app/controllers/spree/api/v3/admin/orders/gift_cards_controller.rb +6 -2
- data/app/controllers/spree/api/v3/admin/orders/items_controller.rb +11 -1
- data/app/controllers/spree/api/v3/admin/orders/labels_controller.rb +35 -2
- data/app/controllers/spree/api/v3/admin/orders/payments_controller.rb +16 -5
- data/app/controllers/spree/api/v3/admin/orders/refunds_controller.rb +6 -0
- data/app/controllers/spree/api/v3/admin/orders/returns_controller.rb +37 -1
- data/app/controllers/spree/api/v3/admin/orders/store_credits_controller.rb +6 -3
- data/app/controllers/spree/api/v3/admin/orders_controller.rb +74 -60
- data/app/controllers/spree/api/v3/admin/package_types_controller.rb +30 -5
- data/app/controllers/spree/api/v3/admin/password_resets_controller.rb +17 -0
- data/app/controllers/spree/api/v3/admin/payment_methods_controller.rb +38 -22
- data/app/controllers/spree/api/v3/admin/policies_controller.rb +8 -4
- data/app/controllers/spree/api/v3/admin/price_lists_controller.rb +27 -15
- data/app/controllers/spree/api/v3/admin/prices_controller.rb +51 -4
- data/app/controllers/spree/api/v3/admin/product_types_controller.rb +25 -8
- data/app/controllers/spree/api/v3/admin/products/digital_assets_controller.rb +27 -10
- data/app/controllers/spree/api/v3/admin/products/variants_controller.rb +9 -14
- data/app/controllers/spree/api/v3/admin/products_controller.rb +121 -70
- data/app/controllers/spree/api/v3/admin/promotion_actions_controller.rb +11 -2
- data/app/controllers/spree/api/v3/admin/promotion_rules_controller.rb +10 -1
- data/app/controllers/spree/api/v3/admin/promotions_controller.rb +50 -14
- data/app/controllers/spree/api/v3/admin/purchase_orders_controller.rb +54 -7
- data/app/controllers/spree/api/v3/admin/refund_reasons_controller.rb +5 -1
- data/app/controllers/spree/api/v3/admin/reporting/saved_reports_controller.rb +9 -1
- data/app/controllers/spree/api/v3/admin/reporting_controller.rb +34 -0
- data/app/controllers/spree/api/v3/admin/resource_controller.rb +1 -0
- data/app/controllers/spree/api/v3/admin/return_reasons_controller.rb +5 -1
- data/app/controllers/spree/api/v3/admin/roles_controller.rb +13 -1
- data/app/controllers/spree/api/v3/admin/seller_payouts_controller.rb +6 -0
- data/app/controllers/spree/api/v3/admin/seller_requirement_submissions_controller.rb +15 -0
- data/app/controllers/spree/api/v3/admin/seller_requirements_controller.rb +32 -6
- data/app/controllers/spree/api/v3/admin/sellers_controller.rb +75 -22
- data/app/controllers/spree/api/v3/admin/setup_controller.rb +54 -15
- data/app/controllers/spree/api/v3/admin/stock_levels_controller.rb +38 -9
- data/app/controllers/spree/api/v3/admin/stock_locations_controller.rb +41 -9
- data/app/controllers/spree/api/v3/admin/stock_transfers_controller.rb +48 -7
- data/app/controllers/spree/api/v3/admin/store_controller.rb +122 -53
- data/app/controllers/spree/api/v3/admin/store_credits_controller.rb +1 -7
- data/app/controllers/spree/api/v3/admin/suppliers_controller.rb +16 -6
- data/app/controllers/spree/api/v3/admin/tax_categories_controller.rb +7 -4
- data/app/controllers/spree/api/v3/admin/tax_rates_controller.rb +21 -3
- data/app/controllers/spree/api/v3/admin/tracking_carriers_controller.rb +4 -0
- data/app/controllers/spree/api/v3/admin/translations/batches_controller.rb +17 -9
- data/app/controllers/spree/api/v3/admin/translations_controller.rb +4 -0
- data/app/controllers/spree/api/v3/admin/translations_coverage_controller.rb +5 -0
- data/app/controllers/spree/api/v3/admin/updates_controller.rb +39 -0
- data/app/controllers/spree/api/v3/admin/webhook_endpoints_controller.rb +23 -1
- data/app/controllers/spree/api/v3/base_controller.rb +2 -0
- data/app/controllers/spree/api/v3/resource_controller.rb +63 -10
- data/app/controllers/spree/api/v3/seller/auth_controller.rb +8 -0
- data/app/controllers/spree/api/v3/seller/base_controller.rb +1 -0
- data/app/controllers/spree/api/v3/seller/countries_controller.rb +2 -2
- data/app/controllers/spree/api/v3/seller/delivery_methods_controller.rb +49 -60
- data/app/controllers/spree/api/v3/seller/exports_controller.rb +18 -1
- data/app/controllers/spree/api/v3/seller/files_controller.rb +27 -0
- data/app/controllers/spree/api/v3/seller/imports_controller.rb +25 -9
- data/app/controllers/spree/api/v3/seller/invitation_acceptances_controller.rb +9 -1
- data/app/controllers/spree/api/v3/seller/me_controller.rb +14 -3
- data/app/controllers/spree/api/v3/seller/onboarding_controller.rb +11 -0
- data/app/controllers/spree/api/v3/seller/orders/claims_controller.rb +35 -0
- data/app/controllers/spree/api/v3/seller/orders/deliveries_controller.rb +12 -0
- data/app/controllers/spree/api/v3/seller/orders/exchanges_controller.rb +33 -0
- data/app/controllers/spree/api/v3/seller/orders/fulfillments_controller.rb +28 -2
- data/app/controllers/spree/api/v3/seller/orders/labels_controller.rb +22 -1
- data/app/controllers/spree/api/v3/seller/orders/notes_controller.rb +8 -1
- data/app/controllers/spree/api/v3/seller/orders/returns_controller.rb +32 -0
- data/app/controllers/spree/api/v3/seller/orders_controller.rb +35 -14
- data/app/controllers/spree/api/v3/seller/package_types_controller.rb +21 -9
- data/app/controllers/spree/api/v3/seller/password_resets_controller.rb +10 -0
- data/app/controllers/spree/api/v3/seller/policies_controller.rb +12 -4
- data/app/controllers/spree/api/v3/seller/products_controller.rb +114 -28
- data/app/controllers/spree/api/v3/seller/profile_controller.rb +33 -10
- data/app/controllers/spree/api/v3/seller/requirement_submissions_controller.rb +12 -5
- data/app/controllers/spree/api/v3/seller/resource_controller.rb +12 -0
- data/app/controllers/spree/api/v3/seller/stock_locations_controller.rb +44 -13
- data/app/controllers/spree/api/v3/seller/tax_identifiers_controller.rb +10 -1
- data/app/controllers/spree/api/v3/seller/team_controller.rb +4 -0
- data/app/controllers/spree/api/v3/store/auth_controller.rb +10 -0
- data/app/controllers/spree/api/v3/store/carts/discount_codes_controller.rb +8 -1
- data/app/controllers/spree/api/v3/store/carts/fulfillments_controller.rb +10 -2
- data/app/controllers/spree/api/v3/store/carts/gift_cards_controller.rb +8 -1
- data/app/controllers/spree/api/v3/store/carts/items_controller.rb +17 -5
- data/app/controllers/spree/api/v3/store/carts/payment_sessions_controller.rb +20 -6
- data/app/controllers/spree/api/v3/store/carts/payments_controller.rb +11 -0
- data/app/controllers/spree/api/v3/store/carts/po_documents_controller.rb +24 -26
- data/app/controllers/spree/api/v3/store/carts/store_credits_controller.rb +19 -1
- data/app/controllers/spree/api/v3/store/carts/tax_identifiers_controller.rb +5 -1
- data/app/controllers/spree/api/v3/store/carts_controller.rb +54 -47
- data/app/controllers/spree/api/v3/store/companies/addresses_controller.rb +12 -4
- data/app/controllers/spree/api/v3/store/companies/members_controller.rb +4 -0
- data/app/controllers/spree/api/v3/store/companies_controller.rb +5 -1
- data/app/controllers/spree/api/v3/store/company_invitations_controller.rb +9 -1
- data/app/controllers/spree/api/v3/store/customer/addresses_controller.rb +8 -7
- data/app/controllers/spree/api/v3/store/customer/data_requests_controller.rb +5 -0
- data/app/controllers/spree/api/v3/store/customer/password_resets_controller.rb +17 -0
- data/app/controllers/spree/api/v3/store/customer/payment_setup_sessions_controller.rb +10 -5
- data/app/controllers/spree/api/v3/store/customer/tax_identifiers_controller.rb +5 -1
- data/app/controllers/spree/api/v3/store/customers_controller.rb +28 -2
- data/app/controllers/spree/api/v3/store/newsletter_subscribers_controller.rb +22 -0
- data/app/controllers/spree/api/v3/store/orders/claims_controller.rb +11 -2
- data/app/controllers/spree/api/v3/store/orders/returns_controller.rb +10 -1
- data/app/controllers/spree/api/v3/store/orders_controller.rb +47 -10
- data/app/controllers/spree/api/v3/store/products_controller.rb +8 -0
- data/app/controllers/spree/api/v3/store/wishlist_items_controller.rb +10 -4
- data/app/controllers/spree/api/v3/store/wishlists_controller.rb +12 -4
- data/app/request_schemas/spree/api/v3/address_request_schema.rb +27 -0
- data/app/request_schemas/spree/api/v3/admin/address_request_schema.rb +13 -0
- data/app/request_schemas/spree/api/v3/admin/bulk_tags_request_schema.rb +17 -0
- data/app/request_schemas/spree/api/v3/admin/catalog_order_minimum_request_schema.rb +17 -0
- data/app/request_schemas/spree/api/v3/admin/email_template_language_request_schema.rb +17 -0
- data/app/request_schemas/spree/api/v3/admin/email_template_preview_request_schema.rb +32 -0
- data/app/request_schemas/spree/api/v3/admin/price_adjustment_tier_request_schema.rb +21 -0
- data/app/request_schemas/spree/api/v3/admin/price_list_price_request_schema.rb +21 -0
- data/app/request_schemas/spree/api/v3/admin/price_list_rule_request_schema.rb +19 -0
- data/app/request_schemas/spree/api/v3/admin/product_membership_reposition_request_schema.rb +17 -0
- data/app/request_schemas/spree/api/v3/admin/promotion_action_calculator_request_schema.rb +18 -0
- data/app/request_schemas/spree/api/v3/admin/promotion_action_line_item_request_schema.rb +15 -0
- data/app/request_schemas/spree/api/v3/admin/promotion_action_request_schema.rb +19 -0
- data/app/request_schemas/spree/api/v3/admin/promotion_rule_request_schema.rb +22 -0
- data/app/request_schemas/spree/api/v3/admin/reason_request_schema.rb +14 -0
- data/app/request_schemas/spree/api/v3/admin/tax_identifier_request_schema.rb +15 -0
- data/app/request_schemas/spree/api/v3/custom_field_value_request_schema.rb +15 -0
- data/app/request_schemas/spree/api/v3/file_upload_request_schema.rb +20 -0
- data/app/request_schemas/spree/api/v3/media_request_schema.rb +27 -0
- data/app/request_schemas/spree/api/v3/price_request_schema.rb +17 -0
- data/app/request_schemas/spree/api/v3/stock_level_request_schema.rb +18 -0
- data/app/request_schemas/spree/api/v3/store/address_request_schema.rb +31 -0
- data/app/request_schemas/spree/api/v3/tax_identifier_request_schema.rb +18 -0
- data/app/request_schemas/spree/api/v3/variant_option_request_schema.rb +13 -0
- data/app/request_schemas/spree/api/v3/variant_request_schema.rb +52 -0
- data/app/serializers/concerns/spree/api/v3/purchase_summary.rb +48 -0
- data/app/serializers/spree/api/v3/address_serializer.rb +4 -2
- data/app/serializers/spree/api/v3/admin/address_serializer.rb +3 -0
- data/app/serializers/spree/api/v3/admin/applied_promotion_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/admin/cart_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/admin/catalog_order_minimum_serializer.rb +3 -2
- data/app/serializers/spree/api/v3/admin/catalog_price_serializer.rb +3 -4
- data/app/serializers/spree/api/v3/admin/catalog_price_tier_serializer.rb +4 -3
- data/app/serializers/spree/api/v3/admin/channel_serializer.rb +5 -7
- data/app/serializers/spree/api/v3/admin/claim_line_item_serializer.rb +7 -0
- data/app/serializers/spree/api/v3/admin/claim_serializer.rb +5 -0
- data/app/serializers/spree/api/v3/admin/commission_line_serializer.rb +7 -18
- data/app/serializers/spree/api/v3/admin/commission_rate_serializer.rb +7 -11
- data/app/serializers/spree/api/v3/admin/commission_rule_serializer.rb +0 -2
- data/app/serializers/spree/api/v3/admin/country_serializer.rb +4 -0
- data/app/serializers/spree/api/v3/admin/customer_serializer.rb +3 -7
- data/app/serializers/spree/api/v3/admin/delivery_method_rule_serializer.rb +0 -2
- data/app/serializers/spree/api/v3/admin/delivery_method_serializer.rb +14 -10
- data/app/serializers/spree/api/v3/admin/delivery_method_service_serializer.rb +9 -1
- data/app/serializers/spree/api/v3/admin/delivery_rate_serializer.rb +8 -0
- data/app/serializers/spree/api/v3/admin/discount_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/admin/exchange_line_item_serializer.rb +5 -0
- data/app/serializers/spree/api/v3/admin/exchange_serializer.rb +5 -0
- data/app/serializers/spree/api/v3/admin/fee_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/admin/file_upload_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/admin/file_upload_target_serializer.rb +10 -0
- data/app/serializers/spree/api/v3/admin/fulfillment_serializer.rb +13 -11
- data/app/serializers/spree/api/v3/admin/gift_card_serializer.rb +3 -3
- data/app/serializers/spree/api/v3/admin/import_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/admin/integration_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/line_item_serializer.rb +12 -12
- data/app/serializers/spree/api/v3/admin/locale_serializer.rb +13 -0
- data/app/serializers/spree/api/v3/admin/market_serializer.rb +3 -0
- data/app/serializers/spree/api/v3/admin/media_serializer.rb +3 -2
- data/app/serializers/spree/api/v3/admin/order_group_serializer.rb +2 -0
- data/app/serializers/spree/api/v3/admin/order_routing_rule_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/order_serializer.rb +33 -33
- data/app/serializers/spree/api/v3/admin/payment_method_serializer.rb +1 -4
- data/app/serializers/spree/api/v3/admin/payment_serializer.rb +6 -3
- data/app/serializers/spree/api/v3/admin/payment_split_serializer.rb +8 -9
- data/app/serializers/spree/api/v3/admin/price_adjustment_tier_serializer.rb +3 -6
- data/app/serializers/spree/api/v3/admin/price_history_serializer.rb +6 -2
- data/app/serializers/spree/api/v3/admin/price_list_serializer.rb +1 -5
- data/app/serializers/spree/api/v3/admin/price_rule_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/admin/price_serializer.rb +4 -0
- data/app/serializers/spree/api/v3/admin/product_serializer.rb +2 -0
- data/app/serializers/spree/api/v3/admin/promotion_action_serializer.rb +4 -6
- data/app/serializers/spree/api/v3/admin/promotion_rule_serializer.rb +0 -2
- data/app/serializers/spree/api/v3/admin/purchase_order_item_serializer.rb +5 -11
- data/app/serializers/spree/api/v3/admin/purchase_order_serializer.rb +4 -4
- data/app/serializers/spree/api/v3/admin/refund_serializer.rb +7 -3
- data/app/serializers/spree/api/v3/admin/reporting_result_serializer.rb +9 -2
- data/app/serializers/spree/api/v3/admin/return_line_item_serializer.rb +8 -0
- data/app/serializers/spree/api/v3/admin/return_serializer.rb +8 -4
- data/app/serializers/spree/api/v3/admin/seller_balance_serializer.rb +15 -10
- data/app/serializers/spree/api/v3/admin/seller_payout_serializer.rb +3 -5
- data/app/serializers/spree/api/v3/admin/seller_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/admin/seller_transfer_serializer.rb +7 -8
- data/app/serializers/spree/api/v3/admin/shipping_label_serializer.rb +4 -4
- data/app/serializers/spree/api/v3/admin/stock_location_serializer.rb +3 -0
- data/app/serializers/spree/api/v3/admin/stock_movement_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/admin/store_credit_event_serializer.rb +5 -0
- data/app/serializers/spree/api/v3/admin/store_credit_serializer.rb +9 -4
- data/app/serializers/spree/api/v3/admin/store_serializer.rb +17 -98
- data/app/serializers/spree/api/v3/admin/supplier_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/admin/tax_exemption_certificate_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/admin/tax_line_serializer.rb +4 -2
- data/app/serializers/spree/api/v3/admin/tax_rate_serializer.rb +2 -12
- data/app/serializers/spree/api/v3/admin/update_status_serializer.rb +28 -0
- data/app/serializers/spree/api/v3/admin/variant_serializer.rb +7 -3
- data/app/serializers/spree/api/v3/base_serializer.rb +112 -7
- data/app/serializers/spree/api/v3/cart_serializer.rb +16 -30
- data/app/serializers/spree/api/v3/claim_line_item_serializer.rb +5 -13
- data/app/serializers/spree/api/v3/claim_serializer.rb +2 -3
- data/app/serializers/spree/api/v3/country_serializer.rb +2 -1
- data/app/serializers/spree/api/v3/currency_serializer.rb +9 -1
- data/app/serializers/spree/api/v3/customer_serializer.rb +3 -2
- data/app/serializers/spree/api/v3/delivery_rate_serializer.rb +8 -12
- data/app/serializers/spree/api/v3/delivery_zone_member_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/discount_serializer.rb +4 -1
- data/app/serializers/spree/api/v3/exchange_line_item_serializer.rb +2 -8
- data/app/serializers/spree/api/v3/exchange_serializer.rb +2 -3
- data/app/serializers/spree/api/v3/file_upload_serializer.rb +28 -0
- data/app/serializers/spree/api/v3/file_upload_target_serializer.rb +17 -0
- data/app/serializers/spree/api/v3/gift_card_batch_serializer.rb +2 -4
- data/app/serializers/spree/api/v3/gift_card_serializer.rb +4 -2
- data/app/serializers/spree/api/v3/import_serializer.rb +0 -12
- data/app/serializers/spree/api/v3/line_item_serializer.rb +15 -5
- data/app/serializers/spree/api/v3/locale_serializer.rb +3 -1
- data/app/serializers/spree/api/v3/market_serializer.rb +5 -5
- data/app/serializers/spree/api/v3/media_serializer.rb +7 -2
- data/app/serializers/spree/api/v3/order_group_serializer.rb +12 -4
- data/app/serializers/spree/api/v3/order_serializer.rb +5 -23
- data/app/serializers/spree/api/v3/payment_session_serializer.rb +2 -4
- data/app/serializers/spree/api/v3/price_history_serializer.rb +11 -6
- data/app/serializers/spree/api/v3/price_serializer.rb +17 -10
- data/app/serializers/spree/api/v3/product_filter_price_range_serializer.rb +10 -4
- data/app/serializers/spree/api/v3/product_serializer.rb +3 -3
- data/app/serializers/spree/api/v3/refund_serializer.rb +8 -5
- data/app/serializers/spree/api/v3/return_line_item_serializer.rb +3 -11
- data/app/serializers/spree/api/v3/return_serializer.rb +3 -6
- data/app/serializers/spree/api/v3/seller/address_serializer.rb +12 -0
- data/app/serializers/spree/api/v3/seller/balance_serializer.rb +15 -10
- data/app/serializers/spree/api/v3/seller/claim_line_item_serializer.rb +7 -0
- data/app/serializers/spree/api/v3/seller/claim_serializer.rb +5 -0
- data/app/serializers/spree/api/v3/seller/country_serializer.rb +19 -0
- data/app/serializers/spree/api/v3/seller/delivery_method_rule_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/seller/delivery_method_serializer.rb +4 -8
- data/app/serializers/spree/api/v3/seller/delivery_rate_serializer.rb +9 -8
- data/app/serializers/spree/api/v3/seller/exchange_line_item_serializer.rb +5 -0
- data/app/serializers/spree/api/v3/seller/exchange_serializer.rb +5 -0
- data/app/serializers/spree/api/v3/seller/file_upload_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/seller/file_upload_target_serializer.rb +10 -0
- data/app/serializers/spree/api/v3/seller/import_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/seller/media_serializer.rb +2 -5
- data/app/serializers/spree/api/v3/seller/order_line_item_serializer.rb +4 -3
- data/app/serializers/spree/api/v3/seller/order_serializer.rb +16 -16
- data/app/serializers/spree/api/v3/seller/payment_split_serializer.rb +8 -9
- data/app/serializers/spree/api/v3/seller/payout_serializer.rb +2 -4
- data/app/serializers/spree/api/v3/seller/price_history_serializer.rb +12 -0
- data/app/serializers/spree/api/v3/seller/price_serializer.rb +13 -0
- data/app/serializers/spree/api/v3/seller/product_serializer.rb +2 -0
- data/app/serializers/spree/api/v3/seller/profile_serializer.rb +7 -7
- data/app/serializers/spree/api/v3/seller/return_line_item_serializer.rb +8 -0
- data/app/serializers/spree/api/v3/seller/return_serializer.rb +8 -5
- data/app/serializers/spree/api/v3/seller/state_serializer.rb +10 -0
- data/app/serializers/spree/api/v3/seller/stock_location_serializer.rb +3 -0
- data/app/serializers/spree/api/v3/seller/transfer_serializer.rb +6 -7
- data/app/serializers/spree/api/v3/seller/variant_serializer.rb +8 -4
- data/app/serializers/spree/api/v3/stock_location_serializer.rb +8 -1
- data/app/serializers/spree/api/v3/store_credit_event_serializer.rb +1 -3
- data/app/serializers/spree/api/v3/store_credit_serializer.rb +3 -5
- data/app/serializers/spree/api/v3/tax_line_serializer.rb +2 -4
- data/app/serializers/spree/api/v3/variant_serializer.rb +3 -3
- data/app/services/spree/api/v3/filter_predicates.rb +29 -0
- data/app/services/spree/api/v3/filter_table.rb +337 -0
- data/app/services/spree/api/v3/filters_aggregator.rb +2 -2
- data/app/services/spree/api/v3/request_schema.rb +430 -0
- data/app/services/spree/webhooks/deliver_webhook.rb +7 -3
- data/config/initializers/typelizer.rb +1 -1
- data/config/routes.rb +5 -3
- data/lib/spree/api/configuration.rb +5 -0
- data/lib/spree/api/dependencies.rb +7 -6
- data/lib/spree/api/middleware/request_size_limit.rb +24 -3
- data/lib/spree/api/openapi/filter_documentation.rb +136 -0
- data/lib/spree/api/openapi/schema_helper.rb +126 -80
- data/lib/spree/api/preference_families.rb +46 -0
- data/lib/spree/api/preference_types.rb +138 -0
- data/lib/spree/api/typelizer_generation.rb +4 -0
- data/lib/tasks/filters.rake +12 -0
- data/lib/typelizer/open_enums.rb +10 -0
- metadata +60 -10
- data/app/controllers/concerns/spree/api/v3/address_params.rb +0 -17
- data/app/controllers/concerns/spree/api/v3/direct_uploads.rb +0 -35
- data/app/controllers/spree/api/v3/admin/direct_uploads_controller.rb +0 -54
- data/app/controllers/spree/api/v3/seller/direct_uploads_controller.rb +0 -21
|
@@ -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
|
|
@@ -16,7 +16,7 @@ module Spree
|
|
|
16
16
|
# Unpaginated: there are ~250 countries and an address dropdown needs
|
|
17
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
|
|
@@ -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
|
|
@@ -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
|
|
@@ -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
|
|
@@ -17,6 +17,41 @@ module Spree
|
|
|
17
17
|
|
|
18
18
|
before_action :set_resource, only: [:show, :approve, :resolve, :deny, :cancel]
|
|
19
19
|
|
|
20
|
+
request_params :claim do |body|
|
|
21
|
+
body.attribute :items, :array, required: true do |item|
|
|
22
|
+
item.attribute :line_item_id, :id, required: true
|
|
23
|
+
item.attribute :quantity, :integer, required: true
|
|
24
|
+
item.attribute :description, :string, nullable: true
|
|
25
|
+
item.attribute :send_replacement, :boolean
|
|
26
|
+
item.attribute :replacement_variant_id, :id,
|
|
27
|
+
nullable: true,
|
|
28
|
+
description: "One of this seller's own variants."
|
|
29
|
+
item.attribute :refund_amount, :decimal, nullable: true
|
|
30
|
+
end
|
|
31
|
+
body.attribute :reason_id, :id, nullable: true
|
|
32
|
+
body.attribute :memo, :string, nullable: true
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
request_params 'ClaimResolveParams', action: :resolve do |body|
|
|
36
|
+
body.attribute :resolution, :string,
|
|
37
|
+
required: true,
|
|
38
|
+
choices: %w[refund replacement refund_and_replacement]
|
|
39
|
+
body.attribute :refund_method, :string,
|
|
40
|
+
choices: %w[original_payment store_credit],
|
|
41
|
+
description: 'Defaults to `store_credit`.'
|
|
42
|
+
body.attribute :amount, :decimal, nullable: true
|
|
43
|
+
body.attribute :replacement_line_item_ids, :array, of: :id,
|
|
44
|
+
description: 'Which claimed lines to replace. Omit to keep the lines the claim was opened with.'
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
request_params 'ClaimDenyParams', action: :deny do |body|
|
|
48
|
+
body.attribute :reason, :string, description: 'Recorded on the claim for the customer.'
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
request_params 'ClaimCancelParams', action: :cancel do |body|
|
|
52
|
+
body.attribute :reason, :string, description: 'A note on why the claim was canceled.'
|
|
53
|
+
end
|
|
54
|
+
|
|
20
55
|
protected
|
|
21
56
|
|
|
22
57
|
def serializer_class
|
|
@@ -16,6 +16,18 @@ module Spree
|
|
|
16
16
|
class DeliveriesController < BaseController
|
|
17
17
|
include Spree::Api::V3::Orders::DeliveryActions
|
|
18
18
|
|
|
19
|
+
# The permit list itself lives in DeliveryActions, shared with the
|
|
20
|
+
# operator's branch; this declaration documents it.
|
|
21
|
+
request_params :delivery do |body|
|
|
22
|
+
body.attribute :tracking_number, :string,
|
|
23
|
+
required: true, on: :create,
|
|
24
|
+
description: 'A carrier tracking number, a freight PRO or container number, or a full tracking link. A corrected number resets the carrier status to `pending`.'
|
|
25
|
+
body.attribute :carrier, :string,
|
|
26
|
+
description: "Free text; detected from the number's format when omitted."
|
|
27
|
+
body.attribute :service, :string
|
|
28
|
+
body.attribute :tracking_url, :string
|
|
29
|
+
end
|
|
30
|
+
|
|
19
31
|
before_action :set_resource, only: [:show, :update, :destroy]
|
|
20
32
|
|
|
21
33
|
protected
|
|
@@ -17,6 +17,39 @@ module Spree
|
|
|
17
17
|
|
|
18
18
|
before_action :set_resource, only: [:show, :approve, :receive, :fulfill, :cancel]
|
|
19
19
|
|
|
20
|
+
request_params :exchange do |body|
|
|
21
|
+
body.attribute :items, :array, required: true do |item|
|
|
22
|
+
item.attribute :fulfillment_item_id, :id, required: true
|
|
23
|
+
item.attribute :new_variant_id, :id, required: true, description: "One of this seller's own variants."
|
|
24
|
+
item.attribute :quantity, :integer, required: true
|
|
25
|
+
end
|
|
26
|
+
body.attribute :reason_id, :id, nullable: true
|
|
27
|
+
body.attribute :stock_location_id, :id,
|
|
28
|
+
nullable: true,
|
|
29
|
+
description: "One of this seller's own stock locations, where the goods are restocked."
|
|
30
|
+
body.attribute :memo, :string, nullable: true
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
request_params 'ExchangeReceiveParams', action: :receive do |body|
|
|
34
|
+
body.attribute :items, :array,
|
|
35
|
+
description: 'What actually arrived. Omit to receive everything as requested and resellable.' do |item|
|
|
36
|
+
item.attribute :exchange_line_item_id, :id, required: true
|
|
37
|
+
item.attribute :quantity, :integer, required: true
|
|
38
|
+
item.attribute :resellable, :boolean,
|
|
39
|
+
description: 'Goods that cannot be resold are received but never restocked. Defaults to true.'
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
request_params 'ExchangeCancelParams', action: :cancel do |body|
|
|
44
|
+
body.attribute :reason, :string, description: 'A note on why the exchange was canceled.'
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
request_params 'ExchangeFulfillParams', action: :fulfill do |body|
|
|
48
|
+
body.attribute :refund_method, :string,
|
|
49
|
+
choices: %w[original_payment store_credit],
|
|
50
|
+
description: 'Defaults to `store_credit`.'
|
|
51
|
+
end
|
|
52
|
+
|
|
20
53
|
protected
|
|
21
54
|
|
|
22
55
|
def serializer_class
|
|
@@ -23,6 +23,33 @@ module Spree
|
|
|
23
23
|
|
|
24
24
|
before_action :set_resource, only: [:show, :update, :fulfill, :cancel, :split]
|
|
25
25
|
|
|
26
|
+
request_params :fulfillment do |body|
|
|
27
|
+
body.attribute :tracking, :string, nullable: true
|
|
28
|
+
body.attribute :tracking_carrier, :string, nullable: true
|
|
29
|
+
body.attribute :stock_location_id, :id,
|
|
30
|
+
description: "One of this seller's own stock locations; the rates requote from there."
|
|
31
|
+
body.attribute :selected_delivery_rate_id, :id,
|
|
32
|
+
description: 'One of the rates quoted for this parcel from its current origin.'
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
request_params 'FulfillmentFulfillParams', action: :fulfill do |body|
|
|
36
|
+
body.attribute :tracking, :string, description: 'Carrier tracking number.'
|
|
37
|
+
body.attribute :tracking_carrier, :string, description: 'Carrier name.'
|
|
38
|
+
body.attribute :notify_customer, :boolean, description: 'Send the dispatch email (default true).'
|
|
39
|
+
body.attribute :items, :array,
|
|
40
|
+
description: 'Ship only these lines; the rest split onto a new fulfillment.' do |item|
|
|
41
|
+
item.attribute :item_id, :id, required: true, description: 'Prefixed line item ID.'
|
|
42
|
+
item.attribute :quantity, :integer, required: true
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
request_params 'FulfillmentSplitParams', action: :split do |body|
|
|
47
|
+
body.attribute :variant_id, :id, required: true, description: 'The variant being moved out.'
|
|
48
|
+
body.attribute :quantity, :integer, required: true
|
|
49
|
+
body.attribute :stock_location_id, :id,
|
|
50
|
+
description: "One of this seller's own stock locations. Defaults to the source fulfillment's location."
|
|
51
|
+
end
|
|
52
|
+
|
|
26
53
|
protected
|
|
27
54
|
|
|
28
55
|
def serializer_class
|
|
@@ -34,8 +61,7 @@ module Spree
|
|
|
34
61
|
end
|
|
35
62
|
|
|
36
63
|
def permitted_params
|
|
37
|
-
params.permit(
|
|
38
|
-
:selected_delivery_rate_id)
|
|
64
|
+
params.permit(*declared_permitted_attributes)
|
|
39
65
|
end
|
|
40
66
|
|
|
41
67
|
private
|
|
@@ -15,6 +15,27 @@ module Spree
|
|
|
15
15
|
class LabelsController < BaseController
|
|
16
16
|
include Spree::Api::V3::Orders::ShippingLabelActions
|
|
17
17
|
|
|
18
|
+
# The permit list itself lives in ShippingLabelActions, shared with
|
|
19
|
+
# the operator's branch; this declaration documents it.
|
|
20
|
+
request_params :shipping_label do |body|
|
|
21
|
+
body.attribute :file_signed_id, :string,
|
|
22
|
+
required: true,
|
|
23
|
+
description: 'A `signed_id` from `files.upload()`.'
|
|
24
|
+
body.attribute :tracking_number, :string,
|
|
25
|
+
required: true,
|
|
26
|
+
description: 'The number printed on the label.'
|
|
27
|
+
body.attribute :carrier, :string,
|
|
28
|
+
description: "Free text; a forwarder's name is as valid as a carrier slug. Detected from the number when omitted."
|
|
29
|
+
body.attribute :service, :string, description: 'Carrier service the label was bought at.'
|
|
30
|
+
body.attribute :cost, :decimal,
|
|
31
|
+
description: "What the seller paid the carrier. Accounting data only; it never touches the order's shipping charge."
|
|
32
|
+
body.attribute :currency, :currency, description: 'Currency of the cost.'
|
|
33
|
+
body.attribute :file_format, :string,
|
|
34
|
+
choices: %w[pdf png zpl],
|
|
35
|
+
description: 'Taken from the file when omitted.'
|
|
36
|
+
body.attribute :tracking_url, :string, description: 'Tracking page for the consignment the label mints.'
|
|
37
|
+
end
|
|
38
|
+
|
|
18
39
|
before_action :set_resource, only: [:show, :download, :destroy]
|
|
19
40
|
|
|
20
41
|
# POST .../labels
|
|
@@ -24,7 +45,7 @@ module Spree
|
|
|
24
45
|
def create
|
|
25
46
|
authorize!(:create, Spree::ShippingLabel)
|
|
26
47
|
|
|
27
|
-
if label_params[:
|
|
48
|
+
if label_params[:file_signed_id].blank?
|
|
28
49
|
return render_error(
|
|
29
50
|
code: ERROR_CODES[:validation_error],
|
|
30
51
|
message: I18n.t('spree.shipping_labels.errors.file_required'),
|
|
@@ -17,6 +17,13 @@ module Spree
|
|
|
17
17
|
# there is no member record to fetch.
|
|
18
18
|
skip_before_action :set_resource, raise: false
|
|
19
19
|
|
|
20
|
+
request_params 'OrderNotesParams' do |body|
|
|
21
|
+
body.attribute :customer_note, :string, nullable: true, description: 'What the buyer asked for.'
|
|
22
|
+
body.attribute :internal_note, :string,
|
|
23
|
+
nullable: true,
|
|
24
|
+
description: "The seller's own working note, as HTML. Sanitized on save; `internal_note_html` reads it back."
|
|
25
|
+
end
|
|
26
|
+
|
|
20
27
|
# GET /api/v3/seller/orders/:order_id/notes
|
|
21
28
|
def show
|
|
22
29
|
render json: serialize_resource(@order)
|
|
@@ -59,7 +66,7 @@ module Spree
|
|
|
59
66
|
# model sanitizes — the `_html` reader is its round-trip partner,
|
|
60
67
|
# never a write.
|
|
61
68
|
def notes_params
|
|
62
|
-
permitted = params.permit(
|
|
69
|
+
permitted = params.permit(*declared_permitted_attributes)
|
|
63
70
|
|
|
64
71
|
{}.tap do |attributes|
|
|
65
72
|
attributes[:customer_note] = permitted[:customer_note] if params.key?(:customer_note)
|
|
@@ -17,6 +17,38 @@ module Spree
|
|
|
17
17
|
|
|
18
18
|
before_action :set_resource, only: [:show, :approve, :receive, :refund, :cancel]
|
|
19
19
|
|
|
20
|
+
request_params :return do |body|
|
|
21
|
+
body.attribute :items, :array, required: true do |item|
|
|
22
|
+
item.attribute :fulfillment_item_id, :id, required: true
|
|
23
|
+
item.attribute :quantity, :integer, required: true
|
|
24
|
+
end
|
|
25
|
+
body.attribute :reason_id, :id, nullable: true
|
|
26
|
+
body.attribute :stock_location_id, :id,
|
|
27
|
+
nullable: true,
|
|
28
|
+
description: "One of this seller's own stock locations, where the goods are restocked."
|
|
29
|
+
body.attribute :memo, :string, nullable: true
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
request_params 'ReturnReceiveParams', action: :receive do |body|
|
|
33
|
+
body.attribute :items, :array,
|
|
34
|
+
description: 'What actually arrived. Omit to receive everything as requested and resellable.' do |item|
|
|
35
|
+
item.attribute :return_line_item_id, :id, required: true
|
|
36
|
+
item.attribute :quantity, :integer, required: true
|
|
37
|
+
item.attribute :resellable, :boolean, description: 'Defaults to true.'
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
request_params 'ReturnRefundParams', action: :refund do |body|
|
|
42
|
+
body.attribute :amount, :decimal, nullable: true
|
|
43
|
+
body.attribute :refund_method, :string,
|
|
44
|
+
choices: %w[original_payment store_credit],
|
|
45
|
+
description: 'Defaults to `original_payment`.'
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
request_params 'ReturnCancelParams', action: :cancel do |body|
|
|
49
|
+
body.attribute :reason, :string, description: 'A note on why the return was canceled.'
|
|
50
|
+
end
|
|
51
|
+
|
|
20
52
|
protected
|
|
21
53
|
|
|
22
54
|
def serializer_class
|