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
|
@@ -5,6 +5,11 @@ module Spree
|
|
|
5
5
|
class CartsController < Store::ResourceController
|
|
6
6
|
include Spree::Api::V3::CartResolvable
|
|
7
7
|
include Spree::Api::V3::OrderLock
|
|
8
|
+
# The cart accepts a `po_document` signed blob id.
|
|
9
|
+
include ActiveStorage::SetCurrent
|
|
10
|
+
|
|
11
|
+
# A tampered signed id would otherwise surface as a 500.
|
|
12
|
+
rescue_from ActiveSupport::MessageVerifier::InvalidSignature, with: :render_invalid_po_document
|
|
8
13
|
|
|
9
14
|
skip_before_action :set_resource
|
|
10
15
|
prepend_before_action :require_authentication!, only: [:index, :associate]
|
|
@@ -17,12 +22,16 @@ module Spree
|
|
|
17
22
|
def show
|
|
18
23
|
@cart = find_cart
|
|
19
24
|
|
|
20
|
-
|
|
25
|
+
# Never under a live completion claim — the advance mutates under
|
|
26
|
+
# with_order_lock, and a read must not 409 against the fence.
|
|
27
|
+
if @cart.ship_address_id.present? && @cart.fulfillments.empty? && !@cart.completion_claimed?
|
|
21
28
|
ActiveRecord::Base.connected_to(role: :writing) do
|
|
22
29
|
with_order_lock { Spree::Checkout::Advance.call(order: @cart) }
|
|
23
30
|
end
|
|
24
31
|
end
|
|
25
32
|
|
|
33
|
+
# The customer is returning to a cart that may have sat for days.
|
|
34
|
+
sweep_unbuyable_lines!
|
|
26
35
|
render_cart
|
|
27
36
|
end
|
|
28
37
|
|
|
@@ -73,7 +82,7 @@ module Spree
|
|
|
73
82
|
def destroy
|
|
74
83
|
find_cart!
|
|
75
84
|
|
|
76
|
-
result = Spree.cart_destroy_service.call(
|
|
85
|
+
result = Spree.cart_destroy_service.call(cart: @cart)
|
|
77
86
|
|
|
78
87
|
if result.success?
|
|
79
88
|
head :no_content
|
|
@@ -90,12 +99,14 @@ module Spree
|
|
|
90
99
|
# is already the caller's own.
|
|
91
100
|
def associate
|
|
92
101
|
@cart = find_cart_for_association
|
|
93
|
-
|
|
102
|
+
authorize_storefront_write!(@cart, token: cart_token)
|
|
94
103
|
require_cart_token!
|
|
95
104
|
|
|
96
|
-
result = Spree.cart_associate_service.call(
|
|
105
|
+
result = Spree.cart_associate_service.call(guest_cart: @cart, customer: current_user, guest_only: true)
|
|
97
106
|
|
|
98
107
|
if result.success?
|
|
108
|
+
# Signing in hands back a cart built earlier, possibly long ago.
|
|
109
|
+
sweep_unbuyable_lines!
|
|
99
110
|
render_cart
|
|
100
111
|
else
|
|
101
112
|
render_service_error(result.error.to_s)
|
|
@@ -107,13 +118,13 @@ module Spree
|
|
|
107
118
|
# Idempotent: if the cart is already completed, falls back to the
|
|
108
119
|
# orders scope and returns the completed order.
|
|
109
120
|
def complete
|
|
110
|
-
find_cart!
|
|
121
|
+
find_cart!(include_completed: true)
|
|
111
122
|
|
|
112
123
|
if @cart.guest_checkout_disallowed?
|
|
113
124
|
return render_authentication_required('api.errors.guest_checkout_not_allowed', 'You must be signed in to complete checkout')
|
|
114
125
|
end
|
|
115
126
|
|
|
116
|
-
result = Spree::Dependencies.
|
|
127
|
+
result = Spree::Dependencies.carts_complete_workflow.constantize.call(cart: @cart)
|
|
117
128
|
|
|
118
129
|
if result.success?
|
|
119
130
|
@cart = result.value
|
|
@@ -125,14 +136,30 @@ module Spree
|
|
|
125
136
|
)
|
|
126
137
|
end
|
|
127
138
|
rescue ActiveRecord::RecordNotFound
|
|
128
|
-
|
|
129
|
-
|
|
139
|
+
# Gateway-race retry with the id the client got back: the webhook
|
|
140
|
+
# completed the cart and the client re-posts. Foreign prefixes never
|
|
141
|
+
# decode against carts, so this only fires for an order or group id
|
|
142
|
+
# (or a genuinely unknown one, which 404s below). A split checkout
|
|
143
|
+
# handed the client a group, so both have to resolve here.
|
|
144
|
+
@cart = find_completed_result!
|
|
145
|
+
authorize_storefront_read!(@cart, token: cart_token)
|
|
130
146
|
|
|
131
147
|
render_order
|
|
132
148
|
end
|
|
133
149
|
|
|
134
150
|
protected
|
|
135
151
|
|
|
152
|
+
# The completed result behind an id the client is retrying with —
|
|
153
|
+
# either the single order a plain checkout produced, or the group a
|
|
154
|
+
# split one did.
|
|
155
|
+
#
|
|
156
|
+
# @return [Spree::Order, Spree::OrderGroup]
|
|
157
|
+
def find_completed_result!
|
|
158
|
+
current_store.orders.complete.find_by_prefix_id!(params[:id])
|
|
159
|
+
rescue ActiveRecord::RecordNotFound
|
|
160
|
+
current_store.order_groups.find_by_prefix_id!(params[:id])
|
|
161
|
+
end
|
|
162
|
+
|
|
136
163
|
def model_class
|
|
137
164
|
Spree::Order
|
|
138
165
|
end
|
|
@@ -147,13 +174,24 @@ module Spree
|
|
|
147
174
|
# Explicit by-ID lookups (show/update) stay cross-channel so a shared
|
|
148
175
|
# checkout can load any cart the caller is authorized for.
|
|
149
176
|
def scope
|
|
150
|
-
|
|
177
|
+
storefront_access_policy.
|
|
178
|
+
scope(current_store.carts.incomplete.where(channel: current_channel)).
|
|
179
|
+
order(updated_at: :desc)
|
|
151
180
|
end
|
|
152
181
|
|
|
153
182
|
private
|
|
154
183
|
|
|
184
|
+
def render_invalid_po_document
|
|
185
|
+
render_error(
|
|
186
|
+
code: ERROR_CODES[:validation_error],
|
|
187
|
+
message: Spree.t(:po_document_invalid_signed_id),
|
|
188
|
+
status: :unprocessable_content
|
|
189
|
+
)
|
|
190
|
+
end
|
|
191
|
+
|
|
155
192
|
def permitted_params
|
|
156
193
|
params.permit(
|
|
194
|
+
*model_additional_permitted_attributes,
|
|
157
195
|
:email,
|
|
158
196
|
:customer_note,
|
|
159
197
|
:market_id,
|
|
@@ -161,6 +199,12 @@ module Spree
|
|
|
161
199
|
:locale,
|
|
162
200
|
:shipping_address_id,
|
|
163
201
|
:billing_address_id,
|
|
202
|
+
:preferred_stock_location_id,
|
|
203
|
+
:company_id,
|
|
204
|
+
# The buyer's own purchase-order reference, and the signed blob id
|
|
205
|
+
# of the document behind it (from POST .../carts/:id/po_document).
|
|
206
|
+
:po_number,
|
|
207
|
+
:po_document,
|
|
164
208
|
:use_shipping,
|
|
165
209
|
shipping_address: address_params,
|
|
166
210
|
billing_address: address_params,
|
|
@@ -174,7 +218,8 @@ module Spree
|
|
|
174
218
|
:id, :first_name, :last_name,
|
|
175
219
|
:address1, :address2,
|
|
176
220
|
:city, :postal_code, :phone, :company,
|
|
177
|
-
|
|
221
|
+
# country_iso and state_abbr are the legacy write names, accepted until 6.1.
|
|
222
|
+
:country_code, :country_iso, :state_code, :state_abbr, :state_name, :quick_checkout
|
|
178
223
|
]
|
|
179
224
|
end
|
|
180
225
|
|
|
@@ -185,7 +230,7 @@ module Spree
|
|
|
185
230
|
# Find incomplete cart for associate action.
|
|
186
231
|
# Only finds guest carts (no user) or carts already owned by current user (idempotent).
|
|
187
232
|
def find_cart_for_association
|
|
188
|
-
current_store.carts.where(
|
|
233
|
+
current_store.carts.incomplete.where(customer: [nil, current_user]).find_by_prefix_id!(params[:id])
|
|
189
234
|
end
|
|
190
235
|
|
|
191
236
|
# Claiming a cart requires presenting its token, even when the caller
|
|
@@ -193,7 +238,7 @@ module Spree
|
|
|
193
238
|
def require_cart_token!
|
|
194
239
|
valid = cart_token.present? && cart_token == @cart.token
|
|
195
240
|
|
|
196
|
-
raise
|
|
241
|
+
raise Spree::Storefront::AccessDenied unless valid
|
|
197
242
|
end
|
|
198
243
|
end
|
|
199
244
|
end
|
|
@@ -15,6 +15,12 @@ module Spree
|
|
|
15
15
|
Spree.api.category_serializer
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
+
# Exclude automatic (rule-based) rows still living in spree_categories
|
|
19
|
+
# until the Phase 4 migration moves them to Collections (removed in 6.1).
|
|
20
|
+
def scope
|
|
21
|
+
super.manual
|
|
22
|
+
end
|
|
23
|
+
|
|
18
24
|
# Find category by permalink or prefixed ID with i18n scope for SEO-friendly URLs
|
|
19
25
|
# Falls back to default locale if category is not found in the current locale
|
|
20
26
|
def find_resource
|
|
@@ -26,9 +32,6 @@ module Spree
|
|
|
26
32
|
end
|
|
27
33
|
end
|
|
28
34
|
|
|
29
|
-
def collection_includes
|
|
30
|
-
[:taxonomy]
|
|
31
|
-
end
|
|
32
35
|
end
|
|
33
36
|
end
|
|
34
37
|
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Store
|
|
5
|
+
module Collections
|
|
6
|
+
# Dedicated collection PLP. Reuses the ProductsController search flow;
|
|
7
|
+
# the collection is applied as an `in_collection` filter (not an AR
|
|
8
|
+
# pre-scope, so Meilisearch's own filtering/counting/pagination works),
|
|
9
|
+
# and the collection's sort_order is the default when the request omits `sort`.
|
|
10
|
+
class ProductsController < Spree::Api::V3::Store::ProductsController
|
|
11
|
+
protected
|
|
12
|
+
|
|
13
|
+
def collection
|
|
14
|
+
return @collection if @collection.present?
|
|
15
|
+
|
|
16
|
+
result = search_provider.search_and_filter(
|
|
17
|
+
scope: scope.includes(collection_includes).preload_associations_lazily,
|
|
18
|
+
query: search_query,
|
|
19
|
+
filters: (search_filters || {}).merge('in_collection' => current_collection.prefixed_id),
|
|
20
|
+
sort: sort_param.presence || collection_default_sort,
|
|
21
|
+
page: page,
|
|
22
|
+
limit: limit
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
@pagy = result.pagy
|
|
26
|
+
@collection = result.products
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
private
|
|
30
|
+
|
|
31
|
+
# The collection's sort_order rendered in the API sort format
|
|
32
|
+
# (e.g. 'price asc' -> 'price') — the PLP default when `sort` is omitted.
|
|
33
|
+
def collection_default_sort
|
|
34
|
+
sort_order = current_collection.sort_order
|
|
35
|
+
return sort_order unless sort_order.to_s.include?(' ')
|
|
36
|
+
|
|
37
|
+
field, direction = sort_order.split(' ', 2)
|
|
38
|
+
direction == 'desc' ? "-#{field}" : field
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Resolve by permalink or prefixed ID, mirroring CollectionsController#find_resource
|
|
42
|
+
# (including the default-locale fallback so a non-default-locale permalink still
|
|
43
|
+
# resolves the PLP the collection detail page can load).
|
|
44
|
+
def current_collection
|
|
45
|
+
@current_collection ||= begin
|
|
46
|
+
id = params[:collection_id]
|
|
47
|
+
if id.to_s.start_with?('coll_')
|
|
48
|
+
current_store.collections.find_by_prefix_id!(id)
|
|
49
|
+
else
|
|
50
|
+
find_with_fallback_default_locale { current_store.collections.i18n.find_by!(permalink: id) }
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Store
|
|
5
|
+
class CollectionsController < ResourceController
|
|
6
|
+
include Spree::Api::V3::HttpCaching
|
|
7
|
+
|
|
8
|
+
protected
|
|
9
|
+
|
|
10
|
+
def model_class
|
|
11
|
+
Spree::Collection
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def serializer_class
|
|
15
|
+
Spree.api.collection_serializer
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def scope
|
|
19
|
+
super.ordered
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Find by permalink or prefixed ID (SEO-friendly URLs), i18n-scoped with a
|
|
23
|
+
# fallback to the default locale — mirrors the Categories controller.
|
|
24
|
+
def find_resource
|
|
25
|
+
id = params[:id]
|
|
26
|
+
if id.to_s.start_with?('coll_')
|
|
27
|
+
scope.find_by_prefix_id!(id)
|
|
28
|
+
else
|
|
29
|
+
find_with_fallback_default_locale { scope.i18n.find_by!(permalink: id) }
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Store
|
|
5
|
+
module Companies
|
|
6
|
+
# The node's address book, managed by its members. Every entry is
|
|
7
|
+
# reached through its node, so standing over that node is the only
|
|
8
|
+
# thing that authorizes reading or writing one.
|
|
9
|
+
class AddressesController < BaseController
|
|
10
|
+
include Spree::Api::V3::CompanyAddressWrites
|
|
11
|
+
|
|
12
|
+
# POST /api/v3/store/companies/:company_id/addresses
|
|
13
|
+
def create
|
|
14
|
+
result = Spree.address_create_service.call(
|
|
15
|
+
address_params: permitted_params,
|
|
16
|
+
owner: @parent,
|
|
17
|
+
**default_flags
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
if result.success?
|
|
21
|
+
render json: serialize_resource(result.value), status: :created
|
|
22
|
+
else
|
|
23
|
+
render_validation_error(result.value.errors)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# PATCH /api/v3/store/companies/:company_id/addresses/:id
|
|
28
|
+
def update
|
|
29
|
+
result = Spree.address_update_service.call(
|
|
30
|
+
address: @resource,
|
|
31
|
+
address_params: permitted_params,
|
|
32
|
+
**default_flags
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
if result.success?
|
|
36
|
+
render json: serialize_resource(result.value)
|
|
37
|
+
else
|
|
38
|
+
render_validation_error(result.value.errors)
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# DELETE /api/v3/store/companies/:company_id/addresses/:id
|
|
43
|
+
def destroy
|
|
44
|
+
@resource.destroy!
|
|
45
|
+
head :no_content
|
|
46
|
+
rescue ActiveRecord::RecordNotDestroyed => e
|
|
47
|
+
render_validation_error(e.record.errors.presence || e.message)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
protected
|
|
51
|
+
|
|
52
|
+
def model_class
|
|
53
|
+
Spree::Address
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def serializer_class
|
|
57
|
+
Spree.api.address_serializer
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Reading a book and keeping one are different rights: the listing
|
|
61
|
+
# includes what this node inherits, writes stay with the node that
|
|
62
|
+
# owns the row. The Store API authorizes purely by what this scope
|
|
63
|
+
# returns, so widening it for every action would let a division
|
|
64
|
+
# member rename or re-point its parent's entries.
|
|
65
|
+
def scope
|
|
66
|
+
action_name == 'index' ? @parent.address_book : @parent.addresses
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def parent_association
|
|
70
|
+
:addresses
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def permitted_params
|
|
74
|
+
params.permit(:label, *Spree::Api::V3::AddressParams::ADDRESS_KEYS)
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Store
|
|
5
|
+
module Companies
|
|
6
|
+
# Anything a member manages under a company node. The parent is
|
|
7
|
+
# resolved through the caller's standing, so a node they may not act
|
|
8
|
+
# for is a 404 rather than a readable record.
|
|
9
|
+
class BaseController < ResourceController
|
|
10
|
+
prepend_before_action :require_authentication!
|
|
11
|
+
|
|
12
|
+
protected
|
|
13
|
+
|
|
14
|
+
def set_parent
|
|
15
|
+
@parent = @company = storefront_access_policy.
|
|
16
|
+
scope(current_store.companies).
|
|
17
|
+
find_by_prefix_id!(params[:company_id])
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Store
|
|
5
|
+
module Companies
|
|
6
|
+
# The pending invitations into one node, visible to its members.
|
|
7
|
+
# Revocation is addressed directly by invitation id.
|
|
8
|
+
class InvitationsController < BaseController
|
|
9
|
+
# DELETE /api/v3/store/companies/:company_id/invitations/:id
|
|
10
|
+
#
|
|
11
|
+
# Revokes rather than erases: a spent token keeps refusing.
|
|
12
|
+
def destroy
|
|
13
|
+
if @resource.revoke!
|
|
14
|
+
head :no_content
|
|
15
|
+
else
|
|
16
|
+
render_error(
|
|
17
|
+
code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:validation_error],
|
|
18
|
+
message: Spree.t('company_invitations.not_pending'),
|
|
19
|
+
status: :unprocessable_content
|
|
20
|
+
)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
protected
|
|
25
|
+
|
|
26
|
+
def model_class
|
|
27
|
+
Spree::CompanyInvitation
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def serializer_class
|
|
31
|
+
Spree.api.company_invitation_serializer
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# The listing shows live invitations only, so spent rows cannot
|
|
35
|
+
# push pending ones off the first page. Addressing one by id still
|
|
36
|
+
# finds it, so revoking an already-spent invitation answers "not
|
|
37
|
+
# pending" rather than "no such invitation".
|
|
38
|
+
def scope
|
|
39
|
+
action_name == 'index' ? @parent.invitations.pending : @parent.invitations
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def parent_association
|
|
43
|
+
:invitations
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Store
|
|
5
|
+
module Companies
|
|
6
|
+
# The people with standing over one node, listed and added by its
|
|
7
|
+
# members. Adding takes an email and does the right thing: a
|
|
8
|
+
# membership for an existing customer, an invitation otherwise —
|
|
9
|
+
# the same convergent behavior as the dashboard endpoint. Any member
|
|
10
|
+
# can invite; restraint is Enterprise's policy layer.
|
|
11
|
+
class MembersController < BaseController
|
|
12
|
+
# POST /api/v3/store/companies/:company_id/members
|
|
13
|
+
def create
|
|
14
|
+
result = Spree.company_add_member_service.call(
|
|
15
|
+
company: @parent,
|
|
16
|
+
email: params.require(:customer_email),
|
|
17
|
+
inviter: current_user
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
if result.success?
|
|
21
|
+
serializer = if result.value.is_a?(Spree::CompanyInvitation)
|
|
22
|
+
Spree.api.company_invitation_serializer
|
|
23
|
+
else
|
|
24
|
+
serializer_class
|
|
25
|
+
end
|
|
26
|
+
render json: serializer.new(result.value, params: serializer_params).to_h, status: :created
|
|
27
|
+
else
|
|
28
|
+
render_validation_error(result.value.errors)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# DELETE /api/v3/store/companies/:company_id/members/:id
|
|
33
|
+
def destroy
|
|
34
|
+
@resource.destroy!
|
|
35
|
+
head :no_content
|
|
36
|
+
rescue ActiveRecord::RecordNotDestroyed => e
|
|
37
|
+
render_validation_error(e.record.errors.presence || e.message)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
protected
|
|
41
|
+
|
|
42
|
+
def model_class
|
|
43
|
+
Spree::CompanyMembership
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def serializer_class
|
|
47
|
+
Spree.api.company_membership_serializer
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def scope
|
|
51
|
+
@parent.memberships
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def parent_association
|
|
55
|
+
:memberships
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def collection_includes
|
|
59
|
+
[:customer]
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Store
|
|
5
|
+
module Companies
|
|
6
|
+
# Completed purchases across the node's subtree — every member sees
|
|
7
|
+
# them; per-member narrowing is Enterprise's policy layer.
|
|
8
|
+
class OrdersController < BaseController
|
|
9
|
+
protected
|
|
10
|
+
|
|
11
|
+
def model_class
|
|
12
|
+
Spree::Order
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def serializer_class
|
|
16
|
+
Spree.api.order_serializer
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def scope
|
|
20
|
+
current_store.orders.complete.
|
|
21
|
+
where(company_id: @parent.self_and_descendants.select(:id))
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Store
|
|
5
|
+
# A company node, self-served by its members. Authorization is
|
|
6
|
+
# standing plus the storefront access policy — never CanCanCan, never
|
|
7
|
+
# roles: OSS lets any member act within their subtree, and Enterprise
|
|
8
|
+
# narrows through the policy class
|
|
9
|
+
# (docs/plans/6.0-b2b-companies-and-catalogs.md).
|
|
10
|
+
class CompaniesController < ResourceController
|
|
11
|
+
prepend_before_action :require_authentication!
|
|
12
|
+
|
|
13
|
+
# PATCH /api/v3/store/companies/:id
|
|
14
|
+
def update
|
|
15
|
+
authorize_storefront_write!(@resource)
|
|
16
|
+
|
|
17
|
+
if @resource.update(permitted_params)
|
|
18
|
+
render json: serialize_resource(@resource)
|
|
19
|
+
else
|
|
20
|
+
render_validation_error(@resource.errors)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
protected
|
|
25
|
+
|
|
26
|
+
def model_class
|
|
27
|
+
Spree::Company
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def serializer_class
|
|
31
|
+
Spree.api.company_serializer
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# The nodes the caller has standing over — a node outside it is a
|
|
35
|
+
# 404, never a readable record.
|
|
36
|
+
def scope
|
|
37
|
+
storefront_access_policy.scope(current_store.companies)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def permitted_params
|
|
41
|
+
params.permit(:name)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Store
|
|
5
|
+
# The invitee's side of an invitation: look up and accept by plaintext
|
|
6
|
+
# token, unauthenticated. The token from the invite email IS the
|
|
7
|
+
# credential, and the acceptance page must load before the invitee has
|
|
8
|
+
# an account, even on a login-gated store — which is why this is the
|
|
9
|
+
# one part of the company surface not reached through a node.
|
|
10
|
+
#
|
|
11
|
+
# Members revoke through the node
|
|
12
|
+
# (Store::Companies::InvitationsController).
|
|
13
|
+
class CompanyInvitationsController < ResourceController
|
|
14
|
+
allow_guest_storefront_access!
|
|
15
|
+
|
|
16
|
+
# Both actions are token lookups, not prefixed-id reads — the
|
|
17
|
+
# standing scope would 404 the unauthenticated invitee.
|
|
18
|
+
skip_before_action :set_resource
|
|
19
|
+
|
|
20
|
+
# GET /api/v3/store/company_invitations/:token — what is being
|
|
21
|
+
# joined. Expired and revoked tokens 404.
|
|
22
|
+
def show
|
|
23
|
+
invitation = find_by_token!
|
|
24
|
+
|
|
25
|
+
render json: serialize_resource(invitation).merge(
|
|
26
|
+
'company_name' => invitation.company.name,
|
|
27
|
+
'store_name' => current_store.name
|
|
28
|
+
)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# POST /api/v3/store/company_invitations/:token/accept
|
|
32
|
+
#
|
|
33
|
+
# Takes a registration payload (the account is created through the
|
|
34
|
+
# customer-creation workflow, with the invited email), or an
|
|
35
|
+
# authenticated request from a customer the invitation then binds
|
|
36
|
+
# to. Returns the created membership.
|
|
37
|
+
def accept
|
|
38
|
+
invitation = find_by_token!
|
|
39
|
+
|
|
40
|
+
result = Spree.company_invitation_accept_service.call(
|
|
41
|
+
invitation: invitation,
|
|
42
|
+
customer: current_user,
|
|
43
|
+
customer_attributes: current_user ? nil : registration_params.to_h
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
if result.success?
|
|
47
|
+
render json: Spree.api.company_membership_serializer.new(
|
|
48
|
+
result.value, params: serializer_params
|
|
49
|
+
).to_h, status: :created
|
|
50
|
+
elsif result.value.respond_to?(:errors) && result.value.errors.any?
|
|
51
|
+
render_validation_error(result.value.errors)
|
|
52
|
+
else
|
|
53
|
+
render_error(
|
|
54
|
+
code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:validation_error],
|
|
55
|
+
message: Spree.t('company_invitations.not_pending'),
|
|
56
|
+
status: :unprocessable_content
|
|
57
|
+
)
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
protected
|
|
63
|
+
|
|
64
|
+
def model_class
|
|
65
|
+
Spree::CompanyInvitation
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def serializer_class
|
|
69
|
+
Spree.api.company_invitation_serializer
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
private
|
|
74
|
+
|
|
75
|
+
# Token lookup, scoped to the current store and to pending rows —
|
|
76
|
+
# a spent, revoked or expired token does not exist.
|
|
77
|
+
def find_by_token!
|
|
78
|
+
Spree::CompanyInvitation.pending.
|
|
79
|
+
where(company_id: current_store.companies.select(:id)).
|
|
80
|
+
find_by!(token: params[:token] || params[:id])
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def registration_params
|
|
84
|
+
params.permit(:first_name, :last_name, :phone, :password, :password_confirmation)
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|