spree_api 5.4.0.beta7 → 5.4.0.beta9
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/app/controllers/concerns/spree/api/v3/error_handler.rb +3 -0
- data/app/controllers/spree/api/v3/store/auth_controller.rb +62 -19
- data/app/controllers/spree/api/v3/store/carts/{shipments_controller.rb → fulfillments_controller.rb} +13 -13
- data/app/controllers/spree/api/v3/store/customer/password_resets_controller.rb +91 -0
- data/app/controllers/spree/api/v3/store/customers_controller.rb +6 -2
- data/app/controllers/spree/api/v3/store/products_controller.rb +1 -1
- data/app/serializers/spree/api/v3/admin/address_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/admin/allowed_origin_serializer.rb +21 -0
- data/app/serializers/spree/api/v3/admin/credit_card_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/admin/{shipping_method_serializer.rb → delivery_method_serializer.rb} +1 -1
- data/app/serializers/spree/api/v3/admin/delivery_rate_serializer.rb +11 -0
- data/app/serializers/spree/api/v3/admin/{shipment_serializer.rb → fulfillment_serializer.rb} +3 -3
- data/app/serializers/spree/api/v3/admin/media_serializer.rb +17 -0
- data/app/serializers/spree/api/v3/admin/order_serializer.rb +5 -4
- data/app/serializers/spree/api/v3/admin/product_serializer.rb +8 -9
- data/app/serializers/spree/api/v3/admin/store_credit_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/admin/variant_serializer.rb +8 -3
- data/app/serializers/spree/api/v3/base_serializer.rb +1 -1
- data/app/serializers/spree/api/v3/cart_serializer.rb +11 -3
- data/app/serializers/spree/api/v3/{shipping_method_serializer.rb → delivery_method_serializer.rb} +1 -1
- data/app/serializers/spree/api/v3/{shipping_rate_serializer.rb → delivery_rate_serializer.rb} +4 -4
- data/app/serializers/spree/api/v3/fulfillment_serializer.rb +45 -0
- data/app/serializers/spree/api/v3/gift_card_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/media_serializer.rb +60 -0
- data/app/serializers/spree/api/v3/newsletter_subscriber_serializer.rb +2 -2
- data/app/serializers/spree/api/v3/order_serializer.rb +21 -5
- data/app/serializers/spree/api/v3/payment_serializer.rb +6 -2
- data/app/serializers/spree/api/v3/product_serializer.rb +10 -11
- data/app/serializers/spree/api/v3/variant_serializer.rb +14 -9
- data/config/locales/en.yml +3 -0
- data/config/routes.rb +4 -1
- data/lib/spree/api/configuration.rb +2 -0
- data/lib/spree/api/dependencies.rb +14 -8
- data/lib/spree/api/openapi/schema_helper.rb +31 -1
- metadata +17 -15
- data/app/serializers/spree/api/v3/admin/image_serializer.rb +0 -10
- data/app/serializers/spree/api/v3/admin/shipping_rate_serializer.rb +0 -11
- data/app/serializers/spree/api/v3/image_serializer.rb +0 -43
- data/app/serializers/spree/api/v3/shipment_serializer.rb +0 -19
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
class FulfillmentSerializer < BaseSerializer
|
|
5
|
+
typelize number: :string, status: :string, fulfillment_type: :string,
|
|
6
|
+
tracking: [:string, nullable: true],
|
|
7
|
+
tracking_url: [:string, nullable: true], fulfilled_at: [:string, nullable: true],
|
|
8
|
+
cost: :string, display_cost: :string,
|
|
9
|
+
items: 'Array<{ item_id: string; variant_id: string; quantity: number }>'
|
|
10
|
+
|
|
11
|
+
attributes :number, :tracking, :tracking_url,
|
|
12
|
+
:cost, :display_cost,
|
|
13
|
+
created_at: :iso8601, updated_at: :iso8601
|
|
14
|
+
|
|
15
|
+
attribute :status do |shipment|
|
|
16
|
+
shipment.state
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
attribute :fulfillment_type do |shipment|
|
|
20
|
+
shipment.digital? ? 'digital' : 'shipping'
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
attribute :fulfilled_at do |shipment|
|
|
24
|
+
shipment.shipped_at&.iso8601
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Which items (and how many) are in this fulfillment.
|
|
28
|
+
# A line item can be split across fulfillments with different quantities.
|
|
29
|
+
attribute :items do |shipment|
|
|
30
|
+
shipment.manifest.map do |item|
|
|
31
|
+
{
|
|
32
|
+
item_id: item.line_item.prefixed_id,
|
|
33
|
+
variant_id: item.variant.prefixed_id,
|
|
34
|
+
quantity: item.quantity
|
|
35
|
+
}
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
one :shipping_method, key: :delivery_method, resource: Spree.api.delivery_method_serializer
|
|
40
|
+
one :stock_location, resource: Spree.api.stock_location_serializer
|
|
41
|
+
many :shipping_rates, key: :delivery_rates, resource: Spree.api.delivery_rate_serializer
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -3,7 +3,7 @@ module Spree
|
|
|
3
3
|
module V3
|
|
4
4
|
class GiftCardSerializer < BaseSerializer
|
|
5
5
|
typelize code: :string,
|
|
6
|
-
|
|
6
|
+
status: :string,
|
|
7
7
|
amount: :string,
|
|
8
8
|
amount_used: :string,
|
|
9
9
|
amount_authorized: :string,
|
|
@@ -21,7 +21,7 @@ module Spree
|
|
|
21
21
|
gift_card.display_code
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
attribute :
|
|
24
|
+
attribute :status do |gift_card|
|
|
25
25
|
gift_card.display_state
|
|
26
26
|
end
|
|
27
27
|
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V3
|
|
4
|
+
class MediaSerializer < BaseSerializer
|
|
5
|
+
typelize position: :number, alt: [:string, nullable: true],
|
|
6
|
+
product_id: [:string, nullable: true],
|
|
7
|
+
variant_ids: [:string, multi: true],
|
|
8
|
+
media_type: :string,
|
|
9
|
+
focal_point_x: [:number, nullable: true],
|
|
10
|
+
focal_point_y: [:number, nullable: true],
|
|
11
|
+
external_video_url: [:string, nullable: true],
|
|
12
|
+
original_url: [:string, nullable: true], mini_url: [:string, nullable: true],
|
|
13
|
+
small_url: [:string, nullable: true], medium_url: [:string, nullable: true],
|
|
14
|
+
large_url: [:string, nullable: true], xlarge_url: [:string, nullable: true],
|
|
15
|
+
og_image_url: [:string, nullable: true]
|
|
16
|
+
|
|
17
|
+
attribute :product_id do |asset|
|
|
18
|
+
asset.product&.prefixed_id
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Returns prefixed IDs of variants this media is associated with.
|
|
22
|
+
# Currently: single variant via viewable (legacy). In 6.0: multiple via VariantMedia join table.
|
|
23
|
+
attribute :variant_ids do |asset|
|
|
24
|
+
if asset.viewable_type == 'Spree::Variant'
|
|
25
|
+
[asset.viewable&.prefixed_id].compact
|
|
26
|
+
else
|
|
27
|
+
[]
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
attributes :position, :alt, :media_type,
|
|
32
|
+
:focal_point_x, :focal_point_y, :external_video_url,
|
|
33
|
+
created_at: :iso8601, updated_at: :iso8601
|
|
34
|
+
|
|
35
|
+
attribute :original_url do |asset|
|
|
36
|
+
image_url_for(asset)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Dynamically define attributes for each configured image variant
|
|
40
|
+
# Uses named variants from Spree::Config.product_image_variant_sizes
|
|
41
|
+
# (e.g., mini, small, medium, large, xlarge)
|
|
42
|
+
Spree::Config.product_image_variant_sizes.each_key do |variant_name|
|
|
43
|
+
attribute :"#{variant_name}_url" do |asset|
|
|
44
|
+
variant_url(asset, variant_name)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
private
|
|
49
|
+
|
|
50
|
+
def variant_url(asset, variant_name)
|
|
51
|
+
return nil unless asset&.attachment&.attached?
|
|
52
|
+
|
|
53
|
+
Rails.application.routes.url_helpers.cdn_image_url(
|
|
54
|
+
asset.attachment.variant(variant_name)
|
|
55
|
+
)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -6,7 +6,7 @@ module Spree
|
|
|
6
6
|
class NewsletterSubscriberSerializer < BaseSerializer
|
|
7
7
|
typelize email: :string, verified: :boolean,
|
|
8
8
|
verified_at: [:string, nullable: true],
|
|
9
|
-
|
|
9
|
+
customer_id: [:string, nullable: true]
|
|
10
10
|
|
|
11
11
|
attributes :email, created_at: :iso8601, updated_at: :iso8601
|
|
12
12
|
|
|
@@ -18,7 +18,7 @@ module Spree
|
|
|
18
18
|
subscriber.verified_at&.iso8601
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
attribute :
|
|
21
|
+
attribute :customer_id do |subscriber|
|
|
22
22
|
subscriber.user&.prefixed_id
|
|
23
23
|
end
|
|
24
24
|
end
|
|
@@ -6,9 +6,9 @@ module Spree
|
|
|
6
6
|
class OrderSerializer < BaseSerializer
|
|
7
7
|
typelize number: :string, email: :string,
|
|
8
8
|
special_instructions: [:string, nullable: true], currency: :string, locale: [:string, nullable: true], item_count: :number,
|
|
9
|
-
|
|
9
|
+
fulfillment_status: [:string, nullable: true], payment_status: [:string, nullable: true],
|
|
10
10
|
item_total: :string, display_item_total: :string,
|
|
11
|
-
|
|
11
|
+
delivery_total: :string, display_delivery_total: :string,
|
|
12
12
|
adjustment_total: :string, display_adjustment_total: :string,
|
|
13
13
|
promo_total: :string, display_promo_total: :string,
|
|
14
14
|
tax_total: :string, display_tax_total: :string,
|
|
@@ -18,16 +18,32 @@ module Spree
|
|
|
18
18
|
bill_address: { nullable: true }, ship_address: { nullable: true }
|
|
19
19
|
|
|
20
20
|
attributes :number, :email, :special_instructions,
|
|
21
|
-
:currency, :locale, :item_count,
|
|
22
|
-
:item_total, :display_item_total,
|
|
21
|
+
:currency, :locale, :item_count,
|
|
22
|
+
:item_total, :display_item_total,
|
|
23
23
|
:adjustment_total, :display_adjustment_total, :promo_total, :display_promo_total,
|
|
24
24
|
:tax_total, :display_tax_total, :included_tax_total, :display_included_tax_total,
|
|
25
25
|
:additional_tax_total, :display_additional_tax_total, :total, :display_total,
|
|
26
26
|
completed_at: :iso8601, created_at: :iso8601, updated_at: :iso8601
|
|
27
27
|
|
|
28
|
+
attribute :fulfillment_status do |order|
|
|
29
|
+
order.shipment_state
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
attribute :payment_status do |order|
|
|
33
|
+
order.payment_state
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
attribute :delivery_total do |order|
|
|
37
|
+
order.ship_total
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
attribute :display_delivery_total do |order|
|
|
41
|
+
order.display_ship_total.to_s
|
|
42
|
+
end
|
|
43
|
+
|
|
28
44
|
many :order_promotions, key: :promotions, resource: Spree.api.order_promotion_serializer
|
|
29
45
|
many :line_items, key: :items, resource: Spree.api.line_item_serializer
|
|
30
|
-
many :shipments, resource: Spree.api.
|
|
46
|
+
many :shipments, key: :fulfillments, resource: Spree.api.fulfillment_serializer
|
|
31
47
|
many :payments, resource: Spree.api.payment_serializer
|
|
32
48
|
one :bill_address, resource: Spree.api.address_serializer
|
|
33
49
|
one :ship_address, resource: Spree.api.address_serializer
|
|
@@ -2,7 +2,7 @@ module Spree
|
|
|
2
2
|
module Api
|
|
3
3
|
module V3
|
|
4
4
|
class PaymentSerializer < BaseSerializer
|
|
5
|
-
typelize
|
|
5
|
+
typelize status: :string, payment_method_id: :string, response_code: [:string, nullable: true],
|
|
6
6
|
number: :string, amount: :string, display_amount: :string,
|
|
7
7
|
source_type: [:string, nullable: true, enum: %w[credit_card store_credit payment_source]],
|
|
8
8
|
source_id: [:string, nullable: true],
|
|
@@ -12,9 +12,13 @@ module Spree
|
|
|
12
12
|
payment.payment_method&.prefixed_id
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
attributes :
|
|
15
|
+
attributes :response_code, :number, :amount, :display_amount,
|
|
16
16
|
created_at: :iso8601, updated_at: :iso8601
|
|
17
17
|
|
|
18
|
+
attribute :status do |payment|
|
|
19
|
+
payment.state
|
|
20
|
+
end
|
|
21
|
+
|
|
18
22
|
attribute :source_type do |payment|
|
|
19
23
|
case payment.source_type
|
|
20
24
|
when 'Spree::CreditCard'
|
|
@@ -40,9 +40,9 @@ module Spree
|
|
|
40
40
|
product.default_variant&.prefixed_id
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
-
# Main product image URL for listings (cached
|
|
43
|
+
# Main product image URL for listings (cached primary_media)
|
|
44
44
|
attribute :thumbnail_url do |product|
|
|
45
|
-
image_url_for(product.
|
|
45
|
+
image_url_for(product.primary_media)
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
attribute :tags do |product|
|
|
@@ -68,10 +68,14 @@ module Spree
|
|
|
68
68
|
end
|
|
69
69
|
|
|
70
70
|
# Conditional associations
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
71
|
+
one :primary_media,
|
|
72
|
+
resource: Spree.api.media_serializer,
|
|
73
|
+
if: proc { expand?('primary_media') }
|
|
74
|
+
|
|
75
|
+
many :gallery_media,
|
|
76
|
+
key: :media,
|
|
77
|
+
resource: Spree.api.media_serializer,
|
|
78
|
+
if: proc { expand?('media') }
|
|
75
79
|
|
|
76
80
|
many :variants,
|
|
77
81
|
resource: Spree.api.variant_serializer,
|
|
@@ -81,11 +85,6 @@ module Spree
|
|
|
81
85
|
resource: Spree.api.variant_serializer,
|
|
82
86
|
if: proc { expand?('default_variant') }
|
|
83
87
|
|
|
84
|
-
one :master,
|
|
85
|
-
key: :master_variant,
|
|
86
|
-
resource: Spree.api.variant_serializer,
|
|
87
|
-
if: proc { expand?('master_variant') }
|
|
88
|
-
|
|
89
88
|
many :option_types,
|
|
90
89
|
resource: Spree.api.option_type_serializer,
|
|
91
90
|
if: proc { expand?('option_types') }
|
|
@@ -5,8 +5,8 @@ module Spree
|
|
|
5
5
|
# Customer-facing variant data with limited fields
|
|
6
6
|
class VariantSerializer < BaseSerializer
|
|
7
7
|
typelize product_id: :string, sku: [:string, nullable: true],
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
options_text: :string, track_inventory: :boolean, media_count: :number,
|
|
9
|
+
thumbnail_url: [:string, nullable: true],
|
|
10
10
|
purchasable: :boolean, in_stock: :boolean, backorderable: :boolean,
|
|
11
11
|
weight: [:number, nullable: true], height: [:number, nullable: true], width: [:number, nullable: true], depth: [:number, nullable: true],
|
|
12
12
|
price: 'Price',
|
|
@@ -16,12 +16,12 @@ module Spree
|
|
|
16
16
|
variant.product&.prefixed_id
|
|
17
17
|
end
|
|
18
18
|
|
|
19
|
-
attributes :sku, :
|
|
19
|
+
attributes :sku, :options_text, :track_inventory, :media_count,
|
|
20
20
|
created_at: :iso8601, updated_at: :iso8601
|
|
21
21
|
|
|
22
|
-
# Main variant image URL for listings (cached
|
|
23
|
-
attribute :
|
|
24
|
-
image_url_for(variant.
|
|
22
|
+
# Main variant image URL for listings (cached primary_media)
|
|
23
|
+
attribute :thumbnail_url do |variant|
|
|
24
|
+
image_url_for(variant.primary_media)
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
attribute :purchasable do |variant|
|
|
@@ -70,9 +70,14 @@ module Spree
|
|
|
70
70
|
end
|
|
71
71
|
|
|
72
72
|
# Conditional associations
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
73
|
+
one :primary_media,
|
|
74
|
+
resource: Spree.api.media_serializer,
|
|
75
|
+
if: proc { expand?('primary_media') }
|
|
76
|
+
|
|
77
|
+
many :gallery_media,
|
|
78
|
+
key: :media,
|
|
79
|
+
resource: Spree.api.media_serializer,
|
|
80
|
+
if: proc { expand?('media') }
|
|
76
81
|
|
|
77
82
|
many :option_values, resource: Spree.api.option_value_serializer
|
|
78
83
|
|
data/config/locales/en.yml
CHANGED
|
@@ -7,6 +7,9 @@ en:
|
|
|
7
7
|
invalid_resource: Invalid resource. Please fix errors and try again.
|
|
8
8
|
invalid_taxonomy_id: Invalid taxonomy id.
|
|
9
9
|
current_password_invalid: Current password is invalid or missing
|
|
10
|
+
password_reset_requested: If an account exists for that email, password reset instructions have been sent.
|
|
11
|
+
password_reset_token_invalid: Password reset token is invalid or has expired.
|
|
12
|
+
redirect_url_not_allowed: The redirect URL is not from an allowed origin for this store.
|
|
10
13
|
must_specify_api_key: You must specify an API key.
|
|
11
14
|
negative_quantity: quantity is negative
|
|
12
15
|
order:
|
data/config/routes.rb
CHANGED
|
@@ -5,6 +5,7 @@ Spree::Core::Engine.add_routes do
|
|
|
5
5
|
# Authentication
|
|
6
6
|
post 'auth/login', to: 'auth#create'
|
|
7
7
|
post 'auth/refresh', to: 'auth#refresh'
|
|
8
|
+
post 'auth/logout', to: 'auth#logout'
|
|
8
9
|
post 'auth/oauth/callback', to: 'auth#oauth_callback'
|
|
9
10
|
|
|
10
11
|
# Markets
|
|
@@ -38,7 +39,7 @@ Spree::Core::Engine.add_routes do
|
|
|
38
39
|
end
|
|
39
40
|
resources :items, only: [:create, :update, :destroy], controller: 'carts/items'
|
|
40
41
|
resources :coupon_codes, only: [:create, :destroy], controller: 'carts/coupon_codes'
|
|
41
|
-
resources :
|
|
42
|
+
resources :fulfillments, only: [:index, :update], controller: 'carts/fulfillments'
|
|
42
43
|
resources :payment_methods, only: [:index], controller: 'carts/payment_methods'
|
|
43
44
|
resources :payments, only: [:index, :show, :create], controller: 'carts/payments'
|
|
44
45
|
resources :payment_sessions, only: [:create, :show, :update], controller: 'carts/payment_sessions' do
|
|
@@ -59,6 +60,8 @@ Spree::Core::Engine.add_routes do
|
|
|
59
60
|
|
|
60
61
|
# Customer nested resources
|
|
61
62
|
namespace :customer, path: 'customer' do
|
|
63
|
+
resources :password_resets, only: [:create, :update]
|
|
64
|
+
|
|
62
65
|
resources :orders, only: [:index, :show]
|
|
63
66
|
resources :addresses, only: [:index, :show, :create, :update, :destroy] do
|
|
64
67
|
member do
|
|
@@ -11,6 +11,7 @@ module Spree
|
|
|
11
11
|
|
|
12
12
|
preference :jwt_expiration, :integer, default: 3600 # 1 hour in seconds
|
|
13
13
|
preference :jwt_secret_key, :string, default: nil
|
|
14
|
+
preference :refresh_token_expiry, :integer, default: 2_592_000 # 30 days in seconds
|
|
14
15
|
|
|
15
16
|
# Rate limiting
|
|
16
17
|
preference :rate_limit_per_key, :integer, default: 300 # per publishable API key
|
|
@@ -19,6 +20,7 @@ module Spree
|
|
|
19
20
|
preference :rate_limit_register, :integer, default: 3 # per IP
|
|
20
21
|
preference :rate_limit_refresh, :integer, default: 10 # per IP
|
|
21
22
|
preference :rate_limit_oauth, :integer, default: 5 # per IP
|
|
23
|
+
preference :rate_limit_password_reset, :integer, default: 3 # per IP
|
|
22
24
|
|
|
23
25
|
# Request body size limit in bytes
|
|
24
26
|
preference :max_request_body_size, :integer, default: 102_400 # 100KB
|
|
@@ -96,7 +96,7 @@ module Spree
|
|
|
96
96
|
price_serializer: 'Spree::Api::V3::PriceSerializer',
|
|
97
97
|
product_serializer: 'Spree::Api::V3::ProductSerializer',
|
|
98
98
|
variant_serializer: 'Spree::Api::V3::VariantSerializer',
|
|
99
|
-
|
|
99
|
+
media_serializer: 'Spree::Api::V3::MediaSerializer',
|
|
100
100
|
option_type_serializer: 'Spree::Api::V3::OptionTypeSerializer',
|
|
101
101
|
option_value_serializer: 'Spree::Api::V3::OptionValueSerializer',
|
|
102
102
|
cart_serializer: 'Spree::Api::V3::CartSerializer',
|
|
@@ -107,7 +107,8 @@ module Spree
|
|
|
107
107
|
payment_setup_session_serializer: 'Spree::Api::V3::PaymentSetupSessionSerializer',
|
|
108
108
|
payment_source_serializer: 'Spree::Api::V3::PaymentSourceSerializer',
|
|
109
109
|
store_credit_serializer: 'Spree::Api::V3::StoreCreditSerializer',
|
|
110
|
-
shipment_serializer: 'Spree::Api::V3::
|
|
110
|
+
shipment_serializer: 'Spree::Api::V3::FulfillmentSerializer',
|
|
111
|
+
fulfillment_serializer: 'Spree::Api::V3::FulfillmentSerializer',
|
|
111
112
|
address_serializer: 'Spree::Api::V3::AddressSerializer',
|
|
112
113
|
customer_serializer: 'Spree::Api::V3::CustomerSerializer',
|
|
113
114
|
country_serializer: 'Spree::Api::V3::CountrySerializer',
|
|
@@ -116,8 +117,10 @@ module Spree
|
|
|
116
117
|
wishlist_serializer: 'Spree::Api::V3::WishlistSerializer',
|
|
117
118
|
wished_item_serializer: 'Spree::Api::V3::WishedItemSerializer',
|
|
118
119
|
payment_method_serializer: 'Spree::Api::V3::PaymentMethodSerializer',
|
|
119
|
-
shipping_method_serializer: 'Spree::Api::V3::
|
|
120
|
-
shipping_rate_serializer: 'Spree::Api::V3::
|
|
120
|
+
shipping_method_serializer: 'Spree::Api::V3::DeliveryMethodSerializer',
|
|
121
|
+
shipping_rate_serializer: 'Spree::Api::V3::DeliveryRateSerializer',
|
|
122
|
+
delivery_method_serializer: 'Spree::Api::V3::DeliveryMethodSerializer',
|
|
123
|
+
delivery_rate_serializer: 'Spree::Api::V3::DeliveryRateSerializer',
|
|
121
124
|
stock_location_serializer: 'Spree::Api::V3::StockLocationSerializer',
|
|
122
125
|
category_serializer: 'Spree::Api::V3::CategorySerializer',
|
|
123
126
|
cart_promotion_serializer: 'Spree::Api::V3::CartPromotionSerializer',
|
|
@@ -161,10 +164,11 @@ module Spree
|
|
|
161
164
|
admin_line_item_serializer: 'Spree::Api::V3::Admin::LineItemSerializer',
|
|
162
165
|
admin_option_type_serializer: 'Spree::Api::V3::Admin::OptionTypeSerializer',
|
|
163
166
|
admin_option_value_serializer: 'Spree::Api::V3::Admin::OptionValueSerializer',
|
|
164
|
-
|
|
167
|
+
admin_media_serializer: 'Spree::Api::V3::Admin::MediaSerializer',
|
|
165
168
|
admin_asset_serializer: 'Spree::Api::V3::Admin::AssetSerializer',
|
|
166
169
|
admin_stock_item_serializer: 'Spree::Api::V3::Admin::StockItemSerializer',
|
|
167
|
-
admin_shipment_serializer: 'Spree::Api::V3::Admin::
|
|
170
|
+
admin_shipment_serializer: 'Spree::Api::V3::Admin::FulfillmentSerializer',
|
|
171
|
+
admin_fulfillment_serializer: 'Spree::Api::V3::Admin::FulfillmentSerializer',
|
|
168
172
|
admin_payment_serializer: 'Spree::Api::V3::Admin::PaymentSerializer',
|
|
169
173
|
admin_refund_serializer: 'Spree::Api::V3::Admin::RefundSerializer',
|
|
170
174
|
admin_adjustment_serializer: 'Spree::Api::V3::Admin::AdjustmentSerializer',
|
|
@@ -174,9 +178,11 @@ module Spree
|
|
|
174
178
|
admin_reimbursement_serializer: 'Spree::Api::V3::Admin::ReimbursementSerializer',
|
|
175
179
|
admin_admin_user_serializer: 'Spree::Api::V3::Admin::AdminUserSerializer',
|
|
176
180
|
admin_address_serializer: 'Spree::Api::V3::Admin::AddressSerializer',
|
|
177
|
-
admin_shipping_method_serializer: 'Spree::Api::V3::Admin::
|
|
181
|
+
admin_shipping_method_serializer: 'Spree::Api::V3::Admin::DeliveryMethodSerializer',
|
|
182
|
+
admin_delivery_method_serializer: 'Spree::Api::V3::Admin::DeliveryMethodSerializer',
|
|
178
183
|
admin_stock_location_serializer: 'Spree::Api::V3::Admin::StockLocationSerializer',
|
|
179
|
-
admin_shipping_rate_serializer: 'Spree::Api::V3::Admin::
|
|
184
|
+
admin_shipping_rate_serializer: 'Spree::Api::V3::Admin::DeliveryRateSerializer',
|
|
185
|
+
admin_delivery_rate_serializer: 'Spree::Api::V3::Admin::DeliveryRateSerializer',
|
|
180
186
|
admin_order_promotion_serializer: 'Spree::Api::V3::Admin::OrderPromotionSerializer',
|
|
181
187
|
admin_payment_method_serializer: 'Spree::Api::V3::Admin::PaymentMethodSerializer',
|
|
182
188
|
admin_credit_card_serializer: 'Spree::Api::V3::Admin::CreditCardSerializer',
|
|
@@ -81,9 +81,10 @@ module Spree
|
|
|
81
81
|
type: :object,
|
|
82
82
|
properties: {
|
|
83
83
|
token: { type: :string, description: 'JWT access token' },
|
|
84
|
+
refresh_token: { type: :string, description: 'Refresh token for obtaining new access tokens' },
|
|
84
85
|
user: { '$ref' => '#/components/schemas/Customer' }
|
|
85
86
|
},
|
|
86
|
-
required: %w[token user]
|
|
87
|
+
required: %w[token refresh_token user]
|
|
87
88
|
},
|
|
88
89
|
CheckoutRequirement: {
|
|
89
90
|
type: :object,
|
|
@@ -93,6 +94,16 @@ module Spree
|
|
|
93
94
|
message: { type: :string, description: 'Human-readable requirement message', example: 'Add a payment method' }
|
|
94
95
|
},
|
|
95
96
|
required: %w[step field message]
|
|
97
|
+
},
|
|
98
|
+
FulfillmentManifestItem: {
|
|
99
|
+
type: :object,
|
|
100
|
+
description: 'An item within a fulfillment — which line item and how many units are in this fulfillment',
|
|
101
|
+
properties: {
|
|
102
|
+
item_id: { type: :string, description: 'Line item prefixed ID', example: 'li_abc123' },
|
|
103
|
+
variant_id: { type: :string, description: 'Variant prefixed ID', example: 'variant_abc123' },
|
|
104
|
+
quantity: { type: :integer, description: 'Quantity in this fulfillment', example: 2 }
|
|
105
|
+
},
|
|
106
|
+
required: %w[item_id variant_id quantity]
|
|
96
107
|
}
|
|
97
108
|
}
|
|
98
109
|
end
|
|
@@ -120,6 +131,7 @@ module Spree
|
|
|
120
131
|
strip_null_from_enums(s)
|
|
121
132
|
end
|
|
122
133
|
patch_cart_schema(schemas)
|
|
134
|
+
patch_fulfillment_schema(schemas)
|
|
123
135
|
schemas
|
|
124
136
|
end
|
|
125
137
|
end
|
|
@@ -142,6 +154,24 @@ module Spree
|
|
|
142
154
|
end
|
|
143
155
|
end
|
|
144
156
|
|
|
157
|
+
# Typelizer cannot represent Array<{...}> inline object types in OpenAPI,
|
|
158
|
+
# so we patch Fulfillment#items to reference the FulfillmentManifestItem component schema.
|
|
159
|
+
def patch_fulfillment_schema(schemas)
|
|
160
|
+
fulfillment = schemas['Fulfillment'] || schemas[:Fulfillment]
|
|
161
|
+
return unless fulfillment
|
|
162
|
+
|
|
163
|
+
props = fulfillment[:properties]
|
|
164
|
+
return unless props
|
|
165
|
+
|
|
166
|
+
items_key = props.key?('items') ? 'items' : :items
|
|
167
|
+
if props[items_key]
|
|
168
|
+
props[items_key] = {
|
|
169
|
+
type: :array,
|
|
170
|
+
items: { '$ref' => '#/components/schemas/FulfillmentManifestItem' }
|
|
171
|
+
}
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
|
|
145
175
|
# Typelizer adds nil to enum arrays for nullable fields.
|
|
146
176
|
# OpenAPI 3.0 handles nullability via `nullable: true`, so the nil entry is redundant
|
|
147
177
|
# and causes issues with code generators.
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: spree_api
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 5.4.0.
|
|
4
|
+
version: 5.4.0.beta9
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Vendo Connect Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-03-
|
|
11
|
+
date: 2026-03-17 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rswag-specs
|
|
@@ -86,14 +86,14 @@ dependencies:
|
|
|
86
86
|
requirements:
|
|
87
87
|
- - '='
|
|
88
88
|
- !ruby/object:Gem::Version
|
|
89
|
-
version: 5.4.0.
|
|
89
|
+
version: 5.4.0.beta9
|
|
90
90
|
type: :runtime
|
|
91
91
|
prerelease: false
|
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
93
|
requirements:
|
|
94
94
|
- - '='
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: 5.4.0.
|
|
96
|
+
version: 5.4.0.beta9
|
|
97
97
|
description: Spree's API
|
|
98
98
|
email:
|
|
99
99
|
- hello@spreecommerce.org
|
|
@@ -121,11 +121,11 @@ files:
|
|
|
121
121
|
- app/controllers/spree/api/v3/store/auth_controller.rb
|
|
122
122
|
- app/controllers/spree/api/v3/store/base_controller.rb
|
|
123
123
|
- app/controllers/spree/api/v3/store/carts/coupon_codes_controller.rb
|
|
124
|
+
- app/controllers/spree/api/v3/store/carts/fulfillments_controller.rb
|
|
124
125
|
- app/controllers/spree/api/v3/store/carts/items_controller.rb
|
|
125
126
|
- app/controllers/spree/api/v3/store/carts/payment_methods_controller.rb
|
|
126
127
|
- app/controllers/spree/api/v3/store/carts/payment_sessions_controller.rb
|
|
127
128
|
- app/controllers/spree/api/v3/store/carts/payments_controller.rb
|
|
128
|
-
- app/controllers/spree/api/v3/store/carts/shipments_controller.rb
|
|
129
129
|
- app/controllers/spree/api/v3/store/carts/store_credits_controller.rb
|
|
130
130
|
- app/controllers/spree/api/v3/store/carts_controller.rb
|
|
131
131
|
- app/controllers/spree/api/v3/store/categories/products_controller.rb
|
|
@@ -136,6 +136,7 @@ files:
|
|
|
136
136
|
- app/controllers/spree/api/v3/store/customer/credit_cards_controller.rb
|
|
137
137
|
- app/controllers/spree/api/v3/store/customer/gift_cards_controller.rb
|
|
138
138
|
- app/controllers/spree/api/v3/store/customer/orders_controller.rb
|
|
139
|
+
- app/controllers/spree/api/v3/store/customer/password_resets_controller.rb
|
|
139
140
|
- app/controllers/spree/api/v3/store/customer/payment_setup_sessions_controller.rb
|
|
140
141
|
- app/controllers/spree/api/v3/store/customers_controller.rb
|
|
141
142
|
- app/controllers/spree/api/v3/store/digitals_controller.rb
|
|
@@ -155,13 +156,17 @@ files:
|
|
|
155
156
|
- app/serializers/spree/api/v3/admin/address_serializer.rb
|
|
156
157
|
- app/serializers/spree/api/v3/admin/adjustment_serializer.rb
|
|
157
158
|
- app/serializers/spree/api/v3/admin/admin_user_serializer.rb
|
|
159
|
+
- app/serializers/spree/api/v3/admin/allowed_origin_serializer.rb
|
|
158
160
|
- app/serializers/spree/api/v3/admin/asset_serializer.rb
|
|
159
161
|
- app/serializers/spree/api/v3/admin/category_serializer.rb
|
|
160
162
|
- app/serializers/spree/api/v3/admin/credit_card_serializer.rb
|
|
161
163
|
- app/serializers/spree/api/v3/admin/customer_serializer.rb
|
|
164
|
+
- app/serializers/spree/api/v3/admin/delivery_method_serializer.rb
|
|
165
|
+
- app/serializers/spree/api/v3/admin/delivery_rate_serializer.rb
|
|
162
166
|
- app/serializers/spree/api/v3/admin/digital_link_serializer.rb
|
|
163
|
-
- app/serializers/spree/api/v3/admin/
|
|
167
|
+
- app/serializers/spree/api/v3/admin/fulfillment_serializer.rb
|
|
164
168
|
- app/serializers/spree/api/v3/admin/line_item_serializer.rb
|
|
169
|
+
- app/serializers/spree/api/v3/admin/media_serializer.rb
|
|
165
170
|
- app/serializers/spree/api/v3/admin/metafield_serializer.rb
|
|
166
171
|
- app/serializers/spree/api/v3/admin/option_type_serializer.rb
|
|
167
172
|
- app/serializers/spree/api/v3/admin/option_value_serializer.rb
|
|
@@ -175,10 +180,7 @@ files:
|
|
|
175
180
|
- app/serializers/spree/api/v3/admin/refund_serializer.rb
|
|
176
181
|
- app/serializers/spree/api/v3/admin/reimbursement_serializer.rb
|
|
177
182
|
- app/serializers/spree/api/v3/admin/return_authorization_serializer.rb
|
|
178
|
-
- app/serializers/spree/api/v3/admin/shipment_serializer.rb
|
|
179
183
|
- app/serializers/spree/api/v3/admin/shipping_category_serializer.rb
|
|
180
|
-
- app/serializers/spree/api/v3/admin/shipping_method_serializer.rb
|
|
181
|
-
- app/serializers/spree/api/v3/admin/shipping_rate_serializer.rb
|
|
182
184
|
- app/serializers/spree/api/v3/admin/stock_item_serializer.rb
|
|
183
185
|
- app/serializers/spree/api/v3/admin/stock_location_serializer.rb
|
|
184
186
|
- app/serializers/spree/api/v3/admin/store_credit_serializer.rb
|
|
@@ -194,18 +196,21 @@ files:
|
|
|
194
196
|
- app/serializers/spree/api/v3/currency_serializer.rb
|
|
195
197
|
- app/serializers/spree/api/v3/customer_return_serializer.rb
|
|
196
198
|
- app/serializers/spree/api/v3/customer_serializer.rb
|
|
199
|
+
- app/serializers/spree/api/v3/delivery_method_serializer.rb
|
|
200
|
+
- app/serializers/spree/api/v3/delivery_rate_serializer.rb
|
|
197
201
|
- app/serializers/spree/api/v3/digital_link_serializer.rb
|
|
198
202
|
- app/serializers/spree/api/v3/digital_serializer.rb
|
|
199
203
|
- app/serializers/spree/api/v3/export_serializer.rb
|
|
204
|
+
- app/serializers/spree/api/v3/fulfillment_serializer.rb
|
|
200
205
|
- app/serializers/spree/api/v3/gift_card_batch_serializer.rb
|
|
201
206
|
- app/serializers/spree/api/v3/gift_card_serializer.rb
|
|
202
|
-
- app/serializers/spree/api/v3/image_serializer.rb
|
|
203
207
|
- app/serializers/spree/api/v3/import_row_serializer.rb
|
|
204
208
|
- app/serializers/spree/api/v3/import_serializer.rb
|
|
205
209
|
- app/serializers/spree/api/v3/invitation_serializer.rb
|
|
206
210
|
- app/serializers/spree/api/v3/line_item_serializer.rb
|
|
207
211
|
- app/serializers/spree/api/v3/locale_serializer.rb
|
|
208
212
|
- app/serializers/spree/api/v3/market_serializer.rb
|
|
213
|
+
- app/serializers/spree/api/v3/media_serializer.rb
|
|
209
214
|
- app/serializers/spree/api/v3/metafield_serializer.rb
|
|
210
215
|
- app/serializers/spree/api/v3/newsletter_subscriber_serializer.rb
|
|
211
216
|
- app/serializers/spree/api/v3/option_type_serializer.rb
|
|
@@ -225,10 +230,7 @@ files:
|
|
|
225
230
|
- app/serializers/spree/api/v3/report_serializer.rb
|
|
226
231
|
- app/serializers/spree/api/v3/return_authorization_serializer.rb
|
|
227
232
|
- app/serializers/spree/api/v3/return_item_serializer.rb
|
|
228
|
-
- app/serializers/spree/api/v3/shipment_serializer.rb
|
|
229
233
|
- app/serializers/spree/api/v3/shipping_category_serializer.rb
|
|
230
|
-
- app/serializers/spree/api/v3/shipping_method_serializer.rb
|
|
231
|
-
- app/serializers/spree/api/v3/shipping_rate_serializer.rb
|
|
232
234
|
- app/serializers/spree/api/v3/state_serializer.rb
|
|
233
235
|
- app/serializers/spree/api/v3/stock_item_serializer.rb
|
|
234
236
|
- app/serializers/spree/api/v3/stock_location_serializer.rb
|
|
@@ -266,9 +268,9 @@ licenses:
|
|
|
266
268
|
- BSD-3-Clause
|
|
267
269
|
metadata:
|
|
268
270
|
bug_tracker_uri: https://github.com/spree/spree/issues
|
|
269
|
-
changelog_uri: https://github.com/spree/spree/releases/tag/v5.4.0.
|
|
271
|
+
changelog_uri: https://github.com/spree/spree/releases/tag/v5.4.0.beta9
|
|
270
272
|
documentation_uri: https://docs.spreecommerce.org/
|
|
271
|
-
source_code_uri: https://github.com/spree/spree/tree/v5.4.0.
|
|
273
|
+
source_code_uri: https://github.com/spree/spree/tree/v5.4.0.beta9
|
|
272
274
|
post_install_message:
|
|
273
275
|
rdoc_options: []
|
|
274
276
|
require_paths:
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
module Spree
|
|
2
|
-
module Api
|
|
3
|
-
module V3
|
|
4
|
-
module Admin
|
|
5
|
-
class ShippingRateSerializer < V3::ShippingRateSerializer
|
|
6
|
-
one :shipping_method, resource: Spree.api.admin_shipping_method_serializer, if: proc { expand?('shipping_method') }
|
|
7
|
-
end
|
|
8
|
-
end
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
end
|