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,195 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Seller
|
|
5
|
+
# A seller's own CSV exports.
|
|
6
|
+
#
|
|
7
|
+
# The operator's counterpart offers whatever the registry holds; this
|
|
8
|
+
# branch offers only the datasets that can be narrowed to one seller,
|
|
9
|
+
# because tenancy here is the narrowing. `Spree::Export#scope` refuses
|
|
10
|
+
# a model without `for_seller` rather than writing a file spanning the
|
|
11
|
+
# marketplace, and ALLOWED_TYPES is the front door onto the same rule —
|
|
12
|
+
# a type added to the registry is not reachable from a seller's panel
|
|
13
|
+
# until someone has decided it can be scoped.
|
|
14
|
+
#
|
|
15
|
+
# No index: a seller creates an export, polls it and downloads it, so
|
|
16
|
+
# there is no history page to list. No destroy either — retention is
|
|
17
|
+
# the marketplace's business.
|
|
18
|
+
class ExportsController < Seller::ResourceController
|
|
19
|
+
include ActiveStorage::SetCurrent
|
|
20
|
+
|
|
21
|
+
# Exports of records a seller genuinely owns. Both narrow by their own
|
|
22
|
+
# `seller_id`, which is the same answer `current_seller.orders` and
|
|
23
|
+
# `current_seller.products` give the list endpoints.
|
|
24
|
+
ALLOWED_TYPES = %w[orders products].freeze
|
|
25
|
+
|
|
26
|
+
scoped_resource :exports
|
|
27
|
+
|
|
28
|
+
# POST /api/v3/seller/exports
|
|
29
|
+
#
|
|
30
|
+
# Refused before the record is built when the type is not one a
|
|
31
|
+
# seller may run — `build_resource` would otherwise have no class to
|
|
32
|
+
# instantiate.
|
|
33
|
+
def create
|
|
34
|
+
return render_unsupported_type if resolve_export_type(params[:type]).nil?
|
|
35
|
+
|
|
36
|
+
super
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# GET /api/v3/seller/exports/:id/download
|
|
40
|
+
#
|
|
41
|
+
# Streamed inline rather than redirected to ActiveStorage's signed
|
|
42
|
+
# URL: the panel is served under a path-based mount and proxies only
|
|
43
|
+
# `/api/*`, so a cross-origin redirect would strip the Authorization
|
|
44
|
+
# header and fail silently.
|
|
45
|
+
def download
|
|
46
|
+
@resource = find_resource
|
|
47
|
+
authorize_resource!(@resource, :show)
|
|
48
|
+
|
|
49
|
+
unless @resource.done?
|
|
50
|
+
return render_error(
|
|
51
|
+
code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:export_not_ready],
|
|
52
|
+
message: 'Export is not ready yet',
|
|
53
|
+
status: :unprocessable_content
|
|
54
|
+
)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
attachment = @resource.attachment
|
|
58
|
+
send_data(
|
|
59
|
+
attachment.download,
|
|
60
|
+
filename: attachment.filename.to_s,
|
|
61
|
+
type: attachment.content_type || 'text/csv',
|
|
62
|
+
disposition: 'attachment'
|
|
63
|
+
)
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
protected
|
|
67
|
+
|
|
68
|
+
def model_class
|
|
69
|
+
Spree::Export
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def serializer_class
|
|
73
|
+
Spree.api.seller_export_serializer
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def scope_includes
|
|
77
|
+
[{ attachment_attachment: :blob }]
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# Rooted in the seller's own exports, so another seller's id reads as
|
|
81
|
+
# missing rather than denied — the same shape every endpoint on this
|
|
82
|
+
# branch has.
|
|
83
|
+
def seller_association
|
|
84
|
+
:exports
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Loaded by both the scope gate and the member actions — memoize so
|
|
88
|
+
# the record is fetched once.
|
|
89
|
+
def find_resource
|
|
90
|
+
@find_resource ||= super
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
# An export is a bulk read of the records it contains, so creating
|
|
94
|
+
# and downloading one both check the read-level key.
|
|
95
|
+
def action_kind
|
|
96
|
+
'read'
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def read_actions
|
|
100
|
+
%w[show create download]
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# Gated by the scope of what is being exported, not by an "exports"
|
|
104
|
+
# scope of its own: an orders export needs `read_orders`.
|
|
105
|
+
def scoped_resource_name
|
|
106
|
+
export_class&.required_scope || :all
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# Authorized against the records being exported rather than the
|
|
110
|
+
# export row.
|
|
111
|
+
#
|
|
112
|
+
# An export is a bulk read of its contents, so "may this seller read
|
|
113
|
+
# orders" is the real question — and it is the same one
|
|
114
|
+
# `scoped_resource_name` asks the key gate. `Spree::Export` is not a
|
|
115
|
+
# catalog subject in its own right, so authorizing the row itself
|
|
116
|
+
# would deny every principal that is not a full-access admin.
|
|
117
|
+
def authorize_resource!(resource = @resource, _action = action_name.to_sym)
|
|
118
|
+
model = resource.is_a?(Spree::Export) ? resource.model_class : resource
|
|
119
|
+
|
|
120
|
+
authorize!(:show, model)
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# The seller and the store both come from the session rather than the
|
|
124
|
+
# payload — a seller cannot file an export against anyone else.
|
|
125
|
+
def build_resource
|
|
126
|
+
klass = resolve_export_type(permitted_params[:type])
|
|
127
|
+
|
|
128
|
+
klass.new(
|
|
129
|
+
permitted_params.except(:type).merge(
|
|
130
|
+
store: current_store,
|
|
131
|
+
seller: current_seller,
|
|
132
|
+
user: try_spree_current_user,
|
|
133
|
+
results_url: validated_results_url(permitted_params[:results_url])
|
|
134
|
+
)
|
|
135
|
+
)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# `search_params` carries an arbitrary Ransack hash with nested
|
|
139
|
+
# groupings, which Rails' `permit(k: {})` rejects — extract via
|
|
140
|
+
# `to_unsafe_h`. `:format` is deliberately dropped: only CSV exists,
|
|
141
|
+
# and Rails' request format would otherwise overwrite the enum.
|
|
142
|
+
def permitted_params
|
|
143
|
+
attrs = params.permit(*model_additional_permitted_attributes, :type, :record_selection, :results_url)
|
|
144
|
+
raw = params[:search_params]
|
|
145
|
+
attrs[:search_params] = raw.respond_to?(:to_unsafe_h) ? raw.to_unsafe_h : raw if raw.present?
|
|
146
|
+
attrs
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# Resolves the API shorthand (`"orders"`) against the allowlist.
|
|
150
|
+
#
|
|
151
|
+
# The class comes from the in-process registry, never from the
|
|
152
|
+
# request — the parameter only selects an entry, so no user input is
|
|
153
|
+
# ever constantized.
|
|
154
|
+
def resolve_export_type(name)
|
|
155
|
+
return nil if name.blank?
|
|
156
|
+
|
|
157
|
+
name = name.to_s
|
|
158
|
+
return nil unless ALLOWED_TYPES.include?(name)
|
|
159
|
+
|
|
160
|
+
Spree::Export.available_types.find { |type| type.api_type == name }
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
private
|
|
164
|
+
|
|
165
|
+
def export_class
|
|
166
|
+
action_name == 'create' ? resolve_export_type(params[:type]) : find_resource.class
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
# Where the done email sends the seller back to. The panel passes its
|
|
170
|
+
# own location, since only it knows where it is mounted — this
|
|
171
|
+
# branch is served from a path under the store as often as from a
|
|
172
|
+
# host of its own — and the store's allowed origins decide whether to
|
|
173
|
+
# trust it.
|
|
174
|
+
def validated_results_url(url)
|
|
175
|
+
return if url.blank?
|
|
176
|
+
return unless current_store.allowed_origin?(url)
|
|
177
|
+
|
|
178
|
+
url
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
def render_unsupported_type
|
|
182
|
+
render_error(
|
|
183
|
+
code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:validation_error],
|
|
184
|
+
message: Spree.t(
|
|
185
|
+
'api.errors.unsupported_export_type',
|
|
186
|
+
default: "Unsupported export type. Supported types: #{ALLOWED_TYPES.join(', ')}"
|
|
187
|
+
),
|
|
188
|
+
status: :unprocessable_content
|
|
189
|
+
)
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Seller
|
|
5
|
+
# The rows of one of this seller's imports — the failure report
|
|
6
|
+
# (`GET /seller/imports/:import_id/rows?q[status_eq]=failed`).
|
|
7
|
+
#
|
|
8
|
+
# Read-only, and gated by the write key like its parent: the rows carry
|
|
9
|
+
# the uploaded data back, so seeing them is seeing the upload.
|
|
10
|
+
class ImportRowsController < Seller::ResourceController
|
|
11
|
+
scoped_resource :products
|
|
12
|
+
|
|
13
|
+
protected
|
|
14
|
+
|
|
15
|
+
def model_class
|
|
16
|
+
Spree::ImportRow
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def serializer_class
|
|
20
|
+
Spree.api.seller_import_row_serializer
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def parent_association
|
|
24
|
+
:rows
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def set_parent
|
|
28
|
+
@parent = parent_import
|
|
29
|
+
authorize_parent!(@parent)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
# Resolved through this seller's own imports, so an import id
|
|
33
|
+
# belonging to the operator or to another seller is a 404 rather than
|
|
34
|
+
# a readable row list.
|
|
35
|
+
def parent_import
|
|
36
|
+
@parent_import ||= Spree::Import.for_store(current_store).
|
|
37
|
+
for_seller(current_seller).
|
|
38
|
+
where(type: Seller::ImportsController::PERMITTED_TYPES).
|
|
39
|
+
find_by_prefix_id!(params[:import_id])
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def action_kind
|
|
43
|
+
'write'
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
module Seller
|
|
5
|
+
# A seller's own CSV imports — bulk-listing their catalog rather than
|
|
6
|
+
# typing each product into the form.
|
|
7
|
+
#
|
|
8
|
+
# The pipeline is the operator's, unchanged: the same upload, the same
|
|
9
|
+
# column mapping, the same row processors. What differs is ownership
|
|
10
|
+
# and reach, and both are decided outside this controller — the import
|
|
11
|
+
# is created carrying `seller: current_seller`, and
|
|
12
|
+
# `Spree::Imports::RowProcessors::ProductVariant` reads that owner to
|
|
13
|
+
# narrow which products a row may resolve onto and to stamp the seller
|
|
14
|
+
# on the ones it creates. That narrowing cannot live here: rows are
|
|
15
|
+
# processed in a background job, long after any request scope is gone.
|
|
16
|
+
#
|
|
17
|
+
# Products only. Customers belong to the marketplace, and translations
|
|
18
|
+
# of the catalog's copy are its merchandising — the same line the
|
|
19
|
+
# seller products endpoint already draws around tags and categories.
|
|
20
|
+
#
|
|
21
|
+
# Imported products land as `draft` whatever the CSV's status column
|
|
22
|
+
# says; a seller reaches `active` only through review
|
|
23
|
+
# (docs/plans/6.0-seller-product-submission.md).
|
|
24
|
+
class ImportsController < Seller::ResourceController
|
|
25
|
+
include ActiveStorage::SetCurrent
|
|
26
|
+
|
|
27
|
+
# The import types a seller may run. An operator's `customers` or
|
|
28
|
+
# `product_translations` upload is not theirs to start, so it is not
|
|
29
|
+
# merely hidden — a `type` outside this list resolves to nothing and
|
|
30
|
+
# the create fails the model's own whitelist.
|
|
31
|
+
PERMITTED_TYPES = ['Spree::Imports::Products'].freeze
|
|
32
|
+
|
|
33
|
+
scoped_resource :products
|
|
34
|
+
|
|
35
|
+
# POST /api/v3/seller/imports
|
|
36
|
+
#
|
|
37
|
+
# `attachment` is an ActiveStorage signed blob id from
|
|
38
|
+
# POST /api/v3/seller/direct_uploads. On success the import is
|
|
39
|
+
# already in `mapping`, carrying the auto-assigned columns.
|
|
40
|
+
def create
|
|
41
|
+
@resource = build_resource
|
|
42
|
+
authorize_resource!(@resource, :create)
|
|
43
|
+
|
|
44
|
+
if @resource.save
|
|
45
|
+
begin
|
|
46
|
+
result = Spree.import_start_mapping_workflow.call(import: @resource)
|
|
47
|
+
|
|
48
|
+
return render_service_error(result.error) unless result.success?
|
|
49
|
+
rescue ::CSV::MalformedCSVError, EncodingError => e
|
|
50
|
+
@resource.update_columns(status: 'failed', processing_errors: e.message, updated_at: Time.current)
|
|
51
|
+
return render_error(
|
|
52
|
+
code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:validation_error],
|
|
53
|
+
message: "Could not parse CSV: #{e.message}",
|
|
54
|
+
status: :unprocessable_content
|
|
55
|
+
)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
render json: serialize_resource(@resource), status: :created
|
|
59
|
+
else
|
|
60
|
+
render_errors(@resource.errors)
|
|
61
|
+
end
|
|
62
|
+
rescue ActiveSupport::MessageVerifier::InvalidSignature
|
|
63
|
+
render_error(
|
|
64
|
+
code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:validation_error],
|
|
65
|
+
message: 'Invalid attachment signed id',
|
|
66
|
+
status: :unprocessable_content
|
|
67
|
+
)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# PATCH /api/v3/seller/imports/:id/complete_mapping
|
|
71
|
+
def complete_mapping
|
|
72
|
+
@resource = find_resource
|
|
73
|
+
authorize_resource!(@resource, :update)
|
|
74
|
+
|
|
75
|
+
unless @resource.mapping?
|
|
76
|
+
return render_error(
|
|
77
|
+
code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:validation_error],
|
|
78
|
+
message: 'Import is not in the mapping state',
|
|
79
|
+
status: :unprocessable_content
|
|
80
|
+
)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
apply_mappings!(@resource)
|
|
84
|
+
|
|
85
|
+
if @resource.mapping_done?
|
|
86
|
+
result = Spree.import_complete_mapping_workflow.call(import: @resource)
|
|
87
|
+
|
|
88
|
+
return render_service_error(result.error) unless result.success?
|
|
89
|
+
|
|
90
|
+
render json: serialize_resource(@resource)
|
|
91
|
+
else
|
|
92
|
+
missing = @resource.required_fields - @resource.mappings.mapped.pluck(:schema_field)
|
|
93
|
+
render_error(
|
|
94
|
+
code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:validation_error],
|
|
95
|
+
message: "Required fields are not mapped: #{missing.join(', ')}",
|
|
96
|
+
status: :unprocessable_content,
|
|
97
|
+
details: { missing_required_fields: missing }
|
|
98
|
+
)
|
|
99
|
+
end
|
|
100
|
+
rescue ActiveRecord::RecordInvalid => e
|
|
101
|
+
render_validation_error(e.record.errors)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
# PATCH /api/v3/seller/imports/:id/retry_failed_rows
|
|
105
|
+
def retry_failed_rows
|
|
106
|
+
@resource = find_resource
|
|
107
|
+
authorize_resource!(@resource, :update)
|
|
108
|
+
|
|
109
|
+
result = Spree.import_retry_failed_rows_workflow.call(import: @resource)
|
|
110
|
+
|
|
111
|
+
if result.success?
|
|
112
|
+
render json: serialize_resource(@resource)
|
|
113
|
+
else
|
|
114
|
+
render_error(
|
|
115
|
+
code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:validation_error],
|
|
116
|
+
message: 'Import has no failed rows to retry',
|
|
117
|
+
status: :unprocessable_content
|
|
118
|
+
)
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
# GET /api/v3/seller/imports/:id/download
|
|
123
|
+
#
|
|
124
|
+
# The originally uploaded CSV — what the seller actually sent.
|
|
125
|
+
# Streamed inline for the same reason the operator's twin is: a
|
|
126
|
+
# signed ActiveStorage URL neither survives the panel's `/api/*`-only
|
|
127
|
+
# dev proxy nor carries the JWT.
|
|
128
|
+
def download
|
|
129
|
+
@resource = find_resource
|
|
130
|
+
authorize_resource!(@resource, :show)
|
|
131
|
+
|
|
132
|
+
attachment = @resource.attachment
|
|
133
|
+
unless attachment.attached?
|
|
134
|
+
return render_error(
|
|
135
|
+
code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:validation_error],
|
|
136
|
+
message: 'Import has no attached file',
|
|
137
|
+
status: :unprocessable_content
|
|
138
|
+
)
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
send_data(
|
|
142
|
+
attachment.download,
|
|
143
|
+
filename: attachment.filename.to_s,
|
|
144
|
+
type: attachment.content_type || 'text/csv',
|
|
145
|
+
disposition: 'attachment'
|
|
146
|
+
)
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
# GET /api/v3/seller/imports/template?type=products
|
|
150
|
+
def template
|
|
151
|
+
klass = resolve_import_type(params[:type])
|
|
152
|
+
|
|
153
|
+
return render_unknown_type unless klass
|
|
154
|
+
|
|
155
|
+
import = klass.new
|
|
156
|
+
send_data import.template_csv,
|
|
157
|
+
filename: import.template_csv_filename,
|
|
158
|
+
type: 'text/csv',
|
|
159
|
+
disposition: 'attachment'
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
# GET /api/v3/seller/imports/example?type=products
|
|
163
|
+
#
|
|
164
|
+
# Redirects to the populated example CSV. The panel cannot build this
|
|
165
|
+
# URL itself: it is pinned to the installed Spree version, and
|
|
166
|
+
# exposing that version would fingerprint the deployment.
|
|
167
|
+
def example
|
|
168
|
+
klass = resolve_import_type(params[:type])
|
|
169
|
+
url = klass&.sample_csv_url
|
|
170
|
+
|
|
171
|
+
unless url
|
|
172
|
+
return render_error(
|
|
173
|
+
code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:record_not_found],
|
|
174
|
+
message: 'No example CSV for this import type',
|
|
175
|
+
status: :not_found
|
|
176
|
+
)
|
|
177
|
+
end
|
|
178
|
+
|
|
179
|
+
redirect_to url, allow_other_host: true, status: :found
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
protected
|
|
183
|
+
|
|
184
|
+
def model_class
|
|
185
|
+
Spree::Import
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
def serializer_class
|
|
189
|
+
Spree.api.seller_import_serializer
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def scope_includes
|
|
193
|
+
[:user, :mappings, { attachment_attachment: :blob }]
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
# `Spree::Seller` has no `imports` association to read through, so
|
|
197
|
+
# the root scope is stated here rather than inherited: this seller's
|
|
198
|
+
# own rows, and only the types they are allowed to run — an import
|
|
199
|
+
# created before a type was withdrawn stays out of the list.
|
|
200
|
+
#
|
|
201
|
+
# The eager loads are applied by hand for the same reason: the
|
|
202
|
+
# inherited implementations attach them to the association they root
|
|
203
|
+
# in, and the serializer reads each import's blob and mappings, so
|
|
204
|
+
# without them the index issues a query per row.
|
|
205
|
+
def scope
|
|
206
|
+
Spree::Import.for_store(current_store).
|
|
207
|
+
for_seller(current_seller).
|
|
208
|
+
where(type: PERMITTED_TYPES).
|
|
209
|
+
includes(scope_includes).
|
|
210
|
+
preload_associations_lazily
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
def resource_scope
|
|
214
|
+
scope
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
# Memoized so a member action that both authorizes and renders the
|
|
218
|
+
# record fetches it once.
|
|
219
|
+
def find_resource
|
|
220
|
+
@find_resource ||= super
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
# Every action on an import is a bulk write of the products it
|
|
224
|
+
# creates, and its rows expose the uploaded data — so reads are gated
|
|
225
|
+
# by the write key too, exactly as on the operator's branch.
|
|
226
|
+
def action_kind
|
|
227
|
+
'write'
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
def build_resource
|
|
231
|
+
klass = resolve_import_type(permitted_params[:type])
|
|
232
|
+
|
|
233
|
+
# An unresolvable type must not fall back to the base class: that
|
|
234
|
+
# would build an import the model's whitelist rejects with a
|
|
235
|
+
# confusing error rather than saying the type is not a seller's to
|
|
236
|
+
# run.
|
|
237
|
+
klass ||= Spree::Import
|
|
238
|
+
|
|
239
|
+
attrs = permitted_params.except(:type).merge(
|
|
240
|
+
store: current_store,
|
|
241
|
+
seller: current_seller,
|
|
242
|
+
user: try_spree_current_user
|
|
243
|
+
)
|
|
244
|
+
# The import-done email links back to the panel — allowed origins
|
|
245
|
+
# only.
|
|
246
|
+
attrs[:results_url] = validated_results_url(attrs[:results_url])
|
|
247
|
+
klass.new(attrs)
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
def permitted_params
|
|
251
|
+
params.permit(*model_additional_permitted_attributes, :type, :attachment, :preferred_delimiter, :results_url)
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
# The registered Import subclass matching `name`, or nil.
|
|
255
|
+
#
|
|
256
|
+
# Takes the API shorthand (`"products"`) or the class name, like the
|
|
257
|
+
# operator's twin, but selects from this branch's own allowlist
|
|
258
|
+
# rather than the full registry.
|
|
259
|
+
def resolve_import_type(name)
|
|
260
|
+
return nil if name.blank?
|
|
261
|
+
|
|
262
|
+
name = name.to_s
|
|
263
|
+
permitted_import_types.find { |type| type.api_type == name }
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
# Intersected with the registry rather than constantized from the
|
|
267
|
+
# list: a host app that unregisters an import type should not find it
|
|
268
|
+
# still reachable here.
|
|
269
|
+
def permitted_import_types
|
|
270
|
+
Spree::Import.available_types.select { |type| PERMITTED_TYPES.include?(type.to_s) }
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
private
|
|
274
|
+
|
|
275
|
+
# The caller-provided URL the done email links back to, honored only
|
|
276
|
+
# when it matches one of the store's allowed origins.
|
|
277
|
+
#
|
|
278
|
+
# Stated here rather than shared with the operator's twin: that one
|
|
279
|
+
# lives on the admin anchor, and the two branches are parallel by
|
|
280
|
+
# design — inheriting across them is what this branch exists to avoid.
|
|
281
|
+
# No configured origins means no caller URL is honored.
|
|
282
|
+
#
|
|
283
|
+
# @return [String, nil]
|
|
284
|
+
def validated_results_url(url)
|
|
285
|
+
return if url.blank?
|
|
286
|
+
return unless current_store.allowed_origin?(url)
|
|
287
|
+
|
|
288
|
+
url
|
|
289
|
+
end
|
|
290
|
+
|
|
291
|
+
def render_unknown_type
|
|
292
|
+
render_error(
|
|
293
|
+
code: Spree::Api::V3::ErrorHandler::ERROR_CODES[:validation_error],
|
|
294
|
+
message: 'Unknown import type',
|
|
295
|
+
status: :unprocessable_content
|
|
296
|
+
)
|
|
297
|
+
end
|
|
298
|
+
|
|
299
|
+
def apply_mappings!(import)
|
|
300
|
+
submitted = params[:mappings]
|
|
301
|
+
return if submitted.blank?
|
|
302
|
+
|
|
303
|
+
ApplicationRecord.transaction do
|
|
304
|
+
submitted.each do |entry|
|
|
305
|
+
mapping = import.mappings.find_by(schema_field: entry[:schema_field])
|
|
306
|
+
next unless mapping
|
|
307
|
+
|
|
308
|
+
mapping.update!(file_column: entry[:file_column].presence)
|
|
309
|
+
end
|
|
310
|
+
end
|
|
311
|
+
import.mappings.reload
|
|
312
|
+
end
|
|
313
|
+
end
|
|
314
|
+
end
|
|
315
|
+
end
|
|
316
|
+
end
|
|
317
|
+
end
|