spree_api 5.6.1 → 6.0.0.beta1
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/LICENSE +28 -0
- data/Rakefile +1 -1
- data/app/controllers/concerns/spree/api/v3/address_params.rb +17 -0
- data/app/controllers/concerns/spree/api/v3/admin/product_listing.rb +46 -0
- data/app/controllers/concerns/spree/api/v3/admin/product_membership.rb +110 -0
- data/app/controllers/concerns/spree/api/v3/admin/receivable_actions.rb +68 -0
- data/app/controllers/concerns/spree/api/v3/admin/reporting_authorization.rb +27 -0
- data/app/controllers/concerns/spree/api/v3/admin/role_grant_guard.rb +69 -33
- data/app/controllers/concerns/spree/api/v3/admin/stock_receipt_actions.rb +86 -0
- data/app/controllers/concerns/spree/api/v3/admin/store_context.rb +97 -0
- data/app/controllers/concerns/spree/api/v3/admin/subclassed_resource.rb +12 -6
- data/app/controllers/concerns/spree/api/v3/admin/validation_details.rb +91 -0
- data/app/controllers/concerns/spree/api/v3/admin_authentication.rb +9 -5
- data/app/controllers/concerns/spree/api/v3/api_key_authentication.rb +41 -5
- data/app/controllers/concerns/spree/api/v3/authentication_strategies.rb +48 -0
- data/app/controllers/concerns/spree/api/v3/bulk_operations.rb +4 -6
- data/app/controllers/concerns/spree/api/v3/cart_resolvable.rb +52 -16
- data/app/controllers/concerns/spree/api/v3/company_address_writes.rb +37 -0
- data/app/controllers/concerns/spree/api/v3/current_password_confirmation.rb +41 -0
- data/app/controllers/concerns/spree/api/v3/direct_uploads.rb +35 -0
- data/app/controllers/concerns/spree/api/v3/error_handler.rb +53 -11
- data/app/controllers/concerns/spree/api/v3/idempotent.rb +10 -4
- data/app/controllers/concerns/spree/api/v3/items_payload.rb +54 -0
- data/app/controllers/concerns/spree/api/v3/jwt_authentication.rb +23 -3
- data/app/controllers/concerns/spree/api/v3/key_store_context.rb +31 -0
- data/app/controllers/concerns/spree/api/v3/locale_and_currency.rb +3 -3
- data/app/controllers/concerns/spree/api/v3/order_lock.rb +22 -3
- data/app/controllers/concerns/spree/api/v3/orders/claim_actions.rb +112 -0
- data/app/controllers/concerns/spree/api/v3/orders/delivery_actions.rb +105 -0
- data/app/controllers/concerns/spree/api/v3/orders/exchange_actions.rb +117 -0
- data/app/controllers/concerns/spree/api/v3/orders/fulfillment_actions.rb +157 -0
- data/app/controllers/concerns/spree/api/v3/orders/post_sale_actions.rb +76 -0
- data/app/controllers/concerns/spree/api/v3/orders/return_actions.rb +116 -0
- data/app/controllers/concerns/spree/api/v3/orders/shipping_label_actions.rb +128 -0
- data/app/controllers/concerns/spree/api/v3/params_normalizer.rb +7 -4
- data/app/controllers/concerns/spree/api/v3/permission_serialization.rb +42 -0
- data/app/controllers/concerns/spree/api/v3/rate_limit_headers.rb +40 -6
- data/app/controllers/concerns/spree/api/v3/scoped_authorization.rb +80 -26
- data/app/controllers/concerns/spree/api/v3/seller/auth_cookies.rb +62 -0
- data/app/controllers/concerns/spree/api/v3/seller/seller_context.rb +127 -0
- data/app/controllers/concerns/spree/api/v3/seller_authentication.rb +40 -0
- data/app/controllers/concerns/spree/api/v3/storefront_access.rb +38 -0
- data/app/controllers/concerns/spree/api/v3/streams_shipping_label.rb +37 -0
- data/app/controllers/concerns/spree/api/v3/tax_identifier_validation.rb +41 -0
- data/app/controllers/spree/api/v3/admin/admin_users_controller.rb +11 -14
- data/app/controllers/spree/api/v3/admin/allowed_origins_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/api_keys_controller.rb +16 -7
- data/app/controllers/spree/api/v3/admin/auth_controller.rb +138 -22
- data/app/controllers/spree/api/v3/admin/base_controller.rb +2 -0
- data/app/controllers/spree/api/v3/admin/catalog_assignments_controller.rb +27 -0
- data/app/controllers/spree/api/v3/admin/catalogs/base_controller.rb +29 -0
- data/app/controllers/spree/api/v3/admin/catalogs/order_minimums_controller.rb +40 -0
- data/app/controllers/spree/api/v3/admin/catalogs/products_controller.rb +107 -0
- data/app/controllers/spree/api/v3/admin/catalogs/quantity_rules_controller.rb +75 -0
- data/app/controllers/spree/api/v3/admin/catalogs_controller.rb +191 -0
- data/app/controllers/spree/api/v3/admin/categories/products_controller.rb +28 -41
- data/app/controllers/spree/api/v3/admin/categories_controller.rb +16 -7
- data/app/controllers/spree/api/v3/admin/channels_controller.rb +50 -2
- data/app/controllers/spree/api/v3/admin/claim_reasons_controller.rb +25 -0
- data/app/controllers/spree/api/v3/admin/claims_controller.rb +31 -0
- data/app/controllers/spree/api/v3/admin/collection_rules_controller.rb +40 -0
- data/app/controllers/spree/api/v3/admin/collections/products_controller.rb +101 -0
- data/app/controllers/spree/api/v3/admin/collections_controller.rb +56 -0
- data/app/controllers/spree/api/v3/admin/commission_lines_controller.rb +39 -0
- data/app/controllers/spree/api/v3/admin/commission_rates_controller.rb +174 -0
- data/app/controllers/spree/api/v3/admin/companies/addresses_controller.rb +65 -0
- data/app/controllers/spree/api/v3/admin/companies/base_controller.rb +29 -0
- data/app/controllers/spree/api/v3/admin/companies/invitations_controller.rb +56 -0
- data/app/controllers/spree/api/v3/admin/companies/memberships_controller.rb +66 -0
- data/app/controllers/spree/api/v3/admin/companies/tax_exemption_certificates_controller.rb +137 -0
- data/app/controllers/spree/api/v3/admin/companies/tax_identifiers_controller.rb +46 -0
- data/app/controllers/spree/api/v3/admin/companies_controller.rb +59 -0
- data/app/controllers/spree/api/v3/admin/concerns/external_references.rb +166 -0
- data/app/controllers/spree/api/v3/admin/consent_records_controller.rb +31 -0
- data/app/controllers/spree/api/v3/admin/countries_controller.rb +12 -4
- data/app/controllers/spree/api/v3/admin/custom_field_definitions_controller.rb +19 -4
- data/app/controllers/spree/api/v3/admin/custom_fields_controller.rb +5 -5
- data/app/controllers/spree/api/v3/admin/customer_groups_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/customers/addresses_controller.rb +4 -4
- data/app/controllers/spree/api/v3/admin/customers/base_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/customers/store_credits_controller.rb +2 -3
- data/app/controllers/spree/api/v3/admin/customers/tax_identifiers_controller.rb +43 -0
- data/app/controllers/spree/api/v3/admin/customers_controller.rb +190 -11
- data/app/controllers/spree/api/v3/admin/dashboard_controller.rb +24 -20
- data/app/controllers/spree/api/v3/admin/data_requests_controller.rb +60 -0
- data/app/controllers/spree/api/v3/admin/delivery_method_rules_controller.rb +54 -0
- data/app/controllers/spree/api/v3/admin/delivery_methods/rules_controller.rb +114 -0
- data/app/controllers/spree/api/v3/admin/delivery_methods_controller.rb +243 -0
- data/app/controllers/spree/api/v3/admin/delivery_profiles/origin_groups_controller.rb +80 -0
- data/app/controllers/spree/api/v3/admin/delivery_profiles_controller.rb +107 -0
- data/app/controllers/spree/api/v3/admin/delivery_zones_controller.rb +116 -0
- data/app/controllers/spree/api/v3/admin/digital_links_controller.rb +48 -0
- data/app/controllers/spree/api/v3/admin/direct_uploads_controller.rb +17 -3
- data/app/controllers/spree/api/v3/admin/exchanges_controller.rb +31 -0
- data/app/controllers/spree/api/v3/admin/exports_controller.rb +2 -2
- data/app/controllers/spree/api/v3/admin/gift_card_batches_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/gift_cards_controller.rb +3 -2
- data/app/controllers/spree/api/v3/admin/imports_controller.rb +71 -8
- data/app/controllers/spree/api/v3/admin/integrations_controller.rb +67 -0
- data/app/controllers/spree/api/v3/admin/invitation_acceptances_controller.rb +5 -5
- data/app/controllers/spree/api/v3/admin/invitations_controller.rb +5 -1
- data/app/controllers/spree/api/v3/admin/locales_controller.rb +3 -1
- data/app/controllers/spree/api/v3/admin/markets_controller.rb +9 -5
- data/app/controllers/spree/api/v3/admin/me_controller.rb +4 -30
- data/app/controllers/spree/api/v3/admin/media_controller.rb +88 -38
- data/app/controllers/spree/api/v3/admin/media_library_controller.rb +156 -0
- data/app/controllers/spree/api/v3/admin/option_types_controller.rb +1 -0
- data/app/controllers/spree/api/v3/admin/order_cancellation_reasons_controller.rb +25 -0
- data/app/controllers/spree/api/v3/admin/order_groups_controller.rb +43 -0
- data/app/controllers/spree/api/v3/admin/order_routing_rules_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/orders/claims_controller.rb +56 -0
- data/app/controllers/spree/api/v3/admin/orders/deliveries_controller.rb +66 -0
- data/app/controllers/spree/api/v3/admin/orders/discount_codes_controller.rb +86 -0
- data/app/controllers/spree/api/v3/admin/orders/discounts_controller.rb +99 -0
- data/app/controllers/spree/api/v3/admin/orders/exchanges_controller.rb +62 -0
- data/app/controllers/spree/api/v3/admin/orders/fees_controller.rb +83 -0
- data/app/controllers/spree/api/v3/admin/orders/fulfillments_controller.rb +45 -67
- data/app/controllers/spree/api/v3/admin/orders/items_controller.rb +40 -22
- data/app/controllers/spree/api/v3/admin/orders/labels_controller.rb +75 -0
- data/app/controllers/spree/api/v3/admin/orders/payments_controller.rb +36 -18
- data/app/controllers/spree/api/v3/admin/orders/refunds_controller.rb +39 -18
- data/app/controllers/spree/api/v3/admin/orders/returns_controller.rb +70 -0
- data/app/controllers/spree/api/v3/admin/orders/store_credits_controller.rb +2 -2
- data/app/controllers/spree/api/v3/admin/orders/tax_identifiers_controller.rb +41 -0
- data/app/controllers/spree/api/v3/admin/orders/tax_lines_controller.rb +32 -0
- data/app/controllers/spree/api/v3/admin/orders_controller.rb +157 -32
- data/app/controllers/spree/api/v3/admin/package_types_controller.rb +39 -0
- data/app/controllers/spree/api/v3/admin/password_resets_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/payment_methods_controller.rb +15 -4
- data/app/controllers/spree/api/v3/admin/payout_providers_controller.rb +27 -0
- data/app/controllers/spree/api/v3/admin/permissions_controller.rb +30 -0
- data/app/controllers/spree/api/v3/admin/policies_controller.rb +42 -0
- data/app/controllers/spree/api/v3/admin/price_lists/products_controller.rb +93 -0
- data/app/controllers/spree/api/v3/admin/price_lists_controller.rb +43 -29
- data/app/controllers/spree/api/v3/admin/prices_controller.rb +41 -4
- data/app/controllers/spree/api/v3/admin/product_types_controller.rb +93 -0
- data/app/controllers/spree/api/v3/admin/products/digital_assets_controller.rb +148 -0
- data/app/controllers/spree/api/v3/admin/products/variants_controller.rb +24 -3
- data/app/controllers/spree/api/v3/admin/products_controller.rb +149 -33
- data/app/controllers/spree/api/v3/admin/promotion_actions_controller.rb +6 -2
- data/app/controllers/spree/api/v3/admin/promotion_rules_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/promotions_controller.rb +1 -5
- data/app/controllers/spree/api/v3/admin/purchase_orders/stock_receipts_controller.rb +32 -0
- data/app/controllers/spree/api/v3/admin/purchase_orders_controller.rb +161 -0
- data/app/controllers/spree/api/v3/admin/refund_reasons_controller.rb +25 -0
- data/app/controllers/spree/api/v3/admin/reporting/saved_reports_controller.rb +45 -0
- data/app/controllers/spree/api/v3/admin/reporting_controller.rb +95 -0
- data/app/controllers/spree/api/v3/admin/resource_controller.rb +27 -10
- data/app/controllers/spree/api/v3/admin/return_reasons_controller.rb +25 -0
- data/app/controllers/spree/api/v3/admin/returns_controller.rb +31 -0
- data/app/controllers/spree/api/v3/admin/roles_controller.rb +50 -6
- data/app/controllers/spree/api/v3/admin/seller_payouts_controller.rb +83 -0
- data/app/controllers/spree/api/v3/admin/seller_requirement_submissions_controller.rb +139 -0
- data/app/controllers/spree/api/v3/admin/seller_requirements_controller.rb +115 -0
- data/app/controllers/spree/api/v3/admin/seller_transfers_controller.rb +36 -0
- data/app/controllers/spree/api/v3/admin/sellers/balances_controller.rb +44 -0
- data/app/controllers/spree/api/v3/admin/sellers/invitations_controller.rb +77 -0
- data/app/controllers/spree/api/v3/admin/sellers/payouts_controller.rb +107 -0
- data/app/controllers/spree/api/v3/admin/sellers/team_controller.rb +64 -0
- data/app/controllers/spree/api/v3/admin/sellers_controller.rb +197 -0
- data/app/controllers/spree/api/v3/admin/setup_controller.rb +231 -0
- data/app/controllers/spree/api/v3/admin/stock_levels_controller.rb +172 -0
- data/app/controllers/spree/api/v3/admin/stock_locations_controller.rb +3 -2
- data/app/controllers/spree/api/v3/admin/stock_movements_controller.rb +37 -0
- data/app/controllers/spree/api/v3/admin/stock_reservations_controller.rb +1 -1
- data/app/controllers/spree/api/v3/admin/stock_transfers/stock_receipts_controller.rb +31 -0
- data/app/controllers/spree/api/v3/admin/stock_transfers_controller.rb +134 -38
- data/app/controllers/spree/api/v3/admin/store_controller.rb +65 -0
- data/app/controllers/spree/api/v3/admin/store_credits/events_controller.rb +47 -0
- data/app/controllers/spree/api/v3/admin/store_credits_controller.rb +87 -0
- data/app/controllers/spree/api/v3/admin/suppliers_controller.rb +30 -0
- data/app/controllers/spree/api/v3/admin/tags_controller.rb +2 -2
- data/app/controllers/spree/api/v3/admin/tax_categories_controller.rb +4 -0
- data/app/controllers/spree/api/v3/admin/tax_providers_controller.rb +25 -0
- data/app/controllers/spree/api/v3/admin/tax_rates_controller.rb +33 -0
- data/app/controllers/spree/api/v3/admin/tracking_carriers_controller.rb +33 -0
- data/app/controllers/spree/api/v3/admin/translatable_resources_controller.rb +37 -9
- data/app/controllers/spree/api/v3/admin/translations_controller.rb +10 -5
- data/app/controllers/spree/api/v3/admin/translations_coverage_controller.rb +150 -0
- data/app/controllers/spree/api/v3/admin/variants_controller.rb +11 -4
- data/app/controllers/spree/api/v3/admin/webhook_endpoints_controller.rb +1 -1
- data/app/controllers/spree/api/v3/base_controller.rb +59 -16
- data/app/controllers/spree/api/v3/resource_controller.rb +154 -38
- data/app/controllers/spree/api/v3/seller/auth_controller.rb +169 -0
- data/app/controllers/spree/api/v3/seller/balances_controller.rb +35 -0
- data/app/controllers/spree/api/v3/seller/base_controller.rb +25 -0
- data/app/controllers/spree/api/v3/seller/claim_reasons_controller.rb +20 -0
- data/app/controllers/spree/api/v3/seller/countries_controller.rb +38 -0
- data/app/controllers/spree/api/v3/seller/delivery_methods_controller.rb +265 -0
- data/app/controllers/spree/api/v3/seller/delivery_profiles_controller.rb +65 -0
- data/app/controllers/spree/api/v3/seller/delivery_zones_controller.rb +41 -0
- data/app/controllers/spree/api/v3/seller/direct_uploads_controller.rb +21 -0
- data/app/controllers/spree/api/v3/seller/exports_controller.rb +195 -0
- data/app/controllers/spree/api/v3/seller/import_rows_controller.rb +49 -0
- data/app/controllers/spree/api/v3/seller/imports_controller.rb +317 -0
- data/app/controllers/spree/api/v3/seller/invitation_acceptances_controller.rb +152 -0
- data/app/controllers/spree/api/v3/seller/invitations_controller.rb +71 -0
- data/app/controllers/spree/api/v3/seller/me_controller.rb +72 -0
- data/app/controllers/spree/api/v3/seller/onboarding_controller.rb +111 -0
- data/app/controllers/spree/api/v3/seller/order_cancellation_reasons_controller.rb +25 -0
- data/app/controllers/spree/api/v3/seller/orders/base_controller.rb +44 -0
- data/app/controllers/spree/api/v3/seller/orders/claims_controller.rb +45 -0
- data/app/controllers/spree/api/v3/seller/orders/deliveries_controller.rb +38 -0
- data/app/controllers/spree/api/v3/seller/orders/exchanges_controller.rb +50 -0
- data/app/controllers/spree/api/v3/seller/orders/fulfillments_controller.rb +79 -0
- data/app/controllers/spree/api/v3/seller/orders/labels_controller.rb +55 -0
- data/app/controllers/spree/api/v3/seller/orders/notes_controller.rb +82 -0
- data/app/controllers/spree/api/v3/seller/orders/returns_controller.rb +44 -0
- data/app/controllers/spree/api/v3/seller/orders_controller.rb +199 -0
- data/app/controllers/spree/api/v3/seller/package_types_controller.rb +100 -0
- data/app/controllers/spree/api/v3/seller/password_resets_controller.rb +155 -0
- data/app/controllers/spree/api/v3/seller/payouts_controller.rb +47 -0
- data/app/controllers/spree/api/v3/seller/policies_controller.rb +57 -0
- data/app/controllers/spree/api/v3/seller/product_types_controller.rb +35 -0
- data/app/controllers/spree/api/v3/seller/products_controller.rb +394 -0
- data/app/controllers/spree/api/v3/seller/profile_controller.rb +137 -0
- data/app/controllers/spree/api/v3/seller/reasons_controller.rb +45 -0
- data/app/controllers/spree/api/v3/seller/requirement_submissions_controller.rb +95 -0
- data/app/controllers/spree/api/v3/seller/resource_controller.rb +75 -0
- data/app/controllers/spree/api/v3/seller/return_reasons_controller.rb +20 -0
- data/app/controllers/spree/api/v3/seller/stock_locations_controller.rb +56 -0
- data/app/controllers/spree/api/v3/seller/tax_identifiers_controller.rb +48 -0
- data/app/controllers/spree/api/v3/seller/team_controller.rb +103 -0
- data/app/controllers/spree/api/v3/seller/tracking_carriers_controller.rb +35 -0
- data/app/controllers/spree/api/v3/seller/transfers_controller.rb +43 -0
- data/app/controllers/spree/api/v3/store/account/companies_controller.rb +42 -0
- data/app/controllers/spree/api/v3/store/auth_controller.rb +21 -34
- data/app/controllers/spree/api/v3/store/base_controller.rb +4 -0
- data/app/controllers/spree/api/v3/store/carts/discount_codes_controller.rb +24 -2
- data/app/controllers/spree/api/v3/store/carts/fulfillments_controller.rb +41 -15
- data/app/controllers/spree/api/v3/store/carts/items_controller.rb +53 -20
- data/app/controllers/spree/api/v3/store/carts/payment_sessions_controller.rb +36 -20
- data/app/controllers/spree/api/v3/store/carts/po_documents_controller.rb +111 -0
- data/app/controllers/spree/api/v3/store/carts/store_credits_controller.rb +2 -2
- data/app/controllers/spree/api/v3/store/carts/tax_identifiers_controller.rb +96 -0
- data/app/controllers/spree/api/v3/store/carts_controller.rb +57 -12
- data/app/controllers/spree/api/v3/store/categories_controller.rb +6 -3
- data/app/controllers/spree/api/v3/store/collections/products_controller.rb +59 -0
- data/app/controllers/spree/api/v3/store/collections_controller.rb +36 -0
- data/app/controllers/spree/api/v3/store/companies/addresses_controller.rb +81 -0
- data/app/controllers/spree/api/v3/store/companies/base_controller.rb +24 -0
- data/app/controllers/spree/api/v3/store/companies/invitations_controller.rb +50 -0
- data/app/controllers/spree/api/v3/store/companies/members_controller.rb +66 -0
- data/app/controllers/spree/api/v3/store/companies/orders_controller.rb +28 -0
- data/app/controllers/spree/api/v3/store/companies_controller.rb +47 -0
- data/app/controllers/spree/api/v3/store/company_invitations_controller.rb +90 -0
- data/app/controllers/spree/api/v3/store/countries_controller.rb +8 -6
- data/app/controllers/spree/api/v3/store/customer/addresses_controller.rb +3 -1
- data/app/controllers/spree/api/v3/store/customer/data_requests_controller.rb +78 -0
- data/app/controllers/spree/api/v3/store/customer/digital_links_controller.rb +52 -0
- data/app/controllers/spree/api/v3/store/customer/orders_controller.rb +6 -0
- data/app/controllers/spree/api/v3/store/customer/password_resets_controller.rb +7 -3
- data/app/controllers/spree/api/v3/store/customer/payment_setup_sessions_controller.rb +3 -3
- data/app/controllers/spree/api/v3/store/customer/store_credits_controller.rb +0 -3
- data/app/controllers/spree/api/v3/store/customer/tax_identifiers_controller.rb +91 -0
- data/app/controllers/spree/api/v3/store/customers_controller.rb +26 -31
- data/app/controllers/spree/api/v3/store/data_feeds_controller.rb +11 -0
- data/app/controllers/spree/api/v3/store/data_request_downloads_controller.rb +58 -0
- data/app/controllers/spree/api/v3/store/delivery_methods_controller.rb +108 -0
- data/app/controllers/spree/api/v3/store/digital_links_controller.rb +105 -0
- data/app/controllers/spree/api/v3/store/markets/countries_controller.rb +5 -9
- data/app/controllers/spree/api/v3/store/markets_controller.rb +4 -4
- data/app/controllers/spree/api/v3/store/newsletter_subscribers_controller.rb +8 -9
- data/app/controllers/spree/api/v3/store/orders/claims_controller.rb +94 -0
- data/app/controllers/spree/api/v3/store/orders/returns_controller.rb +116 -0
- data/app/controllers/spree/api/v3/store/orders/tax_identifiers_controller.rb +46 -0
- data/app/controllers/spree/api/v3/store/orders_controller.rb +12 -15
- data/app/controllers/spree/api/v3/store/products/filters_controller.rb +10 -3
- data/app/controllers/spree/api/v3/store/products_controller.rb +25 -6
- data/app/controllers/spree/api/v3/store/resource_controller.rb +2 -0
- data/app/controllers/spree/api/v3/store/sellers_controller.rb +43 -0
- data/app/controllers/spree/api/v3/store/wishlist_items_controller.rb +9 -6
- data/app/controllers/spree/api/v3/store/wishlists_controller.rb +3 -3
- data/app/controllers/spree/api/v3/webhooks/fulfillments_controller.rb +88 -0
- data/app/controllers/spree/api/v3/webhooks/payments_controller.rb +5 -2
- data/app/controllers/spree/api/v3/webhooks/payouts_controller.rb +61 -0
- data/app/models/spree/api/data_request_urls.rb +25 -0
- data/app/models/spree/api/digital_link_urls.rb +26 -0
- data/app/serializers/spree/api/v3/address_serializer.rb +17 -5
- data/app/serializers/spree/api/v3/admin/address_serializer.rb +27 -4
- data/app/serializers/spree/api/v3/admin/admin_user_serializer.rb +13 -10
- data/app/serializers/spree/api/v3/admin/api_key_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/admin/applied_promotion_serializer.rb +15 -0
- data/app/serializers/spree/api/v3/admin/cart_serializer.rb +34 -0
- data/app/serializers/spree/api/v3/admin/catalog_assignment_serializer.rb +32 -0
- data/app/serializers/spree/api/v3/admin/catalog_order_minimum_serializer.rb +23 -0
- data/app/serializers/spree/api/v3/admin/catalog_price_serializer.rb +48 -0
- data/app/serializers/spree/api/v3/admin/catalog_price_tier_serializer.rb +23 -0
- data/app/serializers/spree/api/v3/admin/catalog_product_serializer.rb +57 -0
- data/app/serializers/spree/api/v3/admin/catalog_product_term_serializer.rb +38 -0
- data/app/serializers/spree/api/v3/admin/catalog_quantity_rule_serializer.rb +37 -0
- data/app/serializers/spree/api/v3/admin/catalog_serializer.rb +46 -0
- data/app/serializers/spree/api/v3/admin/category_serializer.rb +3 -2
- data/app/serializers/spree/api/v3/admin/channel_serializer.rb +15 -1
- data/app/serializers/spree/api/v3/admin/claim_line_item_serializer.rb +16 -0
- data/app/serializers/spree/api/v3/admin/claim_reason_serializer.rb +21 -0
- data/app/serializers/spree/api/v3/admin/claim_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/admin/collection_rule_serializer.rb +22 -0
- data/app/serializers/spree/api/v3/admin/collection_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/admin/commission_line_serializer.rb +67 -0
- data/app/serializers/spree/api/v3/admin/commission_rate_serializer.rb +69 -0
- data/app/serializers/spree/api/v3/admin/commission_rule_serializer.rb +61 -0
- data/app/serializers/spree/api/v3/admin/company_invitation_serializer.rb +15 -0
- data/app/serializers/spree/api/v3/admin/company_membership_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/admin/company_serializer.rb +37 -0
- data/app/serializers/spree/api/v3/admin/concerns/external_references_attribute.rb +33 -0
- data/app/serializers/spree/api/v3/admin/consent_record_serializer.rb +28 -0
- data/app/serializers/spree/api/v3/admin/country_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/admin/credit_card_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/admin/custom_field_definition_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/admin/custom_field_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/admin/customer_serializer.rb +23 -22
- data/app/serializers/spree/api/v3/admin/dashboard_counter_serializer.rb +24 -0
- data/app/serializers/spree/api/v3/admin/data_request_serializer.rb +36 -0
- data/app/serializers/spree/api/v3/admin/delivery_method_rule_serializer.rb +32 -0
- data/app/serializers/spree/api/v3/admin/delivery_method_serializer.rb +66 -1
- data/app/serializers/spree/api/v3/admin/delivery_method_service_serializer.rb +15 -0
- data/app/serializers/spree/api/v3/admin/delivery_origin_group_serializer.rb +34 -0
- data/app/serializers/spree/api/v3/admin/delivery_profile_serializer.rb +65 -0
- data/app/serializers/spree/api/v3/admin/delivery_rate_serializer.rb +10 -1
- data/app/serializers/spree/api/v3/admin/delivery_serializer.rb +20 -0
- data/app/serializers/spree/api/v3/admin/delivery_zone_member_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/admin/delivery_zone_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/admin/digital_asset_serializer.rb +59 -0
- data/app/serializers/spree/api/v3/admin/discount_serializer.rb +3 -4
- data/app/serializers/spree/api/v3/admin/exchange_line_item_serializer.rb +16 -0
- data/app/serializers/spree/api/v3/admin/exchange_serializer.rb +35 -0
- data/app/serializers/spree/api/v3/admin/export_serializer.rb +20 -1
- data/app/serializers/spree/api/v3/admin/fee_serializer.rb +14 -0
- data/app/serializers/spree/api/v3/admin/freight_summary_line_serializer.rb +46 -0
- data/app/serializers/spree/api/v3/admin/freight_summary_serializer.rb +16 -0
- data/app/serializers/spree/api/v3/admin/fulfillment_item_serializer.rb +39 -0
- data/app/serializers/spree/api/v3/admin/fulfillment_serializer.rb +31 -9
- data/app/serializers/spree/api/v3/admin/gift_card_serializer.rb +2 -3
- data/app/serializers/spree/api/v3/admin/import_serializer.rb +15 -2
- data/app/serializers/spree/api/v3/admin/integration_serializer.rb +32 -0
- data/app/serializers/spree/api/v3/admin/invitation_serializer.rb +4 -4
- data/app/serializers/spree/api/v3/admin/line_item_serializer.rb +19 -5
- data/app/serializers/spree/api/v3/admin/market_serializer.rb +5 -1
- data/app/serializers/spree/api/v3/admin/media_serializer.rb +50 -2
- data/app/serializers/spree/api/v3/admin/membership_product_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/admin/order_cancellation_reason_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/admin/order_group_serializer.rb +50 -0
- data/app/serializers/spree/api/v3/admin/order_routing_rule_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/admin/order_serializer.rb +131 -19
- data/app/serializers/spree/api/v3/admin/package_type_serializer.rb +53 -0
- data/app/serializers/spree/api/v3/admin/payment_method_serializer.rb +8 -2
- data/app/serializers/spree/api/v3/admin/payment_serializer.rb +6 -0
- data/app/serializers/spree/api/v3/admin/payment_split_serializer.rb +41 -0
- data/app/serializers/spree/api/v3/admin/permission_serializer.rb +39 -0
- data/app/serializers/spree/api/v3/admin/policy_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/admin/price_adjustment_tier_serializer.rb +22 -0
- data/app/serializers/spree/api/v3/admin/price_list_product_serializer.rb +32 -0
- data/app/serializers/spree/api/v3/admin/price_list_serializer.rb +20 -8
- data/app/serializers/spree/api/v3/admin/price_rule_serializer.rb +2 -12
- data/app/serializers/spree/api/v3/admin/price_serializer.rb +3 -0
- data/app/serializers/spree/api/v3/admin/product_serializer.rb +54 -8
- data/app/serializers/spree/api/v3/admin/product_submission_serializer.rb +39 -0
- data/app/serializers/spree/api/v3/admin/product_type_custom_field_definition_serializer.rb +44 -0
- data/app/serializers/spree/api/v3/admin/product_type_serializer.rb +34 -0
- data/app/serializers/spree/api/v3/admin/promotion_action_serializer.rb +6 -12
- data/app/serializers/spree/api/v3/admin/promotion_rule_serializer.rb +17 -15
- data/app/serializers/spree/api/v3/admin/purchase_order_item_serializer.rb +80 -0
- data/app/serializers/spree/api/v3/admin/purchase_order_serializer.rb +94 -0
- data/app/serializers/spree/api/v3/admin/refund_reason_serializer.rb +27 -0
- data/app/serializers/spree/api/v3/admin/refund_serializer.rb +0 -5
- data/app/serializers/spree/api/v3/admin/reporting_result_serializer.rb +72 -0
- data/app/serializers/spree/api/v3/admin/return_line_item_serializer.rb +16 -0
- data/app/serializers/spree/api/v3/admin/return_reason_serializer.rb +21 -0
- data/app/serializers/spree/api/v3/admin/return_serializer.rb +59 -0
- data/app/serializers/spree/api/v3/admin/role_serializer.rb +24 -6
- data/app/serializers/spree/api/v3/admin/saved_report_serializer.rb +33 -0
- data/app/serializers/spree/api/v3/admin/seller_balance_serializer.rb +37 -0
- data/app/serializers/spree/api/v3/admin/seller_payout_serializer.rb +46 -0
- data/app/serializers/spree/api/v3/admin/seller_requirement_serializer.rb +68 -0
- data/app/serializers/spree/api/v3/admin/seller_requirement_status_serializer.rb +48 -0
- data/app/serializers/spree/api/v3/admin/seller_requirement_submission_serializer.rb +57 -0
- data/app/serializers/spree/api/v3/admin/seller_serializer.rb +92 -0
- data/app/serializers/spree/api/v3/admin/seller_team_member_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/admin/seller_transfer_serializer.rb +53 -0
- data/app/serializers/spree/api/v3/admin/shipping_label_serializer.rb +82 -0
- data/app/serializers/spree/api/v3/admin/state_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/admin/stock_level_serializer.rb +65 -0
- data/app/serializers/spree/api/v3/admin/stock_location_serializer.rb +20 -4
- data/app/serializers/spree/api/v3/admin/stock_movement_serializer.rb +116 -0
- data/app/serializers/spree/api/v3/admin/stock_receipt_item_serializer.rb +57 -0
- data/app/serializers/spree/api/v3/admin/stock_receipt_serializer.rb +49 -0
- data/app/serializers/spree/api/v3/admin/stock_reservation_serializer.rb +5 -5
- data/app/serializers/spree/api/v3/admin/stock_transfer_item_serializer.rb +57 -0
- data/app/serializers/spree/api/v3/admin/stock_transfer_serializer.rb +36 -16
- data/app/serializers/spree/api/v3/admin/store_credit_event_serializer.rb +32 -0
- data/app/serializers/spree/api/v3/admin/store_credit_serializer.rb +42 -7
- data/app/serializers/spree/api/v3/admin/store_serializer.rb +63 -1
- data/app/serializers/spree/api/v3/admin/supplier_serializer.rb +39 -0
- data/app/serializers/spree/api/v3/admin/tax_exemption_certificate_serializer.rb +67 -0
- data/app/serializers/spree/api/v3/admin/tax_identifier_serializer.rb +43 -0
- data/app/serializers/spree/api/v3/admin/tax_line_serializer.rb +21 -0
- data/app/serializers/spree/api/v3/admin/tax_rate_serializer.rb +49 -0
- data/app/serializers/spree/api/v3/admin/variant_serializer.rb +49 -8
- data/app/serializers/spree/api/v3/applied_promotion_serializer.rb +23 -0
- data/app/serializers/spree/api/v3/base_serializer.rb +39 -2
- data/app/serializers/spree/api/v3/cart_serializer.rb +90 -12
- data/app/serializers/spree/api/v3/category_serializer.rb +3 -3
- data/app/serializers/spree/api/v3/claim_line_item_serializer.rb +50 -0
- data/app/serializers/spree/api/v3/claim_reason_serializer.rb +20 -0
- data/app/serializers/spree/api/v3/claim_serializer.rb +62 -0
- data/app/serializers/spree/api/v3/collection_serializer.rb +41 -0
- data/app/serializers/spree/api/v3/company_invitation_serializer.rb +28 -0
- data/app/serializers/spree/api/v3/company_membership_serializer.rb +28 -0
- data/app/serializers/spree/api/v3/company_serializer.rb +33 -0
- data/app/serializers/spree/api/v3/custom_field_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/customer_serializer.rb +9 -1
- data/app/serializers/spree/api/v3/data_request_event_serializer.rb +30 -0
- data/app/serializers/spree/api/v3/data_request_serializer.rb +40 -0
- data/app/serializers/spree/api/v3/delivery_method_serializer.rb +12 -2
- data/app/serializers/spree/api/v3/delivery_rate_serializer.rb +34 -17
- data/app/serializers/spree/api/v3/delivery_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/delivery_zone_member_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/delivery_zone_serializer.rb +13 -0
- data/app/serializers/spree/api/v3/digital_asset_serializer.rb +23 -0
- data/app/serializers/spree/api/v3/digital_link_serializer.rb +6 -2
- data/app/serializers/spree/api/v3/discount_serializer.rb +21 -7
- data/app/serializers/spree/api/v3/exchange_line_item_serializer.rb +53 -0
- data/app/serializers/spree/api/v3/exchange_serializer.rb +61 -0
- data/app/serializers/spree/api/v3/fee_serializer.rb +27 -0
- data/app/serializers/spree/api/v3/freight_summary_serializer.rb +38 -0
- data/app/serializers/spree/api/v3/fulfillment_serializer.rb +28 -15
- data/app/serializers/spree/api/v3/gift_card_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/import_row_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/import_serializer.rb +18 -4
- data/app/serializers/spree/api/v3/invitation_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/line_item_serializer.rb +18 -1
- data/app/serializers/spree/api/v3/market_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/{asset_serializer.rb → media_event_serializer.rb} +4 -4
- data/app/serializers/spree/api/v3/media_serializer.rb +48 -7
- data/app/serializers/spree/api/v3/newsletter_subscriber_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/option_type_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/order_group_serializer.rb +60 -0
- data/app/serializers/spree/api/v3/order_serializer.rb +58 -6
- data/app/serializers/spree/api/v3/payment_method_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/payment_serializer.rb +2 -6
- data/app/serializers/spree/api/v3/payment_session_serializer.rb +10 -3
- data/app/serializers/spree/api/v3/payment_setup_session_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/policy_serializer.rb +7 -2
- data/app/serializers/spree/api/v3/product_filter_option_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/product_serializer.rb +42 -10
- data/app/serializers/spree/api/v3/product_type_serializer.rb +17 -0
- data/app/serializers/spree/api/v3/purchase_order_event_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/refund_serializer.rb +9 -3
- data/app/serializers/spree/api/v3/return_line_item_serializer.rb +42 -0
- data/app/serializers/spree/api/v3/return_reason_serializer.rb +20 -0
- data/app/serializers/spree/api/v3/return_serializer.rb +62 -0
- data/app/serializers/spree/api/v3/seller/balance_serializer.rb +35 -0
- data/app/serializers/spree/api/v3/seller/claim_line_item_serializer.rb +21 -0
- data/app/serializers/spree/api/v3/seller/claim_serializer.rb +25 -0
- data/app/serializers/spree/api/v3/seller/delivery_method_rule_serializer.rb +32 -0
- data/app/serializers/spree/api/v3/seller/delivery_method_serializer.rb +59 -0
- data/app/serializers/spree/api/v3/seller/delivery_profile_serializer.rb +26 -0
- data/app/serializers/spree/api/v3/seller/delivery_rate_serializer.rb +35 -0
- data/app/serializers/spree/api/v3/seller/delivery_serializer.rb +17 -0
- data/app/serializers/spree/api/v3/seller/delivery_zone_serializer.rb +26 -0
- data/app/serializers/spree/api/v3/seller/exchange_line_item_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/seller/exchange_serializer.rb +30 -0
- data/app/serializers/spree/api/v3/seller/export_serializer.rb +44 -0
- data/app/serializers/spree/api/v3/seller/fulfillment_item_serializer.rb +43 -0
- data/app/serializers/spree/api/v3/seller/fulfillment_serializer.rb +76 -0
- data/app/serializers/spree/api/v3/seller/import_mapping_serializer.rb +20 -0
- data/app/serializers/spree/api/v3/seller/import_row_serializer.rb +17 -0
- data/app/serializers/spree/api/v3/seller/import_serializer.rb +77 -0
- data/app/serializers/spree/api/v3/seller/invitation_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/seller/media_serializer.rb +26 -0
- data/app/serializers/spree/api/v3/seller/order_line_item_serializer.rb +44 -0
- data/app/serializers/spree/api/v3/seller/order_serializer.rb +119 -0
- data/app/serializers/spree/api/v3/seller/package_type_serializer.rb +52 -0
- data/app/serializers/spree/api/v3/seller/payment_split_serializer.rb +34 -0
- data/app/serializers/spree/api/v3/seller/payout_serializer.rb +36 -0
- data/app/serializers/spree/api/v3/seller/policy_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/seller/product_serializer.rb +60 -0
- data/app/serializers/spree/api/v3/seller/product_submission_serializer.rb +30 -0
- data/app/serializers/spree/api/v3/seller/product_type_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/seller/profile_serializer.rb +77 -0
- data/app/serializers/spree/api/v3/seller/reason_serializer.rb +24 -0
- data/app/serializers/spree/api/v3/seller/requirement_custom_field_serializer.rb +36 -0
- data/app/serializers/spree/api/v3/seller/requirement_status_serializer.rb +62 -0
- data/app/serializers/spree/api/v3/seller/requirement_submission_serializer.rb +33 -0
- data/app/serializers/spree/api/v3/seller/return_line_item_serializer.rb +24 -0
- data/app/serializers/spree/api/v3/seller/return_serializer.rb +51 -0
- data/app/serializers/spree/api/v3/seller/shipping_label_serializer.rb +23 -0
- data/app/serializers/spree/api/v3/seller/stock_level_serializer.rb +27 -0
- data/app/serializers/spree/api/v3/seller/stock_location_serializer.rb +17 -0
- data/app/serializers/spree/api/v3/seller/tax_identifier_serializer.rb +15 -0
- data/app/serializers/spree/api/v3/seller/team_member_serializer.rb +22 -0
- data/app/serializers/spree/api/v3/seller/transfer_serializer.rb +49 -0
- data/app/serializers/spree/api/v3/seller/variant_serializer.rb +71 -0
- data/app/serializers/spree/api/v3/seller_serializer.rb +50 -0
- data/app/serializers/spree/api/v3/shipping_label_event_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/{stock_item_serializer.rb → stock_level_serializer.rb} +5 -5
- data/app/serializers/spree/api/v3/stock_location_serializer.rb +11 -7
- data/app/serializers/spree/api/v3/stock_movement_serializer.rb +8 -15
- data/app/serializers/spree/api/v3/stock_receipt_event_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/stock_transfer_serializer.rb +6 -6
- data/app/serializers/spree/api/v3/store_credit_event_serializer.rb +29 -0
- data/app/serializers/spree/api/v3/supplier_event_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/tax_identifier_serializer.rb +15 -0
- data/app/serializers/spree/api/v3/tax_line_serializer.rb +37 -0
- data/app/serializers/spree/api/v3/variant_serializer.rb +52 -2
- data/app/serializers/spree/api/v3/wishlist_item_serializer.rb +6 -6
- data/app/serializers/spree/api/v3/wishlist_serializer.rb +1 -1
- data/app/services/spree/api/v3/filters_aggregator.rb +14 -12
- data/app/services/spree/webhooks/deliver_webhook.rb +62 -26
- data/app/subscribers/spree/webhook_event_subscriber.rb +9 -5
- data/config/brakeman.ignore +1 -1
- data/config/initializers/typelizer.rb +51 -4
- data/config/locales/en.yml +5 -0
- data/config/routes.rb +730 -22
- data/lib/spree/api/configuration.rb +2 -7
- data/lib/spree/api/dependencies.rb +173 -227
- data/lib/spree/api/openapi/schema_helper.rb +179 -13
- data/lib/spree/api/testing_support/v3/base.rb +45 -15
- data/lib/spree/api.rb +10 -4
- data/lib/typelizer/open_enums.rb +35 -0
- metadata +341 -27
- data/app/controllers/spree/api/v3/admin/orders/adjustments_controller.rb +0 -25
- data/app/controllers/spree/api/v3/admin/stock_items_controller.rb +0 -42
- data/app/controllers/spree/api/v3/admin/store_credit_categories_controller.rb +0 -21
- data/app/controllers/spree/api/v3/store/digitals_controller.rb +0 -38
- data/app/serializers/spree/api/v3/admin/adjustment_serializer.rb +0 -24
- data/app/serializers/spree/api/v3/admin/dashboard_analytics_serializer.rb +0 -143
- data/app/serializers/spree/api/v3/admin/reimbursement_serializer.rb +0 -15
- data/app/serializers/spree/api/v3/admin/return_authorization_serializer.rb +0 -19
- data/app/serializers/spree/api/v3/admin/stock_item_serializer.rb +0 -34
- data/app/serializers/spree/api/v3/admin/store_credit_category_serializer.rb +0 -19
- data/app/serializers/spree/api/v3/customer_return_serializer.rb +0 -17
- data/app/serializers/spree/api/v3/digital_serializer.rb +0 -17
- data/app/serializers/spree/api/v3/reimbursement_serializer.rb +0 -27
- data/app/serializers/spree/api/v3/report_serializer.rb +0 -34
- data/app/serializers/spree/api/v3/return_authorization_serializer.rb +0 -31
- data/app/serializers/spree/api/v3/return_item_serializer.rb +0 -53
- data/app/serializers/spree/api/v3/shipping_category_serializer.rb +0 -11
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Admin
|
|
5
|
+
class DeliveryMethodsController < ResourceController
|
|
6
|
+
scoped_resource :delivery_methods
|
|
7
|
+
|
|
8
|
+
# GET /api/v3/admin/delivery_methods/calculators
|
|
9
|
+
# Registered delivery calculator classes with their preference
|
|
10
|
+
# schemas, so admin UIs can render configuration forms.
|
|
11
|
+
def calculators
|
|
12
|
+
authorize! :create, model_class
|
|
13
|
+
|
|
14
|
+
data = Spree::DeliveryMethod.calculators.map do |calculator_class|
|
|
15
|
+
{
|
|
16
|
+
type: calculator_class.api_type,
|
|
17
|
+
name: calculator_class.description,
|
|
18
|
+
preference_schema: calculator_class.respond_to?(:serialized_preference_schema) ? calculator_class.serialized_preference_schema : []
|
|
19
|
+
}
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
render json: { data: data }
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
# GET /api/v3/admin/delivery_methods/fulfillment_providers
|
|
26
|
+
# Registered FulfillmentProvider strategies with their class
|
|
27
|
+
# predicates, so admin UIs render capability hints from the
|
|
28
|
+
# registry, not JS constants.
|
|
29
|
+
def fulfillment_providers
|
|
30
|
+
authorize! :create, model_class
|
|
31
|
+
|
|
32
|
+
data = Spree.fulfillment_providers.map do |provider_class|
|
|
33
|
+
{
|
|
34
|
+
type: provider_class.to_s,
|
|
35
|
+
name: provider_class.provider_name,
|
|
36
|
+
integration_class: provider_class.integration_class,
|
|
37
|
+
integration_type: integration_api_type(provider_class),
|
|
38
|
+
available: provider_class.available_for_store?(current_store),
|
|
39
|
+
digital: provider_class.digital?,
|
|
40
|
+
pickup: provider_class.pickup?,
|
|
41
|
+
pickup_point: provider_class.pickup_point?,
|
|
42
|
+
requires_address: provider_class.new.requires_address?
|
|
43
|
+
}
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
render json: { data: data }
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
# GET /api/v3/admin/delivery_methods/rate_providers
|
|
50
|
+
# Registered DeliveryRateProvider strategies. Providers whose
|
|
51
|
+
# integration isn't connected come back with `available: false` so
|
|
52
|
+
# the dashboard can offer connecting it inline — DeliveryMethod
|
|
53
|
+
# still rejects an unavailable provider on save. `service_catalog`
|
|
54
|
+
# feeds the carrier-services picker (empty = free-form).
|
|
55
|
+
def rate_providers
|
|
56
|
+
authorize! :create, model_class
|
|
57
|
+
|
|
58
|
+
data = Spree.delivery_rate_providers.map do |provider_class|
|
|
59
|
+
integration = provider_class.integration_class.presence &&
|
|
60
|
+
current_store.integrations.active.find_by(type: provider_class.integration_class)
|
|
61
|
+
catalog = provider_class.service_catalog(integration)
|
|
62
|
+
|
|
63
|
+
{
|
|
64
|
+
type: provider_class.to_s,
|
|
65
|
+
name: provider_class.provider_name,
|
|
66
|
+
integration_class: provider_class.integration_class,
|
|
67
|
+
integration_type: integration_api_type(provider_class),
|
|
68
|
+
available: provider_class.available_for_store?(current_store),
|
|
69
|
+
requires_address: provider_class.requires_address?,
|
|
70
|
+
uses_calculator: provider_class.uses_calculator?,
|
|
71
|
+
service_catalog: catalog.services,
|
|
72
|
+
# Present when the provider could not list services (e.g. a
|
|
73
|
+
# credential tier without access) — the picker shows it
|
|
74
|
+
# instead of an empty list.
|
|
75
|
+
service_catalog_error: catalog.error_message
|
|
76
|
+
}
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
render json: { data: data, default: Spree::DeliveryMethod::DEFAULT_RATE_PROVIDER }
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def create
|
|
83
|
+
@resource = model_class.new(assignable_params)
|
|
84
|
+
authorize_resource!(@resource, :create)
|
|
85
|
+
assign_calculator(@resource)
|
|
86
|
+
|
|
87
|
+
if @resource.errors.empty? && @resource.save
|
|
88
|
+
render json: serialize_resource(@resource), status: :created
|
|
89
|
+
else
|
|
90
|
+
render_validation_error(@resource.errors)
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def update
|
|
95
|
+
@resource.assign_attributes(assignable_params)
|
|
96
|
+
assign_calculator(@resource)
|
|
97
|
+
|
|
98
|
+
if @resource.errors.empty? && @resource.save
|
|
99
|
+
render json: serialize_resource(@resource)
|
|
100
|
+
else
|
|
101
|
+
render_validation_error(@resource.errors)
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
protected
|
|
106
|
+
|
|
107
|
+
# Wire shorthand of the provider's integration (`easy_post`), so the
|
|
108
|
+
# dashboard can tie a provider to the integration it needs without
|
|
109
|
+
# translating Ruby class names client-side.
|
|
110
|
+
def integration_api_type(provider_class)
|
|
111
|
+
klass = provider_class.integration_class.presence&.safe_constantize
|
|
112
|
+
klass&.api_type
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def model_class
|
|
116
|
+
Spree::DeliveryMethod
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def serializer_class
|
|
120
|
+
Spree.api.admin_delivery_method_serializer
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# A single POST/PATCH can ship eligibility rules and carrier service
|
|
124
|
+
# rows alongside the basics; `DeliveryMethod#rules=` / `#services=`
|
|
125
|
+
# reconcile to the desired set, so the dashboard saves the whole
|
|
126
|
+
# sheet in one round-trip.
|
|
127
|
+
def permitted_params
|
|
128
|
+
params.permit(
|
|
129
|
+
*model_additional_permitted_attributes,
|
|
130
|
+
:name, :admin_name, :code, :fulfillment_provider,
|
|
131
|
+
:pickup_point_provider, :rate_provider, :storefront_visible, :tracking_url,
|
|
132
|
+
:available_to_sellers,
|
|
133
|
+
:estimated_transit_business_days_min, :estimated_transit_business_days_max,
|
|
134
|
+
:tax_category_id, :calculator_type, :markup_flat, :markup_percent,
|
|
135
|
+
:delivery_profile_id, :delivery_origin_group_id, :delivery_zone_id,
|
|
136
|
+
stock_location_ids: [], calculator_preferences: {},
|
|
137
|
+
rules: rule_attributes,
|
|
138
|
+
services: [:id, :carrier, :service, :label, :markup_flat, :markup_percent, :position]
|
|
139
|
+
)
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def rule_attributes
|
|
143
|
+
[:id, :type, :active, { preferences: {} }, *subclassed_rule_attributes]
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
# Association-backed rule config declares itself on the rule class
|
|
147
|
+
# (e.g. `[product_ids: []]`), so plugin-defined rules need no change
|
|
148
|
+
# here.
|
|
149
|
+
def subclassed_rule_attributes
|
|
150
|
+
Spree.delivery_method_rules.flat_map do |klass|
|
|
151
|
+
klass.respond_to?(:additional_permitted_attributes) ? klass.additional_permitted_attributes : []
|
|
152
|
+
end.uniq
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
def collection_includes
|
|
156
|
+
[:calculator, :tax_category, :delivery_zone, :delivery_profile, :delivery_method_rules, :seller]
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
private
|
|
160
|
+
|
|
161
|
+
# Resolves prefixed-ID params to records; calculator handled separately.
|
|
162
|
+
def assignable_params
|
|
163
|
+
attributes = permitted_params.except(:tax_category_id, :delivery_profile_id, :delivery_origin_group_id, :delivery_zone_id, :stock_location_ids, :calculator_type, :calculator_preferences)
|
|
164
|
+
if params.key?(:tax_category_id)
|
|
165
|
+
attributes[:tax_category] = params[:tax_category_id].present? ? Spree::TaxCategory.accessible_by(current_ability, :show).find_by_prefix_id!(params[:tax_category_id]) : nil
|
|
166
|
+
end
|
|
167
|
+
if params.key?(:delivery_profile_id)
|
|
168
|
+
attributes[:delivery_profile] = current_store.delivery_profiles.accessible_by(current_ability, :show).find_by_prefix_id!(params[:delivery_profile_id])
|
|
169
|
+
end
|
|
170
|
+
if params.key?(:delivery_origin_group_id) && params[:delivery_origin_group_id].present?
|
|
171
|
+
attributes[:delivery_origin_group] = current_store.delivery_origin_groups.accessible_by(current_ability, :show).find_by_prefix_id!(params[:delivery_origin_group_id])
|
|
172
|
+
end
|
|
173
|
+
if params.key?(:delivery_zone_id)
|
|
174
|
+
attributes[:delivery_zone] = params[:delivery_zone_id].present? ? current_store.delivery_zones.accessible_by(current_ability, :show).find_by_prefix_id!(params[:delivery_zone_id]) : nil
|
|
175
|
+
end
|
|
176
|
+
if params.key?(:stock_location_ids)
|
|
177
|
+
attributes[:pickup_locations] = Array(params[:stock_location_ids]).map { |id| current_store.stock_locations.accessible_by(current_ability, :show).find_by_prefix_id!(id) }
|
|
178
|
+
end
|
|
179
|
+
attributes[:rules] = resolved_rule_rows if params.key?(:rules)
|
|
180
|
+
attributes
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
# `DeliveryMethod#rules=` decodes prefixed ids but applies no store
|
|
184
|
+
# or ability scoping, so resolve association-backed config here — a
|
|
185
|
+
# product the caller cannot reach 404s rather than silently linking.
|
|
186
|
+
def resolved_rule_rows
|
|
187
|
+
Array(permitted_params[:rules]).map do |row|
|
|
188
|
+
row = row.to_h
|
|
189
|
+
row['product_ids'].blank? ? row : row.merge('product_ids' => accessible_product_ids(row['product_ids']))
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
# Keeps only the products this caller can reach in this store, and
|
|
194
|
+
# plucks ids rather than hydrating rows to read them back. Ids that
|
|
195
|
+
# resolve to nothing — another store's, or a product deleted while
|
|
196
|
+
# the sheet was open — are dropped: they cannot become an exclusion,
|
|
197
|
+
# and failing the whole save over one would leave the merchant stuck
|
|
198
|
+
# with no way to clear it. Mirrors how price lists filter membership.
|
|
199
|
+
def accessible_product_ids(ids)
|
|
200
|
+
current_store.products.
|
|
201
|
+
accessible_by(current_ability, :show).
|
|
202
|
+
where(id: decode_prefixed_ids(ids)).
|
|
203
|
+
pluck(:id)
|
|
204
|
+
end
|
|
205
|
+
|
|
206
|
+
def assign_calculator(delivery_method)
|
|
207
|
+
calculator_type = permitted_params[:calculator_type]
|
|
208
|
+
preferences = permitted_params[:calculator_preferences]
|
|
209
|
+
|
|
210
|
+
if calculator_type.present? && delivery_method.calculator&.class&.api_type != calculator_type
|
|
211
|
+
selected_calculator_class = Spree::DeliveryMethod.calculators.find do |klass|
|
|
212
|
+
klass.api_type == calculator_type
|
|
213
|
+
end
|
|
214
|
+
unless selected_calculator_class
|
|
215
|
+
delivery_method.errors.add(:calculator_type, :invalid)
|
|
216
|
+
return
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
delivery_method.calculator = selected_calculator_class.new
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
return if preferences.blank?
|
|
223
|
+
|
|
224
|
+
# A payload may carry preferences without naming a calculator —
|
|
225
|
+
# editing the amount on a method that already has one, or creating
|
|
226
|
+
# with the default. The model only builds the default calculator
|
|
227
|
+
# at validation, so without this the preferences land on nothing
|
|
228
|
+
# and the amount the merchant typed is silently replaced by a free
|
|
229
|
+
# rate.
|
|
230
|
+
delivery_method.ensure_calculator
|
|
231
|
+
return if delivery_method.calculator.nil?
|
|
232
|
+
|
|
233
|
+
preferences.each do |key, value|
|
|
234
|
+
next unless delivery_method.calculator.has_preference?(key)
|
|
235
|
+
|
|
236
|
+
delivery_method.calculator.set_preference(key, value)
|
|
237
|
+
end
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
end
|
|
242
|
+
end
|
|
243
|
+
end
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Admin
|
|
5
|
+
module DeliveryProfiles
|
|
6
|
+
# Origin groups of one delivery profile. `stock_location_ids`
|
|
7
|
+
# replaces the group's full membership; empty means every store
|
|
8
|
+
# location. Deleting a group cascades to its zones and methods;
|
|
9
|
+
# only the profile's last group refuses to go.
|
|
10
|
+
class OriginGroupsController < ResourceController
|
|
11
|
+
scoped_resource :settings
|
|
12
|
+
|
|
13
|
+
def create
|
|
14
|
+
@resource = scope.new(assignable_params)
|
|
15
|
+
authorize_resource!(@resource, :create)
|
|
16
|
+
|
|
17
|
+
if @resource.save
|
|
18
|
+
render json: serialize_resource(@resource), status: :created
|
|
19
|
+
else
|
|
20
|
+
render_validation_error(@resource.errors)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def update
|
|
25
|
+
@resource.assign_attributes(assignable_params)
|
|
26
|
+
|
|
27
|
+
if @resource.save
|
|
28
|
+
render json: serialize_resource(@resource)
|
|
29
|
+
else
|
|
30
|
+
render_validation_error(@resource.errors)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
protected
|
|
35
|
+
|
|
36
|
+
def model_class
|
|
37
|
+
Spree::DeliveryOriginGroup
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def serializer_class
|
|
41
|
+
Spree.api.admin_delivery_origin_group_serializer
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def scope
|
|
45
|
+
parent_profile.delivery_origin_groups.ordered
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def permitted_params
|
|
49
|
+
params.permit(*model_additional_permitted_attributes, :name, :position, stock_location_ids: [])
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def collection_includes
|
|
53
|
+
[:stock_locations]
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
private
|
|
57
|
+
|
|
58
|
+
def parent_profile
|
|
59
|
+
@parent_profile ||= current_store.delivery_profiles.
|
|
60
|
+
accessible_by(current_ability, :show).
|
|
61
|
+
find_by_prefix_id!(params[:delivery_profile_id])
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def assignable_params
|
|
65
|
+
attributes = permitted_params.except(:stock_location_ids)
|
|
66
|
+
|
|
67
|
+
if params.key?(:stock_location_ids)
|
|
68
|
+
attributes[:stock_locations] = Array(params[:stock_location_ids]).map do |id|
|
|
69
|
+
current_store.stock_locations.accessible_by(current_ability, :show).find_by_prefix_id!(id)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
attributes
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Admin
|
|
5
|
+
# Fulfillment profiles — the grouping that decides how a set of
|
|
6
|
+
# products ships (origins, zones, methods). Stock-location membership
|
|
7
|
+
# is managed atomically through the profile: `stock_location_ids`
|
|
8
|
+
# replaces the full set; an empty array means every store location.
|
|
9
|
+
class DeliveryProfilesController < ResourceController
|
|
10
|
+
scoped_resource :settings
|
|
11
|
+
|
|
12
|
+
# GET /api/v3/admin/delivery_profiles/kinds
|
|
13
|
+
# Registered profile kinds, so admin UIs offer extension-added
|
|
14
|
+
# kinds without hardcoding the built-ins.
|
|
15
|
+
def kinds
|
|
16
|
+
authorize! :create, model_class
|
|
17
|
+
|
|
18
|
+
data = Spree.delivery_profile_types.map do |profile_class|
|
|
19
|
+
{
|
|
20
|
+
type: profile_class.to_s,
|
|
21
|
+
kind: profile_class.api_type
|
|
22
|
+
}
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
render json: { data: data }
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def create
|
|
29
|
+
@resource = model_class.new(assignable_params)
|
|
30
|
+
authorize_resource!(@resource, :create)
|
|
31
|
+
|
|
32
|
+
if @resource.save
|
|
33
|
+
apply_default_group_locations(@resource)
|
|
34
|
+
render json: serialize_resource(@resource), status: :created
|
|
35
|
+
else
|
|
36
|
+
render_validation_error(@resource.errors)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def update
|
|
41
|
+
@resource.assign_attributes(assignable_params)
|
|
42
|
+
|
|
43
|
+
if @resource.save
|
|
44
|
+
apply_default_group_locations(@resource)
|
|
45
|
+
render json: serialize_resource(@resource)
|
|
46
|
+
else
|
|
47
|
+
render_validation_error(@resource.errors)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
protected
|
|
52
|
+
|
|
53
|
+
def model_class
|
|
54
|
+
Spree::DeliveryProfile
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def serializer_class
|
|
58
|
+
Spree.api.admin_delivery_profile_serializer
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def scope
|
|
62
|
+
super.order_default
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def permitted_params
|
|
66
|
+
params.permit(*model_additional_permitted_attributes, :name, :default, :position, :kind, stock_location_ids: [])
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def collection_includes
|
|
70
|
+
[delivery_origin_groups: :stock_locations]
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
private
|
|
74
|
+
|
|
75
|
+
def assignable_params
|
|
76
|
+
attributes = permitted_params.except(:kind, :stock_location_ids)
|
|
77
|
+
|
|
78
|
+
if @resource.nil?
|
|
79
|
+
attributes[:type] = params.key?(:kind) ? resolve_kind(params[:kind]).to_s : Spree::DeliveryProfiles::Shipping.to_s
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
attributes
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
# The profile-level shorthand writes the default origin group's
|
|
86
|
+
# membership — one call keeps working for single-group stores;
|
|
87
|
+
# multi-group stores manage members through the nested endpoint.
|
|
88
|
+
def apply_default_group_locations(profile)
|
|
89
|
+
return unless params.key?(:stock_location_ids)
|
|
90
|
+
|
|
91
|
+
locations = Array(params[:stock_location_ids]).map do |id|
|
|
92
|
+
current_store.stock_locations.accessible_by(current_ability, :show).find_by_prefix_id!(id)
|
|
93
|
+
end
|
|
94
|
+
profile.default_origin_group&.stock_locations = locations
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
# The wire kind (`shipping`, `digital`) resolves against the
|
|
98
|
+
# registry; an unknown kind is a client error, not a constantize.
|
|
99
|
+
def resolve_kind(kind)
|
|
100
|
+
Spree.delivery_profile_types.find { |klass| klass.api_type == kind.to_s } ||
|
|
101
|
+
raise(ActiveRecord::RecordNotFound)
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Admin
|
|
5
|
+
# Delivery zones with typed members (country / state / postal_code).
|
|
6
|
+
# Members are managed atomically through the zone: `members` in the
|
|
7
|
+
# payload replaces the full member set.
|
|
8
|
+
class DeliveryZonesController < ResourceController
|
|
9
|
+
scoped_resource :settings
|
|
10
|
+
|
|
11
|
+
def create
|
|
12
|
+
@resource = model_class.new(zone_params)
|
|
13
|
+
authorize_resource!(@resource, :create)
|
|
14
|
+
|
|
15
|
+
build_members(@resource) if params.key?(:members)
|
|
16
|
+
|
|
17
|
+
if @resource.save
|
|
18
|
+
render json: serialize_resource(@resource), status: :created
|
|
19
|
+
else
|
|
20
|
+
render_validation_error(@resource.errors)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def update
|
|
25
|
+
@resource.assign_attributes(zone_params)
|
|
26
|
+
|
|
27
|
+
model_class.transaction do
|
|
28
|
+
if params.key?(:members)
|
|
29
|
+
@resource.members.destroy_all
|
|
30
|
+
build_members(@resource)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
if @resource.save
|
|
34
|
+
render json: serialize_resource(@resource)
|
|
35
|
+
else
|
|
36
|
+
render_validation_error(@resource.errors)
|
|
37
|
+
raise ActiveRecord::Rollback
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
protected
|
|
43
|
+
|
|
44
|
+
def model_class
|
|
45
|
+
Spree::DeliveryZone
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def serializer_class
|
|
49
|
+
Spree.api.admin_delivery_zone_serializer
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def permitted_params
|
|
53
|
+
params.permit(
|
|
54
|
+
*model_additional_permitted_attributes,
|
|
55
|
+
:name, :description, :delivery_profile_id, :delivery_origin_group_id,
|
|
56
|
+
members: [:member_type, :country_code, :state_code, :postal_code_prefix, :postal_code_from, :postal_code_to]
|
|
57
|
+
)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def collection_includes
|
|
61
|
+
[:members]
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
private
|
|
65
|
+
|
|
66
|
+
# A zone always lives inside a profile; absent an explicit one it
|
|
67
|
+
# joins the store default.
|
|
68
|
+
def zone_params
|
|
69
|
+
attributes = permitted_params.except(:members, :delivery_profile_id, :delivery_origin_group_id)
|
|
70
|
+
if params.key?(:delivery_profile_id) && params[:delivery_profile_id].present?
|
|
71
|
+
attributes[:delivery_profile] = current_store.delivery_profiles.accessible_by(current_ability, :show).find_by_prefix_id!(params[:delivery_profile_id])
|
|
72
|
+
end
|
|
73
|
+
if params.key?(:delivery_origin_group_id) && params[:delivery_origin_group_id].present?
|
|
74
|
+
attributes[:delivery_origin_group] = current_store.delivery_origin_groups.accessible_by(current_ability, :show).find_by_prefix_id!(params[:delivery_origin_group_id])
|
|
75
|
+
end
|
|
76
|
+
attributes
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Members are stored as codes. A subdivision may be given by code or
|
|
80
|
+
# by name, and a state member without a country has its country
|
|
81
|
+
# inferred — a code alone is ambiguous ("CA" is California and
|
|
82
|
+
# several other places), so an inference matching more than one
|
|
83
|
+
# country is rejected rather than guessed at.
|
|
84
|
+
def build_members(zone)
|
|
85
|
+
Array(permitted_params[:members]).each do |member|
|
|
86
|
+
attributes = member.to_h.symbolize_keys
|
|
87
|
+
country_code = attributes[:country_code].presence&.to_s&.upcase
|
|
88
|
+
state_value = attributes[:state_code].presence
|
|
89
|
+
|
|
90
|
+
if state_value.present?
|
|
91
|
+
country_code ||= infer_country_code_for_state(state_value)
|
|
92
|
+
attributes[:state_code] = Spree::IsoData.subdivision_code(country_code, state_value) if country_code
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
attributes[:country_code] = country_code
|
|
96
|
+
zone.members.build(attributes)
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# Returns nil when the code is ambiguous, which leaves the member
|
|
101
|
+
# without a country for its presence validation to reject — better
|
|
102
|
+
# than silently picking one of several matching countries.
|
|
103
|
+
#
|
|
104
|
+
# @return [String, nil] the only country whose subdivisions match, if exactly one does
|
|
105
|
+
def infer_country_code_for_state(state_value)
|
|
106
|
+
matches = Spree::IsoData.countries.map(&:alpha2).select do |iso|
|
|
107
|
+
Spree::IsoData.subdivision_code(iso, state_value).present?
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
matches.one? ? matches.first : nil
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Admin
|
|
5
|
+
class DigitalLinksController < ResourceController
|
|
6
|
+
scoped_resource :orders
|
|
7
|
+
|
|
8
|
+
before_action :set_resource, only: [:reset]
|
|
9
|
+
|
|
10
|
+
# PATCH /api/v3/admin/digital_links/:id/reset
|
|
11
|
+
#
|
|
12
|
+
# Gives the customer their download allowance back and restarts the
|
|
13
|
+
# expiry clock — the remedy when a download failed or a file was
|
|
14
|
+
# replaced after they had used up their attempts.
|
|
15
|
+
def reset
|
|
16
|
+
@resource.reset!
|
|
17
|
+
|
|
18
|
+
render json: serialize_resource(@resource)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
protected
|
|
22
|
+
|
|
23
|
+
def model_class
|
|
24
|
+
Spree::DigitalLink
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def serializer_class
|
|
28
|
+
Spree.api.admin_digital_link_serializer
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# `digital_links` reaches links through line items, so the query
|
|
32
|
+
# carries a DISTINCT and inherits an ORDER BY on the line items'
|
|
33
|
+
# table. PostgreSQL rejects DISTINCT combined with an ORDER BY column
|
|
34
|
+
# outside the select list, so reorder by the links' own table —
|
|
35
|
+
# SQLite tolerates the inherited order, so this only surfaces on a
|
|
36
|
+
# real deployment.
|
|
37
|
+
def scope
|
|
38
|
+
current_store.digital_links.reorder("#{Spree::DigitalLink.table_name}.created_at": :desc)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def scope_includes
|
|
42
|
+
[:line_item, digital_asset: { attachment_attachment: :blob }]
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -3,6 +3,8 @@ module Spree
|
|
|
3
3
|
module V3
|
|
4
4
|
module Admin
|
|
5
5
|
class DirectUploadsController < Admin::BaseController
|
|
6
|
+
include Spree::Api::V3::DirectUploads
|
|
7
|
+
|
|
6
8
|
# Direct uploads is a write-adjacent presigning helper: callers exchange
|
|
7
9
|
# blob metadata for an upload URL, then reference the resulting
|
|
8
10
|
# signed_id when creating/updating a resource (product media, customer
|
|
@@ -16,8 +18,12 @@ module Spree
|
|
|
16
18
|
skip_before_action :authenticate_user
|
|
17
19
|
|
|
18
20
|
# POST /api/v3/admin/direct_uploads
|
|
21
|
+
#
|
|
22
|
+
# Overrides the shared concern's create to select the storage service:
|
|
23
|
+
# digital assets must land on private storage up front, since attaching
|
|
24
|
+
# a signed id never moves a blob between services.
|
|
19
25
|
def create
|
|
20
|
-
blob = ActiveStorage::Blob.create_before_direct_upload!(**blob_params)
|
|
26
|
+
blob = ActiveStorage::Blob.create_before_direct_upload!(service_name: storage_service_name, **blob_params)
|
|
21
27
|
|
|
22
28
|
render json: {
|
|
23
29
|
direct_upload: {
|
|
@@ -30,8 +36,16 @@ module Spree
|
|
|
30
36
|
|
|
31
37
|
private
|
|
32
38
|
|
|
33
|
-
|
|
34
|
-
|
|
39
|
+
# Attaching a signed id never moves the blob between services, so a
|
|
40
|
+
# file destined for a private attachment has to be uploaded to the
|
|
41
|
+
# private service up front. `private: true` asks for that; everything
|
|
42
|
+
# else keeps landing on the public service as before.
|
|
43
|
+
def storage_service_name
|
|
44
|
+
if params[:private].to_b
|
|
45
|
+
Spree.private_storage_service_name
|
|
46
|
+
else
|
|
47
|
+
Spree.public_storage_service_name
|
|
48
|
+
end
|
|
35
49
|
end
|
|
36
50
|
end
|
|
37
51
|
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Admin
|
|
5
|
+
# Cross-order listing of exchanges — "what is awaiting fulfillment
|
|
6
|
+
# across the whole store". Read-only by route: opening an exchange
|
|
7
|
+
# needs an order, so creation and the status transitions stay on the
|
|
8
|
+
# nested Orders::ExchangesController.
|
|
9
|
+
class ExchangesController < ResourceController
|
|
10
|
+
# Post-sale records are order data: a key that may read orders may
|
|
11
|
+
# read these, and nothing here writes.
|
|
12
|
+
scoped_resource :orders
|
|
13
|
+
|
|
14
|
+
protected
|
|
15
|
+
|
|
16
|
+
def model_class
|
|
17
|
+
Spree::Exchange
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def serializer_class
|
|
21
|
+
Spree.api.admin_exchange_serializer
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def collection_includes
|
|
25
|
+
[:order, :reason, :stock_location, { exchange_line_items: [:original_variant, :new_variant] }]
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -98,7 +98,7 @@ module Spree
|
|
|
98
98
|
# is intentionally dropped — only CSV is supported and Rails' request
|
|
99
99
|
# format would otherwise overwrite the model's enum.
|
|
100
100
|
def permitted_params
|
|
101
|
-
attrs = params.permit(:type, :record_selection, :results_url)
|
|
101
|
+
attrs = params.permit(*model_additional_permitted_attributes, :type, :record_selection, :results_url)
|
|
102
102
|
raw = params[:search_params]
|
|
103
103
|
attrs[:search_params] = raw.respond_to?(:to_unsafe_h) ? raw.to_unsafe_h : raw if raw.present?
|
|
104
104
|
attrs
|
|
@@ -118,7 +118,7 @@ module Spree
|
|
|
118
118
|
return nil if name.blank?
|
|
119
119
|
|
|
120
120
|
name = name.to_s
|
|
121
|
-
Spree::Export.available_types.find { |type| type.api_type == name
|
|
121
|
+
Spree::Export.available_types.find { |type| type.api_type == name }
|
|
122
122
|
end
|
|
123
123
|
|
|
124
124
|
private
|