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
|
@@ -21,6 +21,39 @@ module Spree
|
|
|
21
21
|
|
|
22
22
|
scoped_resource :orders
|
|
23
23
|
|
|
24
|
+
ADDRESS = Spree::Api::V3::RequestSchema.shape('OrderAddressParams') do |schema|
|
|
25
|
+
schema.attribute :first_name, :string
|
|
26
|
+
schema.attribute :last_name, :string
|
|
27
|
+
schema.attribute :address1, :string
|
|
28
|
+
schema.attribute :city, :string
|
|
29
|
+
schema.attribute :postal_code, :string
|
|
30
|
+
schema.attribute :company, :string, nullable: true
|
|
31
|
+
schema.attribute :address2, :string, nullable: true
|
|
32
|
+
schema.attribute :phone, :string, nullable: true
|
|
33
|
+
schema.attribute :alternative_phone, :string, nullable: true
|
|
34
|
+
schema.attribute :state_code, :string, nullable: true
|
|
35
|
+
schema.attribute :state_name, :string, nullable: true
|
|
36
|
+
schema.attribute :label, :string, nullable: true
|
|
37
|
+
schema.attribute :country_code, :country, example: 'US'
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
request_params 'OrderCancelParams', action: :cancel do |body|
|
|
41
|
+
body.attribute :cancel_reason_id, :id,
|
|
42
|
+
nullable: true,
|
|
43
|
+
description: 'A reason from the order cancellation reasons endpoint.'
|
|
44
|
+
body.attribute :cancel_note, :string, nullable: true, description: 'Free text beside the reason.'
|
|
45
|
+
body.attribute :refund_payments, :boolean,
|
|
46
|
+
description: "Hand back what the buyer paid for this order's goods."
|
|
47
|
+
body.attribute :notify_customer, :boolean, description: 'Email the customer about the cancellation.'
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
request_params 'OrderAddressCorrectionParams', action: :address do |body|
|
|
51
|
+
body.attribute :shipping_address, :object, shape: ADDRESS,
|
|
52
|
+
description: 'Only the lines that change; the rest of the address is carried over.'
|
|
53
|
+
body.attribute :billing_address, :object, shape: ADDRESS,
|
|
54
|
+
description: 'Only the lines that change; the rest of the address is carried over.'
|
|
55
|
+
end
|
|
56
|
+
|
|
24
57
|
before_action :set_resource, only: [:show, :cancel, :address]
|
|
25
58
|
|
|
26
59
|
# PATCH /api/v3/seller/orders/:id/cancel
|
|
@@ -124,10 +157,8 @@ module Spree
|
|
|
124
157
|
# files the address in their book and makes it their default for
|
|
125
158
|
# every later checkout on the marketplace.
|
|
126
159
|
def sent_addresses
|
|
127
|
-
@sent_addresses ||= params.permit(
|
|
128
|
-
|
|
129
|
-
billing_address: address_permitted_keys
|
|
130
|
-
).slice(:shipping_address, :billing_address).reject { |_key, value| value.blank? }
|
|
160
|
+
@sent_addresses ||= params.permit(*declared_permitted_attributes).
|
|
161
|
+
slice(:shipping_address, :billing_address).reject { |_key, value| value.blank? }
|
|
131
162
|
end
|
|
132
163
|
|
|
133
164
|
def corrected_addresses
|
|
@@ -148,16 +179,6 @@ module Spree
|
|
|
148
179
|
(address&.snapshot || Spree::Address.new).tap { |copy| copy.assign_attributes(sent.to_h.except('label', :label)) }
|
|
149
180
|
end
|
|
150
181
|
|
|
151
|
-
def address_permitted_keys
|
|
152
|
-
[
|
|
153
|
-
:firstname, :lastname, :first_name, :last_name,
|
|
154
|
-
:address1, :address2, :city,
|
|
155
|
-
:country_code, :state_code,
|
|
156
|
-
:zipcode, :postal_code, :phone, :alternative_phone,
|
|
157
|
-
:state_name, :company, :label
|
|
158
|
-
]
|
|
159
|
-
end
|
|
160
|
-
|
|
161
182
|
# A request naming neither address has asked for nothing; saying so
|
|
162
183
|
# beats a 200 that changed nothing.
|
|
163
184
|
def missing_address_errors
|
|
@@ -18,6 +18,27 @@ module Spree
|
|
|
18
18
|
class PackageTypesController < Seller::ResourceController
|
|
19
19
|
scoped_resource :package_types
|
|
20
20
|
|
|
21
|
+
# The same set the operator's controller permits — a seller measures
|
|
22
|
+
# their own packaging, so every field on the shared form is theirs
|
|
23
|
+
# to set. `seller_id` is deliberately absent: ownership comes from
|
|
24
|
+
# the authenticated seller, never the payload.
|
|
25
|
+
request_params :package_type do |body|
|
|
26
|
+
body.attribute :name, :string, required: true, on: :create
|
|
27
|
+
body.attribute :kind, :string, choices: Spree::PackageType::KINDS
|
|
28
|
+
body.attribute :length, :number, nullable: true
|
|
29
|
+
body.attribute :width, :number, nullable: true
|
|
30
|
+
body.attribute :height, :number, nullable: true
|
|
31
|
+
body.attribute :dimensions_unit, :string, nullable: true, choices: Spree::Variant::DIMENSION_UNITS
|
|
32
|
+
body.attribute :weight, :number,
|
|
33
|
+
nullable: true,
|
|
34
|
+
description: "The empty package's own weight, added to every quote."
|
|
35
|
+
body.attribute :max_weight, :number, nullable: true
|
|
36
|
+
body.attribute :weight_unit, :string, nullable: true, choices: Spree::Variant::WEIGHT_UNITS
|
|
37
|
+
body.attribute :default, :boolean,
|
|
38
|
+
description: "Makes this the box this seller's parcels are quoted with. One default per seller, so it never displaces the marketplace's."
|
|
39
|
+
body.attribute :metadata, :hash, nullable: true
|
|
40
|
+
end
|
|
41
|
+
|
|
21
42
|
protected
|
|
22
43
|
|
|
23
44
|
def model_class
|
|
@@ -84,15 +105,6 @@ module Spree
|
|
|
84
105
|
Spree::PackageType.arel_table[:name].asc
|
|
85
106
|
)
|
|
86
107
|
end
|
|
87
|
-
|
|
88
|
-
# The same set the operator's controller permits — a seller measures
|
|
89
|
-
# their own packaging, so every field on the shared form is theirs
|
|
90
|
-
# to set. `seller_id` is deliberately absent: ownership comes from
|
|
91
|
-
# the authenticated seller, never the payload.
|
|
92
|
-
def resource_permitted_attributes
|
|
93
|
-
[:name, :kind, :length, :width, :height, :dimensions_unit,
|
|
94
|
-
:weight, :max_weight, :weight_unit, :default, { metadata: {} }]
|
|
95
|
-
end
|
|
96
108
|
end
|
|
97
109
|
end
|
|
98
110
|
end
|
|
@@ -25,6 +25,16 @@ module Spree
|
|
|
25
25
|
store: Rails.cache,
|
|
26
26
|
with: RATE_LIMIT_RESPONSE
|
|
27
27
|
|
|
28
|
+
request_params :password_reset do |body|
|
|
29
|
+
body.attribute :email, :string, required: true, only: :create, example: 'seller@acme.test'
|
|
30
|
+
body.attribute :redirect_url, :string,
|
|
31
|
+
only: :create,
|
|
32
|
+
example: 'https://sellers.your-store.com/reset-password',
|
|
33
|
+
description: 'Must match an allowed origin of the store; ignored otherwise.'
|
|
34
|
+
body.attribute :password, :string, required: true, only: :update, example: 'new-password-123'
|
|
35
|
+
body.attribute :password_confirmation, :string, required: true, only: :update, example: 'new-password-123'
|
|
36
|
+
end
|
|
37
|
+
|
|
28
38
|
# POST /api/v3/seller/auth/password_resets
|
|
29
39
|
def create
|
|
30
40
|
user = Spree.admin_user_class.find_by(email: params[:email])
|
|
@@ -11,6 +11,18 @@ module Spree
|
|
|
11
11
|
class PoliciesController < Seller::ResourceController
|
|
12
12
|
scoped_resource :seller_profile
|
|
13
13
|
|
|
14
|
+
request_params :policy do |body|
|
|
15
|
+
body.attribute :name, :string,
|
|
16
|
+
required: true, on: :create,
|
|
17
|
+
example: 'Shipping Policy',
|
|
18
|
+
description: 'When the marketplace requires a named policy, use that exact name: the onboarding check matches on it.'
|
|
19
|
+
body.attribute :slug, :string, example: 'shipping-policy'
|
|
20
|
+
body.attribute :body, :string,
|
|
21
|
+
nullable: true,
|
|
22
|
+
example: '<p>Orders leave the workshop within two working days.</p>',
|
|
23
|
+
description: 'HTML, sanitized before it is stored. `body_html` on the response is the rendering of what was stored.'
|
|
24
|
+
end
|
|
25
|
+
|
|
14
26
|
protected
|
|
15
27
|
|
|
16
28
|
def model_class
|
|
@@ -21,10 +33,6 @@ module Spree
|
|
|
21
33
|
Spree.api.seller_policy_serializer
|
|
22
34
|
end
|
|
23
35
|
|
|
24
|
-
def resource_permitted_attributes
|
|
25
|
-
[:name, :slug, :body]
|
|
26
|
-
end
|
|
27
|
-
|
|
28
36
|
# Accept slug or prefixed ID, matching the storefront's lookup.
|
|
29
37
|
def find_resource
|
|
30
38
|
if params[:id].to_s.start_with?('pol_')
|
|
@@ -41,8 +41,121 @@ module Spree
|
|
|
41
41
|
'archived' => -> { Spree.product_archive_workflow }
|
|
42
42
|
}.freeze
|
|
43
43
|
|
|
44
|
+
# The operator's price shape, except `currency` may be left out: the
|
|
45
|
+
# store's currency is assumed (see `default_price_currencies`).
|
|
46
|
+
PRICE = Spree::Api::V3::RequestSchema.new do |schema|
|
|
47
|
+
schema.attribute :currency, :currency,
|
|
48
|
+
example: 'USD',
|
|
49
|
+
description: "Omit to price in the store's currency. A seller has no currency of their own."
|
|
50
|
+
schema.attribute :amount, :decimal,
|
|
51
|
+
required: true,
|
|
52
|
+
example: '24.00',
|
|
53
|
+
description: 'A canonical decimal string (`"1234.56"`: period decimal, no grouping). The API does not parse localized input.'
|
|
54
|
+
schema.attribute :compare_at_amount, :decimal, nullable: true, example: '30.00'
|
|
55
|
+
end
|
|
56
|
+
|
|
44
57
|
scoped_resource :products
|
|
45
58
|
|
|
59
|
+
request_params :product do |body|
|
|
60
|
+
body.attribute :name, :string, required: true, on: :create, example: 'Hand-thrown mug'
|
|
61
|
+
body.attribute :description, :string
|
|
62
|
+
body.attribute :slug, :string, example: 'hand-thrown-mug'
|
|
63
|
+
body.attribute :meta_title, :string
|
|
64
|
+
body.attribute :meta_description, :string
|
|
65
|
+
body.attribute :meta_keywords, :string
|
|
66
|
+
body.attribute :metadata, :hash
|
|
67
|
+
body.attribute :product_type_id, :id,
|
|
68
|
+
nullable: true,
|
|
69
|
+
description: "The marketplace's product type this product is listed against, from the product types endpoint. Null detaches it. Saving with a type seeds its option types onto the product."
|
|
70
|
+
body.attribute :delivery_profile_id, :id,
|
|
71
|
+
description: "Which of the marketplace's delivery profiles the product ships under. A new product sent without one lands on the profile marked default."
|
|
72
|
+
body.attribute :prices, :array, of: PRICE,
|
|
73
|
+
description: "Shorthand for a simple (no-options) product: per-currency prices that forward to the product's sole variant."
|
|
74
|
+
# `external_url` stays out for the same reason it does on the
|
|
75
|
+
# operator's endpoint: it would make the server fetch a URL the
|
|
76
|
+
# caller chose.
|
|
77
|
+
body.attribute :media, :array,
|
|
78
|
+
as: 'SellerProductMediaParams',
|
|
79
|
+
description: 'The gallery, as a whole: a file absent from the list is removed. `signed_id` attaches a fresh upload; `id` updates one already there.' do |media_item|
|
|
80
|
+
media_item.attribute :id, :id
|
|
81
|
+
media_item.attribute :signed_id, :string, description: 'A `signed_id` from `POST /files`.'
|
|
82
|
+
media_item.include_attributes Spree::Api::V3::MediaRequestSchema
|
|
83
|
+
media_item.attribute :variant_ids, :array, of: :id,
|
|
84
|
+
description: 'Replaces the variants this media is linked to. An empty list clears them.'
|
|
85
|
+
end
|
|
86
|
+
# Narrower than the operator's variant set: `seller_id` would let a
|
|
87
|
+
# payload hand a variant to somebody else, and
|
|
88
|
+
# `tax_category_id`/`delivery_profile_id` are marketplace
|
|
89
|
+
# configuration.
|
|
90
|
+
body.attribute :variants, :array,
|
|
91
|
+
as: 'SellerProductVariantParams',
|
|
92
|
+
description: 'The variants, as a whole: one absent from the list is removed. Pass `id` to update an existing variant.' do |variant|
|
|
93
|
+
variant.attribute :id, :id
|
|
94
|
+
variant.attribute :sku, :string
|
|
95
|
+
variant.attribute :barcode, :string
|
|
96
|
+
variant.attribute :cost_price, :decimal, nullable: true
|
|
97
|
+
variant.attribute :cost_currency, :currency
|
|
98
|
+
variant.attribute :weight, :number, nullable: true
|
|
99
|
+
variant.attribute :height, :number, nullable: true
|
|
100
|
+
variant.attribute :width, :number, nullable: true
|
|
101
|
+
variant.attribute :depth, :number, nullable: true
|
|
102
|
+
variant.attribute :weight_unit, :string, choices: Spree::Variant::WEIGHT_UNITS
|
|
103
|
+
variant.attribute :dimensions_unit, :string, choices: Spree::Variant::DIMENSION_UNITS
|
|
104
|
+
variant.attribute :hs_code, :string
|
|
105
|
+
variant.attribute :customs_description, :string
|
|
106
|
+
variant.attribute :country_of_origin, :country
|
|
107
|
+
variant.attribute :minimum_order_quantity, :integer, nullable: true
|
|
108
|
+
variant.attribute :order_multiple, :integer, nullable: true
|
|
109
|
+
variant.attribute :purchase_unit, :string
|
|
110
|
+
variant.attribute :units_per_carton, :integer,
|
|
111
|
+
nullable: true,
|
|
112
|
+
description: 'How many units fill one carton.'
|
|
113
|
+
variant.attribute :carton_package_type_id, :id,
|
|
114
|
+
nullable: true,
|
|
115
|
+
description: 'The carton this variant is packed into: a package type of kind `carton`.'
|
|
116
|
+
variant.attribute :carton_weight, :number,
|
|
117
|
+
nullable: true,
|
|
118
|
+
description: "What one packed carton weighs, in the variant's weight unit."
|
|
119
|
+
variant.attribute :cartons_per_pallet, :integer,
|
|
120
|
+
nullable: true,
|
|
121
|
+
description: 'How many cartons stack on one pallet.'
|
|
122
|
+
variant.attribute :track_inventory, :boolean
|
|
123
|
+
variant.attribute :preorderable, :boolean
|
|
124
|
+
variant.attribute :preorder_ships_at, :datetime,
|
|
125
|
+
nullable: true,
|
|
126
|
+
description: 'The "ships by" date shown to customers while the variant is a pre-order. Null clears it.'
|
|
127
|
+
variant.attribute :backorder_limit, :integer,
|
|
128
|
+
nullable: true,
|
|
129
|
+
description: 'Maximum units sellable beyond available stock, capping backorders and pre-orders. Null is unlimited.'
|
|
130
|
+
variant.attribute :position, :integer
|
|
131
|
+
variant.attribute :options, :array, of: Spree::Api::V3::VariantOptionRequestSchema,
|
|
132
|
+
description: 'One pair per option type the variant takes part in (size, color).'
|
|
133
|
+
variant.attribute :prices, :array, of: PRICE, description: 'Per-currency prices. Upserted by currency.'
|
|
134
|
+
variant.attribute :stock_levels, :array, of: Spree::Api::V3::StockLevelRequestSchema,
|
|
135
|
+
description: "Stock per location, at this seller's own locations only: a location belonging to anyone else is ignored."
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
request_params 'ProductBulkSubmitParams', action: :bulk_submit do |body|
|
|
140
|
+
body.attribute :ids, :array, of: :id,
|
|
141
|
+
required: true,
|
|
142
|
+
description: 'Only drafts and rejected listings are submitted; the rest are counted in `skipped_count`.'
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
request_params 'ProductBulkDestroyParams', action: :bulk_destroy do |body|
|
|
146
|
+
body.attribute :ids, :array, of: :id,
|
|
147
|
+
required: true,
|
|
148
|
+
description: "Ids outside this seller's catalog are ignored; products the store refuses to delete are counted in `skipped_count`."
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
request_params 'ProductBulkStatusParams', action: :bulk_status_update do |body|
|
|
152
|
+
body.attribute :ids, :array, of: :id, required: true, example: ['prod_UkLWZg9DAJ']
|
|
153
|
+
body.attribute :status, :string,
|
|
154
|
+
required: true,
|
|
155
|
+
choices: SELLER_BULK_STATUS_WORKFLOWS.keys,
|
|
156
|
+
description: 'A listing goes on sale only when the marketplace approves it, so there is no bulk route onto `active`.'
|
|
157
|
+
end
|
|
158
|
+
|
|
46
159
|
before_action :set_status_resource, only: [:submit, :draft, :archive]
|
|
47
160
|
before_action :require_ids!, only: [:bulk_submit, :bulk_status_update, :bulk_destroy]
|
|
48
161
|
|
|
@@ -165,34 +278,7 @@ module Spree
|
|
|
165
278
|
end
|
|
166
279
|
|
|
167
280
|
def permitted_params
|
|
168
|
-
attrs = params.permit(
|
|
169
|
-
*model_class.additional_seller_permitted_attributes,
|
|
170
|
-
:name, :description, :slug,
|
|
171
|
-
:meta_title, :meta_description, :meta_keywords,
|
|
172
|
-
:product_type_id, :delivery_profile_id,
|
|
173
|
-
metadata: {},
|
|
174
|
-
prices: [:amount, :compare_at_amount, :currency],
|
|
175
|
-
# Inline media, the same shape the operator sends. `external_url`
|
|
176
|
-
# stays out for the same reason it does there — it would make the
|
|
177
|
-
# server fetch a URL the caller chose.
|
|
178
|
-
media: [*Spree::Media::WRITABLE_ATTRIBUTES, :id, :signed_id, { variant_ids: [] }],
|
|
179
|
-
# A seller's variants. Narrower than the operator's set:
|
|
180
|
-
# `seller_id` would let a payload hand a variant to somebody else,
|
|
181
|
-
# and `tax_category_id`/`delivery_profile_id` are marketplace
|
|
182
|
-
# configuration.
|
|
183
|
-
variants: [
|
|
184
|
-
:id, :sku, :barcode,
|
|
185
|
-
:cost_price, :cost_currency,
|
|
186
|
-
:weight, :height, :width, :depth, :weight_unit, :dimensions_unit,
|
|
187
|
-
:hs_code, :country_of_origin, :customs_description,
|
|
188
|
-
:minimum_order_quantity, :order_multiple, :purchase_unit, :units_per_carton,
|
|
189
|
-
:carton_package_type_id, :carton_weight, :cartons_per_pallet,
|
|
190
|
-
:track_inventory, :preorderable, :preorder_ships_at, :backorder_limit, :position,
|
|
191
|
-
options: [:name, :value],
|
|
192
|
-
prices: [:amount, :compare_at_amount, :currency],
|
|
193
|
-
stock_levels: [:id, :stock_location_id, :count_on_hand, :backorderable]
|
|
194
|
-
]
|
|
195
|
-
)
|
|
281
|
+
attrs = params.permit(*permitted_attributes)
|
|
196
282
|
|
|
197
283
|
# Assigned only when present: writing a nil `prices` or
|
|
198
284
|
# `stock_levels` key reaches the association setter as nil, which
|
|
@@ -20,6 +20,38 @@ module Spree
|
|
|
20
20
|
|
|
21
21
|
scoped_resource :seller_profile
|
|
22
22
|
|
|
23
|
+
# Enumerated rather than borrowing the legacy global list, which
|
|
24
|
+
# permits :id, :user_id and :deleted_at.
|
|
25
|
+
request_params 'ProfileUpdateParams' do |body|
|
|
26
|
+
body.attribute :name, :string, example: 'Acme Supplies'
|
|
27
|
+
body.attribute :contact_email, :string, nullable: true, format: :email
|
|
28
|
+
body.attribute :billing_email, :string, nullable: true, format: :email
|
|
29
|
+
body.attribute :about, :string,
|
|
30
|
+
nullable: true,
|
|
31
|
+
description: "Sanitized HTML: the seller's public description."
|
|
32
|
+
body.attribute :legal_name, :string,
|
|
33
|
+
nullable: true,
|
|
34
|
+
description: 'The business a commission invoice is made out to.'
|
|
35
|
+
body.attribute :registration_number, :string, nullable: true
|
|
36
|
+
body.attribute :logo_signed_id, :string,
|
|
37
|
+
nullable: true,
|
|
38
|
+
description: 'A `signed_id` from `POST /files`; `null` removes the image.'
|
|
39
|
+
body.attribute :square_logo_signed_id, :string,
|
|
40
|
+
nullable: true,
|
|
41
|
+
description: 'A `signed_id` from `POST /files`; `null` removes the image.'
|
|
42
|
+
body.attribute :cover_photo_signed_id, :string,
|
|
43
|
+
nullable: true,
|
|
44
|
+
description: 'A `signed_id` from `POST /files`; `null` removes the image.'
|
|
45
|
+
body.attribute :billing_address, :object, as: 'SellerAddressParams' do |billing_address|
|
|
46
|
+
billing_address.include_attributes Spree::Api::V3::AddressRequestSchema
|
|
47
|
+
end
|
|
48
|
+
body.attribute :custom_fields, :array, of: Spree::Api::V3::CustomFieldValueRequestSchema,
|
|
49
|
+
description: "Answers to the custom fields this marketplace's onboarding asks for. A field nothing asked for is ignored rather than written."
|
|
50
|
+
body.attribute :accept_terms, :boolean,
|
|
51
|
+
permit: false,
|
|
52
|
+
description: "Stamps the moment the seller accepted the marketplace's terms. One-way: sending `false` does not unmake the stamp."
|
|
53
|
+
end
|
|
54
|
+
|
|
23
55
|
def show
|
|
24
56
|
render json: serialize_seller
|
|
25
57
|
end
|
|
@@ -54,8 +86,6 @@ module Spree
|
|
|
54
86
|
%w[show]
|
|
55
87
|
end
|
|
56
88
|
|
|
57
|
-
# Enumerated rather than borrowing the legacy global list, which
|
|
58
|
-
# permits :id, :user_id and :deleted_at.
|
|
59
89
|
# Accepting the marketplace's terms is a profile write, not an endpoint
|
|
60
90
|
# of its own: `accept_terms: true` stamps the time, which is what the
|
|
61
91
|
# AcceptTerms requirement reads.
|
|
@@ -104,14 +134,7 @@ module Spree
|
|
|
104
134
|
end
|
|
105
135
|
|
|
106
136
|
def permitted_params
|
|
107
|
-
normalize_params(
|
|
108
|
-
params.permit(:name, :contact_email, :billing_email, :about,
|
|
109
|
-
:legal_name, :registration_number,
|
|
110
|
-
:logo, :square_logo, :cover_photo,
|
|
111
|
-
billing_address: Spree::Api::V3::AddressParams::ADDRESS_KEYS,
|
|
112
|
-
custom_fields: [:id, :custom_field_definition_id, :value,
|
|
113
|
-
{ value: [] }, { value: {} }])
|
|
114
|
-
)
|
|
137
|
+
normalize_params(params.permit(*declared_permitted_attributes))
|
|
115
138
|
end
|
|
116
139
|
|
|
117
140
|
private
|
|
@@ -12,6 +12,16 @@ module Spree
|
|
|
12
12
|
class RequirementSubmissionsController < Seller::BaseController
|
|
13
13
|
scoped_resource :seller_profile
|
|
14
14
|
|
|
15
|
+
# `file_signed_id` comes from POST /files, so the bytes are already in
|
|
16
|
+
# storage by the time this runs.
|
|
17
|
+
request_params 'RequirementSubmissionParams' do |body|
|
|
18
|
+
body.attribute :note, :string, description: 'Anything the seller wants to say alongside the submission.'
|
|
19
|
+
body.attribute :reference, :string,
|
|
20
|
+
description: 'A reference number or external identifier, for requirements that ask for one.'
|
|
21
|
+
body.attribute :file_signed_id, :string,
|
|
22
|
+
description: 'A `signed_id` from `POST /files`, for requirements that ask for a document.'
|
|
23
|
+
end
|
|
24
|
+
|
|
15
25
|
before_action :set_requirement, only: [:create]
|
|
16
26
|
before_action :set_submission, only: [:download]
|
|
17
27
|
|
|
@@ -24,7 +34,7 @@ module Spree
|
|
|
24
34
|
requirement: @requirement,
|
|
25
35
|
note: attributes[:note],
|
|
26
36
|
reference: attributes[:reference],
|
|
27
|
-
file: attributes[:
|
|
37
|
+
file: attributes[:file_signed_id],
|
|
28
38
|
submitted_by: try_spree_current_user
|
|
29
39
|
)
|
|
30
40
|
|
|
@@ -57,11 +67,8 @@ module Spree
|
|
|
57
67
|
|
|
58
68
|
protected
|
|
59
69
|
|
|
60
|
-
# What a seller may say about a requirement. `file` is a direct-upload
|
|
61
|
-
# signed id, so it is a string like the rest — the bytes are already
|
|
62
|
-
# in storage by the time this runs.
|
|
63
70
|
def permitted_params
|
|
64
|
-
params.permit(
|
|
71
|
+
params.permit(*declared_permitted_attributes)
|
|
65
72
|
end
|
|
66
73
|
|
|
67
74
|
def read_actions
|
|
@@ -11,6 +11,7 @@ module Spree
|
|
|
11
11
|
include Spree::Api::V3::Seller::SellerContext
|
|
12
12
|
include Spree::Api::V3::SellerAuthentication
|
|
13
13
|
include Spree::Api::V3::ScopedAuthorization
|
|
14
|
+
include Spree::Api::V3::StrictMoneyParams
|
|
14
15
|
|
|
15
16
|
protected
|
|
16
17
|
|
|
@@ -65,6 +66,17 @@ module Spree
|
|
|
65
66
|
model_class.table_name.delete_prefix('spree_').to_sym
|
|
66
67
|
end
|
|
67
68
|
|
|
69
|
+
# What extensions opened to sellers, never the operator-level list:
|
|
70
|
+
# an attribute opened to operators must not become seller-writable
|
|
71
|
+
# by accident.
|
|
72
|
+
def model_additional_permitted_attributes
|
|
73
|
+
return [] unless respond_to?(:model_class, true)
|
|
74
|
+
|
|
75
|
+
Array(model_class.try(:additional_seller_permitted_attributes))
|
|
76
|
+
rescue NotImplementedError
|
|
77
|
+
[]
|
|
78
|
+
end
|
|
79
|
+
|
|
68
80
|
def authorize_resource!(resource = @resource, action = action_name.to_sym)
|
|
69
81
|
authorize!(action, resource)
|
|
70
82
|
end
|
|
@@ -24,6 +24,49 @@ module Spree
|
|
|
24
24
|
# stock.
|
|
25
25
|
scoped_resource :stock
|
|
26
26
|
|
|
27
|
+
# The same set the operator's controller permits: a seller runs
|
|
28
|
+
# their own warehouse, so every field on the shared form is theirs to
|
|
29
|
+
# set. Anything missing here is dropped by `permit` without a word,
|
|
30
|
+
# and the form would appear to save while quietly discarding it.
|
|
31
|
+
request_params :stock_location do |body|
|
|
32
|
+
body.attribute :name, :string, required: true, on: :create, example: 'Main warehouse'
|
|
33
|
+
body.attribute :admin_name, :string, nullable: true
|
|
34
|
+
body.attribute :active, :boolean, description: 'Set `false` to retire a location: there is no delete.'
|
|
35
|
+
body.attribute :default, :boolean
|
|
36
|
+
body.attribute :kind, :string,
|
|
37
|
+
choices: Spree::StockLocation::KINDS,
|
|
38
|
+
open: true,
|
|
39
|
+
example: 'warehouse',
|
|
40
|
+
description: 'Categorizes the location.'
|
|
41
|
+
body.attribute :propagate_all_variants, :boolean
|
|
42
|
+
body.attribute :backorderable_default, :boolean
|
|
43
|
+
body.attribute :address1, :string, nullable: true
|
|
44
|
+
body.attribute :address2, :string, nullable: true
|
|
45
|
+
body.attribute :city, :string, nullable: true
|
|
46
|
+
body.attribute :zipcode, :string, nullable: true
|
|
47
|
+
body.attribute :phone, :string, nullable: true
|
|
48
|
+
body.attribute :company, :string, nullable: true
|
|
49
|
+
body.attribute :country_code, :country,
|
|
50
|
+
nullable: true,
|
|
51
|
+
example: 'US',
|
|
52
|
+
description: 'ISO-3166 alpha-2 country code.'
|
|
53
|
+
body.attribute :state_code, :string,
|
|
54
|
+
nullable: true,
|
|
55
|
+
example: 'OR',
|
|
56
|
+
description: "State or province abbreviation, resolved against the selected country's states."
|
|
57
|
+
body.attribute :state_name, :string,
|
|
58
|
+
nullable: true,
|
|
59
|
+
description: "Free-text state for countries that don't have a states list."
|
|
60
|
+
body.attribute :pickup_enabled, :boolean
|
|
61
|
+
body.attribute :pickup_stock_policy, :string,
|
|
62
|
+
choices: Spree::StockLocation::PICKUP_STOCK_POLICIES,
|
|
63
|
+
description: '`local` collects only items at this location; `any` lets items transfer in from other locations (ship-to-store).'
|
|
64
|
+
body.attribute :pickup_ready_in_minutes, :integer, nullable: true
|
|
65
|
+
body.attribute :returns_enabled, :boolean,
|
|
66
|
+
description: 'Whether customers may send returns to this location.'
|
|
67
|
+
body.attribute :pickup_instructions, :string, nullable: true
|
|
68
|
+
end
|
|
69
|
+
|
|
27
70
|
protected
|
|
28
71
|
|
|
29
72
|
def model_class
|
|
@@ -34,20 +77,8 @@ module Spree
|
|
|
34
77
|
Spree.api.seller_stock_location_serializer
|
|
35
78
|
end
|
|
36
79
|
|
|
37
|
-
# The same set the operator's controller permits: a seller runs
|
|
38
|
-
# their own warehouse, so every field on the shared form is theirs to
|
|
39
|
-
# set. Anything missing here is dropped by `permit` without a word,
|
|
40
|
-
# and the form would appear to save while quietly discarding it.
|
|
41
80
|
def permitted_params
|
|
42
|
-
params.permit(
|
|
43
|
-
*model_additional_permitted_attributes,
|
|
44
|
-
:name, :admin_name, :active, :default,
|
|
45
|
-
:kind, :propagate_all_variants, :backorderable_default,
|
|
46
|
-
:address1, :address2, :city, :zipcode, :phone, :company,
|
|
47
|
-
:country_code, :state_code, :state_name,
|
|
48
|
-
:pickup_enabled, :pickup_stock_policy, :returns_enabled,
|
|
49
|
-
:pickup_ready_in_minutes, :pickup_instructions
|
|
50
|
-
)
|
|
81
|
+
params.permit(*permitted_attributes)
|
|
51
82
|
end
|
|
52
83
|
end
|
|
53
84
|
end
|
|
@@ -24,6 +24,15 @@ module Spree
|
|
|
24
24
|
# standard actions have to be listed alongside the custom one.
|
|
25
25
|
before_action :set_resource, only: [:show, :update, :destroy, :validate]
|
|
26
26
|
|
|
27
|
+
request_params :seller_tax_identifier do |body|
|
|
28
|
+
body.attribute :kind, :string, required: true, on: :create,
|
|
29
|
+
example: 'eu_vat',
|
|
30
|
+
description: "#{Spree::Api::V3::TaxIdentifierRequestSchema::KIND_DESCRIPTION} One registration per kind."
|
|
31
|
+
body.attribute :value, :string, required: true, on: :create,
|
|
32
|
+
example: 'DE100000008',
|
|
33
|
+
description: 'A number the validator for its kind refuses is rejected rather than stored.'
|
|
34
|
+
end
|
|
35
|
+
|
|
27
36
|
protected
|
|
28
37
|
|
|
29
38
|
def model_class
|
|
@@ -39,7 +48,7 @@ module Spree
|
|
|
39
48
|
end
|
|
40
49
|
|
|
41
50
|
def permitted_params
|
|
42
|
-
params.permit(
|
|
51
|
+
params.permit(*declared_permitted_attributes)
|
|
43
52
|
end
|
|
44
53
|
end
|
|
45
54
|
end
|
|
@@ -16,6 +16,10 @@ module Spree
|
|
|
16
16
|
|
|
17
17
|
before_action :set_member, only: [:destroy]
|
|
18
18
|
|
|
19
|
+
request_params :team_member do |body|
|
|
20
|
+
body.attribute :email, :string, required: true, example: 'colleague@acme.test'
|
|
21
|
+
end
|
|
22
|
+
|
|
19
23
|
def index
|
|
20
24
|
render json: { data: members.map { |member| serialize_member(member) } }
|
|
21
25
|
end
|
|
@@ -16,6 +16,16 @@ module Spree
|
|
|
16
16
|
|
|
17
17
|
skip_before_action :authenticate_user, only: [:create, :refresh, :logout]
|
|
18
18
|
|
|
19
|
+
request_params 'RefreshTokenParams', action: :refresh do |body|
|
|
20
|
+
body.attribute :refresh_token, :string,
|
|
21
|
+
required: true,
|
|
22
|
+
description: 'The refresh token from the login response.'
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
request_params 'LogoutParams', action: :logout do |body|
|
|
26
|
+
body.attribute :refresh_token, :string, description: 'The refresh token to revoke.'
|
|
27
|
+
end
|
|
28
|
+
|
|
19
29
|
# POST /api/v3/store/auth/login
|
|
20
30
|
# Supports multiple authentication providers via :provider param
|
|
21
31
|
# Example:
|
|
@@ -9,6 +9,13 @@ module Spree
|
|
|
9
9
|
|
|
10
10
|
before_action :find_cart!
|
|
11
11
|
|
|
12
|
+
request_params 'ApplyDiscountCodeParams', action: :create do |body|
|
|
13
|
+
body.attribute :code, :string,
|
|
14
|
+
required: true,
|
|
15
|
+
example: 'SAVE10',
|
|
16
|
+
description: 'The promotion code to apply.'
|
|
17
|
+
end
|
|
18
|
+
|
|
12
19
|
# POST /api/v3/store/carts/:cart_id/discount_codes
|
|
13
20
|
# Applies a discount code. A real-but-not-yet-eligible code is
|
|
14
21
|
# accepted and persisted — recalculation activates the discount
|
|
@@ -69,7 +76,7 @@ module Spree
|
|
|
69
76
|
end
|
|
70
77
|
|
|
71
78
|
def permitted_params
|
|
72
|
-
params.permit(
|
|
79
|
+
params.permit(*declared_permitted_attributes)
|
|
73
80
|
end
|
|
74
81
|
end
|
|
75
82
|
end
|
|
@@ -9,6 +9,14 @@ module Spree
|
|
|
9
9
|
|
|
10
10
|
before_action :find_cart!
|
|
11
11
|
|
|
12
|
+
request_params 'UpdateFulfillmentParams', action: :update do |body|
|
|
13
|
+
body.attribute :selected_delivery_rate_id, :id,
|
|
14
|
+
example: 'dr_abc123',
|
|
15
|
+
description: 'The delivery rate to select.'
|
|
16
|
+
body.attribute :pickup_point_external_id, :string,
|
|
17
|
+
description: "For a pickup point delivery method: the provider's id of the point to collect from."
|
|
18
|
+
end
|
|
19
|
+
|
|
12
20
|
# PATCH /api/v3/store/carts/:cart_id/fulfillments/:id
|
|
13
21
|
# Selects a delivery rate, and for pickup_point methods a concrete
|
|
14
22
|
# pickup point (validated against the provider, then frozen into
|
|
@@ -35,7 +43,7 @@ module Spree
|
|
|
35
43
|
private
|
|
36
44
|
|
|
37
45
|
def permitted_params
|
|
38
|
-
params.permit(
|
|
46
|
+
params.permit(*declared_permitted_attributes)
|
|
39
47
|
end
|
|
40
48
|
|
|
41
49
|
def recalculate
|
|
@@ -55,7 +63,7 @@ module Spree
|
|
|
55
63
|
render_error(
|
|
56
64
|
code: ERROR_CODES[:validation_error],
|
|
57
65
|
message: I18n.t('spree.errors.messages.no_pickup_point_provider'),
|
|
58
|
-
status: :
|
|
66
|
+
status: :unprocessable_content
|
|
59
67
|
)
|
|
60
68
|
return false
|
|
61
69
|
end
|
|
@@ -9,6 +9,13 @@ module Spree
|
|
|
9
9
|
|
|
10
10
|
before_action :find_cart!
|
|
11
11
|
|
|
12
|
+
request_params 'ApplyGiftCardParams', action: :create do |body|
|
|
13
|
+
body.attribute :code, :string,
|
|
14
|
+
required: true,
|
|
15
|
+
example: 'GC-ABCD-1234',
|
|
16
|
+
description: 'The gift card code to apply.'
|
|
17
|
+
end
|
|
18
|
+
|
|
12
19
|
# POST /api/v3/store/carts/:cart_id/gift_cards
|
|
13
20
|
def create
|
|
14
21
|
with_order_lock do
|
|
@@ -64,7 +71,7 @@ module Spree
|
|
|
64
71
|
end
|
|
65
72
|
|
|
66
73
|
def permitted_params
|
|
67
|
-
params.permit(
|
|
74
|
+
params.permit(*declared_permitted_attributes)
|
|
68
75
|
end
|
|
69
76
|
end
|
|
70
77
|
end
|