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,95 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Seller
|
|
5
|
+
# What a seller submits about one requirement: an attestation they
|
|
6
|
+
# tick, a document they upload, a reference they paste.
|
|
7
|
+
#
|
|
8
|
+
# Create only. A submission records what was said and when — editing
|
|
9
|
+
# one would rewrite that history, and withdrawing is not a thing a
|
|
10
|
+
# seller does: they submit again, and the latest one counts. Accepting,
|
|
11
|
+
# rejecting and waiving belong to the operator, on their own branch.
|
|
12
|
+
class RequirementSubmissionsController < Seller::BaseController
|
|
13
|
+
scoped_resource :seller_profile
|
|
14
|
+
|
|
15
|
+
before_action :set_requirement, only: [:create]
|
|
16
|
+
before_action :set_submission, only: [:download]
|
|
17
|
+
|
|
18
|
+
# POST /api/v3/seller/requirements/:requirement_id/submissions
|
|
19
|
+
def create
|
|
20
|
+
attributes = permitted_params
|
|
21
|
+
|
|
22
|
+
result = Spree.seller_requirement_submission_create_workflow.call(
|
|
23
|
+
seller: current_seller,
|
|
24
|
+
requirement: @requirement,
|
|
25
|
+
note: attributes[:note],
|
|
26
|
+
reference: attributes[:reference],
|
|
27
|
+
file: attributes[:file],
|
|
28
|
+
submitted_by: try_spree_current_user
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
return render_service_error(result.error) unless result.success?
|
|
32
|
+
|
|
33
|
+
render json: serialize(result.value), status: :created
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# GET /api/v3/seller/requirement_submissions/:id/download
|
|
37
|
+
#
|
|
38
|
+
# Authorized per request rather than served from a storage URL:
|
|
39
|
+
# these are identity documents, and a link that works for anyone
|
|
40
|
+
# holding it is not a property we want them to have.
|
|
41
|
+
def download
|
|
42
|
+
unless @submission.file.attached?
|
|
43
|
+
return render_error(
|
|
44
|
+
code: ErrorHandler::ERROR_CODES[:validation_error],
|
|
45
|
+
message: Spree.t(:seller_submission_no_file),
|
|
46
|
+
status: :unprocessable_content
|
|
47
|
+
)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
send_data(
|
|
51
|
+
@submission.file.download,
|
|
52
|
+
filename: @submission.file.filename.to_s,
|
|
53
|
+
type: @submission.file.content_type,
|
|
54
|
+
disposition: 'attachment'
|
|
55
|
+
)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
protected
|
|
59
|
+
|
|
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
|
+
def permitted_params
|
|
64
|
+
params.permit(:note, :reference, :file)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def read_actions
|
|
68
|
+
%w[download]
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
private
|
|
72
|
+
|
|
73
|
+
# Through the store's own checklist: a requirement id belonging to
|
|
74
|
+
# another marketplace 404s rather than letting a seller submit
|
|
75
|
+
# against someone else's configuration.
|
|
76
|
+
def set_requirement
|
|
77
|
+
@requirement = current_store.seller_requirements.find_by_prefix_id!(params[:requirement_id])
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Through the seller, so one seller can never read another's
|
|
81
|
+
# documents.
|
|
82
|
+
def set_submission
|
|
83
|
+
@submission = current_seller.requirement_submissions.find_by_prefix_id!(params[:id])
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def serialize(submission)
|
|
87
|
+
Spree.api.seller_requirement_submission_serializer.new(
|
|
88
|
+
submission, params: { store: current_store }
|
|
89
|
+
).to_h
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Seller
|
|
5
|
+
# Anchor for seller-facing CRUD.
|
|
6
|
+
#
|
|
7
|
+
# Mirrors Seller::BaseController's concerns; any concern added to one
|
|
8
|
+
# must be added to the other, since they anchor parallel inheritance
|
|
9
|
+
# branches rather than one chain.
|
|
10
|
+
class ResourceController < Spree::Api::V3::ResourceController
|
|
11
|
+
include Spree::Api::V3::Seller::SellerContext
|
|
12
|
+
include Spree::Api::V3::SellerAuthentication
|
|
13
|
+
include Spree::Api::V3::ScopedAuthorization
|
|
14
|
+
|
|
15
|
+
protected
|
|
16
|
+
|
|
17
|
+
def authenticate_request!
|
|
18
|
+
authenticate_seller!
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Every collection is rooted in the seller's own records.
|
|
22
|
+
#
|
|
23
|
+
# The inherited implementation roots at `for_store(current_store)`,
|
|
24
|
+
# which on this branch would hand a seller the whole marketplace —
|
|
25
|
+
# so subclasses name a `seller_association` and the root scope comes
|
|
26
|
+
# from the seller itself. Tenancy is this fetch, not the ability:
|
|
27
|
+
# authorizing without it reads store-wide.
|
|
28
|
+
#
|
|
29
|
+
# Tenancy is all this roots, though — it does not judge whether a
|
|
30
|
+
# record is the seller's business. A controller reaching orders must
|
|
31
|
+
# also exclude drafts, which `current_seller_orders` does.
|
|
32
|
+
def scope
|
|
33
|
+
return super if @parent.present?
|
|
34
|
+
|
|
35
|
+
base_scope = current_seller.public_send(seller_association)
|
|
36
|
+
base_scope = base_scope.includes(scope_includes) if scope_includes.any?
|
|
37
|
+
base_scope = base_scope.preload_associations_lazily
|
|
38
|
+
model_class.include?(Spree::TranslatableResource) ? base_scope.i18n : base_scope
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# A new record is this seller's, whatever the payload says, and its
|
|
42
|
+
# store follows the seller rather than the request.
|
|
43
|
+
def resource_scope
|
|
44
|
+
return super if @parent.present?
|
|
45
|
+
|
|
46
|
+
current_seller.public_send(seller_association)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def build_resource
|
|
50
|
+
resource = super
|
|
51
|
+
resource.store = current_store if resource.respond_to?(:store=)
|
|
52
|
+
resource
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# The seller association this controller reads through, defaulting to
|
|
56
|
+
# the model's plural name (`Spree::Product` -> `products`). Override
|
|
57
|
+
# when the association is named differently.
|
|
58
|
+
#
|
|
59
|
+
# @return [Symbol]
|
|
60
|
+
def seller_association
|
|
61
|
+
model_class.table_name.delete_prefix('spree_').to_sym
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def authorize_resource!(resource = @resource, action = action_name.to_sym)
|
|
65
|
+
authorize!(action, resource)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def authorize_parent!(parent)
|
|
69
|
+
authorize!(parent_ability_action, parent)
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Seller
|
|
5
|
+
# Why goods come back.
|
|
6
|
+
class ReturnReasonsController < ReasonsController
|
|
7
|
+
protected
|
|
8
|
+
|
|
9
|
+
def model_class
|
|
10
|
+
Spree::ReturnReason
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def reasons_association
|
|
14
|
+
:return_reasons
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Seller
|
|
5
|
+
# A seller's own stock locations — where their inventory sits and
|
|
6
|
+
# where customer returns are sent.
|
|
7
|
+
#
|
|
8
|
+
# Rooted in `current_seller.stock_locations`, so an id belonging to
|
|
9
|
+
# the operator or to another seller is a 404. That matters more here
|
|
10
|
+
# than on most collections: a stock location is an address a shopper
|
|
11
|
+
# is given, and the operator's warehouse address is not a seller's to
|
|
12
|
+
# read or to hand out.
|
|
13
|
+
#
|
|
14
|
+
# No destroy: a location holds stock levels and is named on historical
|
|
15
|
+
# fulfillments, so removing one is an inventory operation rather than
|
|
16
|
+
# a delete. A seller retires a location by deactivating it.
|
|
17
|
+
class StockLocationsController < Seller::ResourceController
|
|
18
|
+
# `:stock`, the catalog resource that lists `Spree::StockLocation`
|
|
19
|
+
# among its subjects — there is no `stock_locations` resource, and a
|
|
20
|
+
# name the catalog does not know skips the key gate entirely rather
|
|
21
|
+
# than failing loudly. Writes take `write_stock` here where the
|
|
22
|
+
# operator's twin takes `write_settings`: another seller's warehouse
|
|
23
|
+
# is store-wide administration, but a seller's own is just their
|
|
24
|
+
# stock.
|
|
25
|
+
scoped_resource :stock
|
|
26
|
+
|
|
27
|
+
protected
|
|
28
|
+
|
|
29
|
+
def model_class
|
|
30
|
+
Spree::StockLocation
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def serializer_class
|
|
34
|
+
Spree.api.seller_stock_location_serializer
|
|
35
|
+
end
|
|
36
|
+
|
|
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
|
+
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
|
+
)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Seller
|
|
5
|
+
# The seller's own tax registrations — the numbers the marketplace's
|
|
6
|
+
# commission invoice is made out to, and what makes EU reverse charge
|
|
7
|
+
# on that fee possible.
|
|
8
|
+
#
|
|
9
|
+
# A collection rather than a single field, for the same reason a
|
|
10
|
+
# company's is: a business trading in more than one regime holds a
|
|
11
|
+
# registration in each, and they are not alternatives. One per kind,
|
|
12
|
+
# which the model enforces.
|
|
13
|
+
#
|
|
14
|
+
# Rooted in `current_seller.tax_identifiers`, so an id belonging to
|
|
15
|
+
# another seller is a 404.
|
|
16
|
+
class TaxIdentifiersController < Seller::ResourceController
|
|
17
|
+
include Spree::Api::V3::TaxIdentifierValidation
|
|
18
|
+
|
|
19
|
+
# Part of the seller's own identity, like the legal name and billing
|
|
20
|
+
# address the profile carries — not a store-wide setting.
|
|
21
|
+
scoped_resource :seller_profile
|
|
22
|
+
|
|
23
|
+
# Re-declaring the filter replaces the inherited options, so the
|
|
24
|
+
# standard actions have to be listed alongside the custom one.
|
|
25
|
+
before_action :set_resource, only: [:show, :update, :destroy, :validate]
|
|
26
|
+
|
|
27
|
+
protected
|
|
28
|
+
|
|
29
|
+
def model_class
|
|
30
|
+
Spree::TaxIdentifier
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def serializer_class
|
|
34
|
+
Spree.api.seller_tax_identifier_serializer
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def seller_association
|
|
38
|
+
:tax_identifiers
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def permitted_params
|
|
42
|
+
params.permit(:kind, :value)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Seller
|
|
5
|
+
# The people who run this seller.
|
|
6
|
+
#
|
|
7
|
+
# Rooted at `current_seller` throughout, so a seller can only ever see
|
|
8
|
+
# and change their own team. Inviting reuses the workflow the operator
|
|
9
|
+
# calls, which means one invitation rail and one set of hooks.
|
|
10
|
+
#
|
|
11
|
+
# No custom roles: every member holds the seller's own seeded admin
|
|
12
|
+
# role, which already carries the whole seller vocabulary. Splitting
|
|
13
|
+
# that into narrower roles is a design of its own.
|
|
14
|
+
class TeamController < Seller::BaseController
|
|
15
|
+
scoped_resource :seller_profile
|
|
16
|
+
|
|
17
|
+
before_action :set_member, only: [:destroy]
|
|
18
|
+
|
|
19
|
+
def index
|
|
20
|
+
render json: { data: members.map { |member| serialize_member(member) } }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# Invites a colleague onto this seller's team. They join when they
|
|
24
|
+
# accept, on the same invitation rail — and same email — the
|
|
25
|
+
# marketplace operator's invitations use.
|
|
26
|
+
#
|
|
27
|
+
# Not `Spree::Sellers::Invite`: that workflow means "open this seller
|
|
28
|
+
# for its first owner" and moves the seller to `invited`. A trading
|
|
29
|
+
# seller's status must not flip because someone hired staff, and the
|
|
30
|
+
# workflow rightly refuses an approved seller. Hiring is not a
|
|
31
|
+
# lifecycle transition.
|
|
32
|
+
def create
|
|
33
|
+
invitation = current_seller.invitations.new(
|
|
34
|
+
email: params[:email],
|
|
35
|
+
role: current_seller.default_user_role,
|
|
36
|
+
inviter: try_spree_current_user
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
if invitation.save
|
|
40
|
+
render json: serialize_invitation(invitation), status: :created
|
|
41
|
+
else
|
|
42
|
+
render_validation_error(invitation.errors)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# Revokes a member's access. The seller keeps at least one member:
|
|
47
|
+
# emptying the team would leave a seller nobody can sign in to, and
|
|
48
|
+
# only the operator could put someone back.
|
|
49
|
+
#
|
|
50
|
+
# Counted and removed under a lock on the seller. Unlocked, two
|
|
51
|
+
# concurrent deletes against a two-member team both see two and both
|
|
52
|
+
# proceed — the one state this endpoint exists to prevent, and one a
|
|
53
|
+
# seller cannot repair themselves.
|
|
54
|
+
def destroy
|
|
55
|
+
removed = current_seller.with_lock do
|
|
56
|
+
# `distinct`: `users` reaches through role_users, so a member
|
|
57
|
+
# holding two roles on this seller is counted twice — while
|
|
58
|
+
# `remove_user` deletes every one of their roles at once. Without
|
|
59
|
+
# it, a two-role seller with one person reads as a team of two
|
|
60
|
+
# and this check would let them remove themselves.
|
|
61
|
+
next false if current_seller.users.distinct.count <= 1
|
|
62
|
+
|
|
63
|
+
current_seller.remove_user(@member)
|
|
64
|
+
true
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
return head :no_content if removed
|
|
68
|
+
|
|
69
|
+
render_error(
|
|
70
|
+
code: ErrorHandler::ERROR_CODES[:processing_error],
|
|
71
|
+
message: Spree.t(:seller_team_last_member),
|
|
72
|
+
status: :unprocessable_content
|
|
73
|
+
)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
protected
|
|
77
|
+
|
|
78
|
+
def read_actions
|
|
79
|
+
%w[index]
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
private
|
|
83
|
+
|
|
84
|
+
def members
|
|
85
|
+
@members ||= current_seller.users.to_a
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def set_member
|
|
89
|
+
@member = current_seller.users.find_by_prefix_id!(params[:id])
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
def serialize_member(member)
|
|
93
|
+
Spree.api.seller_team_member_serializer.new(member, params: { store: current_store }).to_h
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def serialize_invitation(invitation)
|
|
97
|
+
Spree.api.seller_invitation_serializer.new(invitation, params: { store: current_store }).to_h
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Seller
|
|
5
|
+
# The registered carriers a tracking number can be pinned to.
|
|
6
|
+
#
|
|
7
|
+
# Registry data (`Spree.tracking_carriers`) rather than store records,
|
|
8
|
+
# so the seller's carrier picker renders from the same list the
|
|
9
|
+
# operator's does and a carrier added by an extension appears without
|
|
10
|
+
# a client change. Gated by `fulfillments`: a seller reads these while
|
|
11
|
+
# marking a parcel sent.
|
|
12
|
+
class TrackingCarriersController < Seller::BaseController
|
|
13
|
+
scoped_resource :fulfillments
|
|
14
|
+
|
|
15
|
+
# GET /api/v3/seller/tracking_carriers
|
|
16
|
+
def index
|
|
17
|
+
authorize! :update, Spree::Fulfillment
|
|
18
|
+
|
|
19
|
+
data = Spree.tracking_carriers.map do |slug, carrier|
|
|
20
|
+
{ id: slug, name: carrier[:name] }
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
render json: { data: data.sort_by { |carrier| carrier[:name] } }
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
protected
|
|
27
|
+
|
|
28
|
+
def read_actions
|
|
29
|
+
%w[index]
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Seller
|
|
5
|
+
# What this seller has earned, order by order.
|
|
6
|
+
#
|
|
7
|
+
# Read-only: a transfer records money that moved, or is moving, and
|
|
8
|
+
# what corrects it is a reversal — another row, written by the refund
|
|
9
|
+
# — rather than an edit. Rooted in `current_seller.seller_transfers`,
|
|
10
|
+
# so another seller's row is a 404 by construction.
|
|
11
|
+
class TransfersController < Seller::ResourceController
|
|
12
|
+
scoped_resource :seller_earnings
|
|
13
|
+
|
|
14
|
+
protected
|
|
15
|
+
|
|
16
|
+
def model_class
|
|
17
|
+
Spree::SellerTransfer
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def serializer_class
|
|
21
|
+
Spree.api.seller_transfer_serializer
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def scope
|
|
25
|
+
super.order(created_at: :desc)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def collection_includes
|
|
29
|
+
[:order, :payout, :reversed_from]
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# The ledger classes belong to `payouts`, the operator's key, which a
|
|
33
|
+
# seller never holds. The question this endpoint asks is "may this
|
|
34
|
+
# seller read their own books", which is what `:seller_earnings`
|
|
35
|
+
# answers; which rows are theirs is the scope above.
|
|
36
|
+
def authorize_resource!(_resource = @resource, action = action_name.to_sym)
|
|
37
|
+
authorize!(action, :seller_earnings)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Store
|
|
5
|
+
module Account
|
|
6
|
+
# The signed-in buyer's company memberships — each with its node and
|
|
7
|
+
# ancestor path, so an account page can offer "buying for" choices
|
|
8
|
+
# in one request.
|
|
9
|
+
class CompaniesController < ResourceController
|
|
10
|
+
prepend_before_action :require_authentication!
|
|
11
|
+
|
|
12
|
+
# GET /api/v3/store/account/companies
|
|
13
|
+
def index
|
|
14
|
+
memberships = current_user.company_memberships.
|
|
15
|
+
joins(:company).
|
|
16
|
+
merge(Spree::Company.where(store_id: current_store.id)).
|
|
17
|
+
includes(company: :parent)
|
|
18
|
+
|
|
19
|
+
render json: {
|
|
20
|
+
'data' => memberships.map do |membership|
|
|
21
|
+
Spree.api.company_membership_serializer.new(membership, params: serializer_params).to_h.merge(
|
|
22
|
+
'company' => Spree.api.company_serializer.new(membership.company, params: serializer_params).to_h
|
|
23
|
+
)
|
|
24
|
+
end
|
|
25
|
+
}
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
protected
|
|
29
|
+
|
|
30
|
+
def model_class
|
|
31
|
+
Spree::CompanyMembership
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def serializer_class
|
|
35
|
+
Spree.api.company_membership_serializer
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -3,11 +3,16 @@ module Spree
|
|
|
3
3
|
module V3
|
|
4
4
|
module Store
|
|
5
5
|
class AuthController < Store::BaseController
|
|
6
|
+
include Spree::Api::V3::AuthenticationStrategies
|
|
7
|
+
|
|
6
8
|
allow_guest_storefront_access!
|
|
7
|
-
# Tighter rate limits for auth endpoints (per IP to prevent brute
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
# Tighter rate limits for auth endpoints (per IP to prevent brute
|
|
10
|
+
# force). Distinct `name:` per declaration — without one, Rails keys
|
|
11
|
+
# every counter in this controller on the same (controller, client)
|
|
12
|
+
# cache entry, silently merging the budgets.
|
|
13
|
+
rate_limit to: Spree::Api::Config[:rate_limit_login], within: Spree::Api::Config[:rate_limit_window].seconds, store: Rails.cache, only: :create, name: 'login', with: -> { render_rate_limited(limit: Spree::Api::Config[:rate_limit_login]) }
|
|
14
|
+
rate_limit to: Spree::Api::Config[:rate_limit_refresh], within: Spree::Api::Config[:rate_limit_window].seconds, store: Rails.cache, only: :refresh, name: 'refresh', with: -> { render_rate_limited(limit: Spree::Api::Config[:rate_limit_refresh]) }
|
|
15
|
+
rate_limit to: Spree::Api::Config[:rate_limit_refresh], within: Spree::Api::Config[:rate_limit_window].seconds, store: Rails.cache, only: :logout, name: 'logout', with: -> { render_rate_limited(limit: Spree::Api::Config[:rate_limit_refresh]) }
|
|
11
16
|
|
|
12
17
|
skip_before_action :authenticate_user, only: [:create, :refresh, :logout]
|
|
13
18
|
|
|
@@ -17,7 +22,7 @@ module Spree
|
|
|
17
22
|
# { "provider": "email", "email": "...", "password": "..." }
|
|
18
23
|
def create
|
|
19
24
|
strategy = authentication_strategy
|
|
20
|
-
return unless strategy # Error already rendered by
|
|
25
|
+
return unless strategy # Error already rendered by authentication_strategy
|
|
21
26
|
|
|
22
27
|
result = strategy.authenticate
|
|
23
28
|
|
|
@@ -47,7 +52,7 @@ module Spree
|
|
|
47
52
|
)
|
|
48
53
|
end
|
|
49
54
|
|
|
50
|
-
refresh_token = Spree::RefreshToken.active.find_by(token: refresh_token_value)
|
|
55
|
+
refresh_token = Spree::RefreshToken.active.for_audience(JWT_AUDIENCE_STORE).find_by(token: refresh_token_value)
|
|
51
56
|
|
|
52
57
|
if refresh_token.nil?
|
|
53
58
|
return render_error(
|
|
@@ -71,11 +76,14 @@ module Spree
|
|
|
71
76
|
# Accepts: { "refresh_token": "rt_xxx" }
|
|
72
77
|
# Revokes the submitted refresh token. The token itself is the
|
|
73
78
|
# credential — no access JWT is required, so clients with an expired
|
|
74
|
-
# access token can still log out.
|
|
79
|
+
# access token can still log out. Narrowed to this surface's own
|
|
80
|
+
# tokens: ending a session belongs to the surface that started it.
|
|
75
81
|
def logout
|
|
76
82
|
refresh_token_value = params[:refresh_token]
|
|
77
83
|
|
|
78
|
-
|
|
84
|
+
if refresh_token_value.present?
|
|
85
|
+
Spree::RefreshToken.for_audience(JWT_AUDIENCE_STORE).find_by(token: refresh_token_value)&.destroy
|
|
86
|
+
end
|
|
79
87
|
|
|
80
88
|
head :no_content
|
|
81
89
|
end
|
|
@@ -96,7 +104,7 @@ module Spree
|
|
|
96
104
|
private
|
|
97
105
|
|
|
98
106
|
def auth_response(user)
|
|
99
|
-
refresh_token = Spree::RefreshToken.create_for(user, request_env: request_env_for_token)
|
|
107
|
+
refresh_token = Spree::RefreshToken.create_for(user, audience: JWT_AUDIENCE_STORE, request_env: request_env_for_token)
|
|
100
108
|
|
|
101
109
|
{
|
|
102
110
|
token: generate_jwt(user),
|
|
@@ -112,33 +120,12 @@ module Spree
|
|
|
112
120
|
}
|
|
113
121
|
end
|
|
114
122
|
|
|
115
|
-
def
|
|
116
|
-
|
|
117
|
-
return nil unless strategy_class
|
|
118
|
-
|
|
119
|
-
strategy_class.new(
|
|
120
|
-
params: params,
|
|
121
|
-
request_env: request.headers.env,
|
|
122
|
-
user_class: Spree.user_class
|
|
123
|
-
)
|
|
123
|
+
def authentication_strategies
|
|
124
|
+
Spree.store_authentication_strategies
|
|
124
125
|
end
|
|
125
126
|
|
|
126
|
-
def
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
# Retrieve pre-loaded strategy class from configuration
|
|
130
|
-
strategy_class = Spree.store_authentication_strategies[provider]
|
|
131
|
-
|
|
132
|
-
unless strategy_class
|
|
133
|
-
render_error(
|
|
134
|
-
code: ERROR_CODES[:invalid_provider],
|
|
135
|
-
message: "Unsupported authentication provider: #{provider}",
|
|
136
|
-
status: :bad_request
|
|
137
|
-
)
|
|
138
|
-
return nil
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
strategy_class
|
|
127
|
+
def authentication_user_class
|
|
128
|
+
Spree.customer_class
|
|
142
129
|
end
|
|
143
130
|
|
|
144
131
|
def user_serializer
|
|
@@ -3,6 +3,9 @@ module Spree
|
|
|
3
3
|
module V3
|
|
4
4
|
module Store
|
|
5
5
|
class BaseController < Spree::Api::V3::BaseController
|
|
6
|
+
# The publishable key selects the store — must come before
|
|
7
|
+
# ChannelResolution, whose store-context callback reads it.
|
|
8
|
+
include Spree::Api::V3::KeyStoreContext
|
|
6
9
|
# Channel resolution is a Store API concern — admin endpoints return
|
|
7
10
|
# data across all channels and filter via Ransack instead. Including
|
|
8
11
|
# this here keeps the +X-Spree-Channel+ header from accidentally
|
|
@@ -13,6 +16,7 @@ module Spree
|
|
|
13
16
|
# ResourceController ones. Public endpoints opt out with
|
|
14
17
|
# +allow_guest_storefront_access!+.
|
|
15
18
|
include Spree::Api::V3::StorefrontGating
|
|
19
|
+
include Spree::Api::V3::StorefrontAccess
|
|
16
20
|
|
|
17
21
|
# Require publishable API key for all Store API requests. Prepended so
|
|
18
22
|
# the key is authenticated BEFORE ChannelResolution's
|