spree_api 5.4.0.beta4 → 5.4.0.beta6

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.
Files changed (97) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +4 -4
  3. data/app/controllers/concerns/spree/api/v3/api_key_authentication.rb +1 -1
  4. data/app/controllers/concerns/spree/api/v3/error_handler.rb +12 -2
  5. data/app/controllers/concerns/spree/api/v3/http_caching.rb +10 -2
  6. data/app/controllers/concerns/spree/api/v3/idempotent.rb +82 -0
  7. data/app/controllers/concerns/spree/api/v3/jwt_authentication.rb +4 -1
  8. data/app/controllers/concerns/spree/api/v3/order_concern.rb +1 -6
  9. data/app/controllers/concerns/spree/api/v3/rate_limit_headers.rb +31 -0
  10. data/app/controllers/concerns/spree/api/v3/resource_serializer.rb +30 -2
  11. data/app/controllers/concerns/spree/api/v3/security_headers.rb +4 -0
  12. data/app/controllers/spree/api/v3/admin/base_controller.rb +28 -0
  13. data/app/controllers/spree/api/v3/admin/resource_controller.rb +28 -0
  14. data/app/controllers/spree/api/v3/base_controller.rb +20 -1
  15. data/app/controllers/spree/api/v3/resource_controller.rb +35 -3
  16. data/app/controllers/spree/api/v3/store/auth_controller.rb +4 -24
  17. data/app/controllers/spree/api/v3/store/base_controller.rb +0 -11
  18. data/app/controllers/spree/api/v3/store/cart_controller.rb +6 -2
  19. data/app/controllers/spree/api/v3/store/categories/products_controller.rb +37 -0
  20. data/app/controllers/spree/api/v3/store/{taxons_controller.rb → categories_controller.rb} +8 -6
  21. data/app/controllers/spree/api/v3/store/countries_controller.rb +6 -0
  22. data/app/controllers/spree/api/v3/store/currencies_controller.rb +4 -0
  23. data/app/controllers/spree/api/v3/store/customers_controller.rb +102 -0
  24. data/app/controllers/spree/api/v3/store/locales_controller.rb +4 -0
  25. data/app/controllers/spree/api/v3/store/markets/countries_controller.rb +6 -0
  26. data/app/controllers/spree/api/v3/store/markets_controller.rb +8 -0
  27. data/app/controllers/spree/api/v3/store/orders/payments_controller.rb +38 -0
  28. data/app/controllers/spree/api/v3/store/orders_controller.rb +3 -2
  29. data/app/controllers/spree/api/v3/store/products/filters_controller.rb +9 -8
  30. data/app/controllers/spree/api/v3/store/products_controller.rb +12 -19
  31. data/app/jobs/spree/webhook_delivery_job.rb +4 -1
  32. data/app/serializers/spree/api/v3/admin/address_serializer.rb +24 -0
  33. data/app/serializers/spree/api/v3/admin/adjustment_serializer.rb +36 -0
  34. data/app/serializers/spree/api/v3/admin/admin_user_serializer.rb +15 -0
  35. data/app/serializers/spree/api/v3/admin/asset_serializer.rb +10 -0
  36. data/app/serializers/spree/api/v3/admin/category_serializer.rb +33 -0
  37. data/app/serializers/spree/api/v3/admin/credit_card_serializer.rb +22 -0
  38. data/app/serializers/spree/api/v3/admin/customer_serializer.rb +8 -6
  39. data/app/serializers/spree/api/v3/admin/digital_link_serializer.rb +10 -0
  40. data/app/serializers/spree/api/v3/admin/image_serializer.rb +10 -0
  41. data/app/serializers/spree/api/v3/admin/line_item_serializer.rb +36 -1
  42. data/app/serializers/spree/api/v3/admin/option_type_serializer.rb +13 -0
  43. data/app/serializers/spree/api/v3/admin/option_value_serializer.rb +13 -0
  44. data/app/serializers/spree/api/v3/admin/order_promotion_serializer.rb +10 -0
  45. data/app/serializers/spree/api/v3/admin/order_serializer.rb +47 -6
  46. data/app/serializers/spree/api/v3/admin/payment_method_serializer.rb +14 -0
  47. data/app/serializers/spree/api/v3/admin/payment_serializer.rb +56 -0
  48. data/app/serializers/spree/api/v3/admin/payment_source_serializer.rb +10 -0
  49. data/app/serializers/spree/api/v3/admin/product_serializer.rb +23 -6
  50. data/app/serializers/spree/api/v3/admin/refund_serializer.rb +21 -0
  51. data/app/serializers/spree/api/v3/admin/reimbursement_serializer.rb +13 -0
  52. data/app/serializers/spree/api/v3/admin/return_authorization_serializer.rb +17 -0
  53. data/app/serializers/spree/api/v3/admin/shipment_serializer.rb +44 -0
  54. data/app/serializers/spree/api/v3/admin/shipping_category_serializer.rb +14 -0
  55. data/app/serializers/spree/api/v3/admin/shipping_method_serializer.rb +11 -0
  56. data/app/serializers/spree/api/v3/admin/shipping_rate_serializer.rb +11 -0
  57. data/app/serializers/spree/api/v3/admin/stock_item_serializer.rb +17 -0
  58. data/app/serializers/spree/api/v3/admin/stock_location_serializer.rb +15 -0
  59. data/app/serializers/spree/api/v3/admin/store_credit_serializer.rb +27 -0
  60. data/app/serializers/spree/api/v3/admin/tax_category_serializer.rb +15 -0
  61. data/app/serializers/spree/api/v3/admin/variant_serializer.rb +11 -14
  62. data/app/serializers/spree/api/v3/base_serializer.rb +21 -4
  63. data/app/serializers/spree/api/v3/category_serializer.rb +71 -0
  64. data/app/serializers/spree/api/v3/country_serializer.rb +2 -1
  65. data/app/serializers/spree/api/v3/customer_serializer.rb +2 -1
  66. data/app/serializers/spree/api/v3/gift_card_serializer.rb +5 -21
  67. data/app/serializers/spree/api/v3/order_serializer.rb +2 -2
  68. data/app/serializers/spree/api/v3/payment_serializer.rb +1 -1
  69. data/app/serializers/spree/api/v3/product_serializer.rb +11 -11
  70. data/app/serializers/spree/api/v3/shipping_category_serializer.rb +11 -0
  71. data/app/serializers/spree/api/v3/shipping_rate_serializer.rb +2 -6
  72. data/app/serializers/spree/api/v3/tax_category_serializer.rb +11 -0
  73. data/app/serializers/spree/api/v3/variant_serializer.rb +4 -4
  74. data/app/serializers/spree/api/v3/wishlist_serializer.rb +1 -1
  75. data/app/services/spree/api/v3/filters_aggregator.rb +31 -25
  76. data/app/services/spree/webhooks/deliver_webhook.rb +23 -17
  77. data/app/subscribers/spree/webhook_event_subscriber.rb +1 -1
  78. data/config/initializers/alba.rb +1 -1
  79. data/config/initializers/typelizer.rb +26 -16
  80. data/config/locales/en.yml +5 -0
  81. data/config/routes.rb +10 -10
  82. data/lib/spree/api/configuration.rb +3 -1
  83. data/lib/spree/api/dependencies.rb +31 -5
  84. data/lib/spree/api/engine.rb +15 -0
  85. data/lib/spree/api/openapi/schema_helper.rb +27 -7
  86. data/lib/spree/api/testing_support/v3/base.rb +24 -1
  87. metadata +43 -19
  88. data/app/controllers/spree/api/v3/store/customer/account_controller.rb +0 -38
  89. data/app/controllers/spree/api/v3/store/stores_controller.rb +0 -26
  90. data/app/controllers/spree/api/v3/store/taxonomies_controller.rb +0 -19
  91. data/app/controllers/spree/api/v3/store/taxons/products_controller.rb +0 -37
  92. data/app/serializers/spree/api/v3/admin/taxon_serializer.rb +0 -20
  93. data/app/serializers/spree/api/v3/admin/taxonomy_serializer.rb +0 -15
  94. data/app/serializers/spree/api/v3/store_serializer.rb +0 -38
  95. data/app/serializers/spree/api/v3/taxon_serializer.rb +0 -78
  96. data/app/serializers/spree/api/v3/taxonomy_serializer.rb +0 -33
  97. data/app/services/spree/api/v3/orders/update.rb +0 -105
@@ -7,7 +7,7 @@ module Spree
7
7
  module SchemaHelper
8
8
  extend self
9
9
 
10
- # Reference a schema by name (e.g., 'StoreProduct', 'StoreOrder')
10
+ # Reference a schema by name (e.g., 'Product', 'Order')
11
11
  def ref(schema_name)
12
12
  { '$ref' => "#/components/schemas/#{schema_name}" }
13
13
  end
@@ -40,10 +40,15 @@ module Spree
40
40
  properties: {
41
41
  page: { type: :integer, example: 1 },
42
42
  limit: { type: :integer, example: 25 },
43
- count: { type: :integer, example: 100 },
44
- pages: { type: :integer, example: 4 }
43
+ count: { type: :integer, example: 100, description: 'Total number of records' },
44
+ pages: { type: :integer, example: 4, description: 'Total number of pages' },
45
+ from: { type: :integer, example: 1, description: 'Index of first record on this page' },
46
+ to: { type: :integer, example: 25, description: 'Index of last record on this page' },
47
+ in: { type: :integer, example: 25, description: 'Number of records on this page' },
48
+ previous: { type: :integer, nullable: true, example: nil, description: 'Previous page number' },
49
+ next: { type: :integer, nullable: true, example: 2, description: 'Next page number' }
45
50
  },
46
- required: %w[page limit count pages]
51
+ required: %w[page limit count pages from to in]
47
52
  },
48
53
  ErrorResponse: {
49
54
  type: :object,
@@ -76,7 +81,7 @@ module Spree
76
81
  type: :object,
77
82
  properties: {
78
83
  token: { type: :string, description: 'JWT access token' },
79
- user: { '$ref' => '#/components/schemas/StoreCustomer' }
84
+ user: { '$ref' => '#/components/schemas/Customer' }
80
85
  },
81
86
  required: %w[token user]
82
87
  }
@@ -100,12 +105,27 @@ module Spree
100
105
 
101
106
  def typelizer_schemas
102
107
  with_typelizer_enabled do
103
- schemas = Typelizer.openapi_schemas
104
- schemas.each_value { |s| s[:'x-typelizer'] = true }
108
+ schemas = Typelizer.openapi_schemas(writer_name: :store)
109
+ schemas.each_value do |s|
110
+ s[:'x-typelizer'] = true
111
+ strip_null_from_enums(s)
112
+ end
105
113
  schemas
106
114
  end
107
115
  end
108
116
 
117
+ # Typelizer adds nil to enum arrays for nullable fields.
118
+ # OpenAPI 3.0 handles nullability via `nullable: true`, so the nil entry is redundant
119
+ # and causes issues with code generators.
120
+ def strip_null_from_enums(schema)
121
+ properties = schema[:properties] || {}
122
+ properties.each_value do |prop|
123
+ next unless prop.is_a?(Hash) && prop[:enum].is_a?(Array)
124
+
125
+ prop[:enum].reject!(&:nil?)
126
+ end
127
+ end
128
+
109
129
  # Typelizer is normally disabled in test/production, but we need it
110
130
  # enabled to generate OpenAPI schemas from serializer type hints
111
131
  def with_typelizer_enabled
@@ -13,7 +13,10 @@ module Spree
13
13
  aud: audience,
14
14
  exp: Time.current.to_i + expiration
15
15
  }
16
- secret = Rails.application.credentials.jwt_secret_key || ENV['JWT_SECRET_KEY'] || Rails.application.secret_key_base
16
+ secret = Spree::Api::Config[:jwt_secret_key].presence ||
17
+ Rails.application.credentials.jwt_secret_key ||
18
+ ENV['JWT_SECRET_KEY'] ||
19
+ Rails.application.secret_key_base
17
20
  JWT.encode(payload, secret, 'HS256')
18
21
  end
19
22
  end
@@ -47,6 +50,26 @@ shared_context 'API v3 Store guest' do
47
50
  let(:headers) { api_key_headers }
48
51
  end
49
52
 
53
+ shared_context 'API v3 Admin' do
54
+ let(:store) { @default_store || create(:store, default: true) }
55
+ let(:secret_api_key) { create(:api_key, :secret, store: store) }
56
+ let(:api_key_headers) { { 'x-spree-api-key' => secret_api_key.plaintext_token } }
57
+
58
+ let(:admin_user) { create(:admin_user) }
59
+ let(:admin_jwt_token) { Spree::Api::V3::TestingSupport.generate_jwt(admin_user, audience: Spree::Api::V3::JwtAuthentication::JWT_AUDIENCE_ADMIN) }
60
+ let(:bearer_headers) { api_key_headers.merge('Authorization' => "Bearer #{admin_jwt_token}") }
61
+
62
+ before do
63
+ allow_any_instance_of(Spree::Api::V3::BaseController).to receive(:current_store).and_return(store)
64
+ end
65
+ end
66
+
67
+ shared_context 'API v3 Admin authenticated' do
68
+ include_context 'API v3 Admin'
69
+
70
+ let(:headers) { bearer_headers }
71
+ end
72
+
50
73
  # Shared examples for common response patterns
51
74
  shared_examples 'returns 200 OK' do
52
75
  it 'returns 200 status' do
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.beta4
4
+ version: 5.4.0.beta6
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-04 00:00:00.000000000 Z
11
+ date: 2026-03-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rswag-specs
@@ -72,28 +72,28 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0.9'
75
+ version: 0.10.0
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0.9'
82
+ version: 0.10.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: spree_core
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - '='
88
88
  - !ruby/object:Gem::Version
89
- version: 5.4.0.beta4
89
+ version: 5.4.0.beta6
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.beta4
96
+ version: 5.4.0.beta6
97
97
  description: Spree's API
98
98
  email:
99
99
  - hello@spreecommerce.org
@@ -106,25 +106,31 @@ files:
106
106
  - app/controllers/concerns/spree/api/v3/api_key_authentication.rb
107
107
  - app/controllers/concerns/spree/api/v3/error_handler.rb
108
108
  - app/controllers/concerns/spree/api/v3/http_caching.rb
109
+ - app/controllers/concerns/spree/api/v3/idempotent.rb
109
110
  - app/controllers/concerns/spree/api/v3/jwt_authentication.rb
110
111
  - app/controllers/concerns/spree/api/v3/locale_and_currency.rb
111
112
  - app/controllers/concerns/spree/api/v3/order_concern.rb
112
113
  - app/controllers/concerns/spree/api/v3/order_lock.rb
114
+ - app/controllers/concerns/spree/api/v3/rate_limit_headers.rb
113
115
  - app/controllers/concerns/spree/api/v3/resource_serializer.rb
114
116
  - app/controllers/concerns/spree/api/v3/security_headers.rb
117
+ - app/controllers/spree/api/v3/admin/base_controller.rb
118
+ - app/controllers/spree/api/v3/admin/resource_controller.rb
115
119
  - app/controllers/spree/api/v3/base_controller.rb
116
120
  - app/controllers/spree/api/v3/resource_controller.rb
117
121
  - app/controllers/spree/api/v3/store/auth_controller.rb
118
122
  - app/controllers/spree/api/v3/store/base_controller.rb
119
123
  - app/controllers/spree/api/v3/store/cart_controller.rb
124
+ - app/controllers/spree/api/v3/store/categories/products_controller.rb
125
+ - app/controllers/spree/api/v3/store/categories_controller.rb
120
126
  - app/controllers/spree/api/v3/store/countries_controller.rb
121
127
  - app/controllers/spree/api/v3/store/currencies_controller.rb
122
- - app/controllers/spree/api/v3/store/customer/account_controller.rb
123
128
  - app/controllers/spree/api/v3/store/customer/addresses_controller.rb
124
129
  - app/controllers/spree/api/v3/store/customer/credit_cards_controller.rb
125
130
  - app/controllers/spree/api/v3/store/customer/gift_cards_controller.rb
126
131
  - app/controllers/spree/api/v3/store/customer/orders_controller.rb
127
132
  - app/controllers/spree/api/v3/store/customer/payment_setup_sessions_controller.rb
133
+ - app/controllers/spree/api/v3/store/customers_controller.rb
128
134
  - app/controllers/spree/api/v3/store/digitals_controller.rb
129
135
  - app/controllers/spree/api/v3/store/locales_controller.rb
130
136
  - app/controllers/spree/api/v3/store/markets/countries_controller.rb
@@ -140,26 +146,46 @@ files:
140
146
  - app/controllers/spree/api/v3/store/products/filters_controller.rb
141
147
  - app/controllers/spree/api/v3/store/products_controller.rb
142
148
  - app/controllers/spree/api/v3/store/resource_controller.rb
143
- - app/controllers/spree/api/v3/store/stores_controller.rb
144
- - app/controllers/spree/api/v3/store/taxonomies_controller.rb
145
- - app/controllers/spree/api/v3/store/taxons/products_controller.rb
146
- - app/controllers/spree/api/v3/store/taxons_controller.rb
147
149
  - app/controllers/spree/api/v3/store/wishlist_items_controller.rb
148
150
  - app/controllers/spree/api/v3/store/wishlists_controller.rb
149
151
  - app/jobs/spree/api_keys/mark_as_used.rb
150
152
  - app/jobs/spree/webhook_delivery_job.rb
151
153
  - app/serializers/spree/api/v3/address_serializer.rb
154
+ - app/serializers/spree/api/v3/admin/address_serializer.rb
155
+ - app/serializers/spree/api/v3/admin/adjustment_serializer.rb
156
+ - app/serializers/spree/api/v3/admin/admin_user_serializer.rb
157
+ - app/serializers/spree/api/v3/admin/asset_serializer.rb
158
+ - app/serializers/spree/api/v3/admin/category_serializer.rb
159
+ - app/serializers/spree/api/v3/admin/credit_card_serializer.rb
152
160
  - app/serializers/spree/api/v3/admin/customer_serializer.rb
161
+ - app/serializers/spree/api/v3/admin/digital_link_serializer.rb
162
+ - app/serializers/spree/api/v3/admin/image_serializer.rb
153
163
  - app/serializers/spree/api/v3/admin/line_item_serializer.rb
154
164
  - app/serializers/spree/api/v3/admin/metafield_serializer.rb
165
+ - app/serializers/spree/api/v3/admin/option_type_serializer.rb
166
+ - app/serializers/spree/api/v3/admin/option_value_serializer.rb
167
+ - app/serializers/spree/api/v3/admin/order_promotion_serializer.rb
155
168
  - app/serializers/spree/api/v3/admin/order_serializer.rb
169
+ - app/serializers/spree/api/v3/admin/payment_method_serializer.rb
170
+ - app/serializers/spree/api/v3/admin/payment_serializer.rb
171
+ - app/serializers/spree/api/v3/admin/payment_source_serializer.rb
156
172
  - app/serializers/spree/api/v3/admin/price_serializer.rb
157
173
  - app/serializers/spree/api/v3/admin/product_serializer.rb
158
- - app/serializers/spree/api/v3/admin/taxon_serializer.rb
159
- - app/serializers/spree/api/v3/admin/taxonomy_serializer.rb
174
+ - app/serializers/spree/api/v3/admin/refund_serializer.rb
175
+ - app/serializers/spree/api/v3/admin/reimbursement_serializer.rb
176
+ - app/serializers/spree/api/v3/admin/return_authorization_serializer.rb
177
+ - app/serializers/spree/api/v3/admin/shipment_serializer.rb
178
+ - app/serializers/spree/api/v3/admin/shipping_category_serializer.rb
179
+ - app/serializers/spree/api/v3/admin/shipping_method_serializer.rb
180
+ - app/serializers/spree/api/v3/admin/shipping_rate_serializer.rb
181
+ - app/serializers/spree/api/v3/admin/stock_item_serializer.rb
182
+ - app/serializers/spree/api/v3/admin/stock_location_serializer.rb
183
+ - app/serializers/spree/api/v3/admin/store_credit_serializer.rb
184
+ - app/serializers/spree/api/v3/admin/tax_category_serializer.rb
160
185
  - app/serializers/spree/api/v3/admin/variant_serializer.rb
161
186
  - app/serializers/spree/api/v3/asset_serializer.rb
162
187
  - app/serializers/spree/api/v3/base_serializer.rb
188
+ - app/serializers/spree/api/v3/category_serializer.rb
163
189
  - app/serializers/spree/api/v3/country_serializer.rb
164
190
  - app/serializers/spree/api/v3/credit_card_serializer.rb
165
191
  - app/serializers/spree/api/v3/currency_serializer.rb
@@ -197,6 +223,7 @@ files:
197
223
  - app/serializers/spree/api/v3/return_authorization_serializer.rb
198
224
  - app/serializers/spree/api/v3/return_item_serializer.rb
199
225
  - app/serializers/spree/api/v3/shipment_serializer.rb
226
+ - app/serializers/spree/api/v3/shipping_category_serializer.rb
200
227
  - app/serializers/spree/api/v3/shipping_method_serializer.rb
201
228
  - app/serializers/spree/api/v3/shipping_rate_serializer.rb
202
229
  - app/serializers/spree/api/v3/state_serializer.rb
@@ -205,14 +232,11 @@ files:
205
232
  - app/serializers/spree/api/v3/stock_movement_serializer.rb
206
233
  - app/serializers/spree/api/v3/stock_transfer_serializer.rb
207
234
  - app/serializers/spree/api/v3/store_credit_serializer.rb
208
- - app/serializers/spree/api/v3/store_serializer.rb
209
- - app/serializers/spree/api/v3/taxon_serializer.rb
210
- - app/serializers/spree/api/v3/taxonomy_serializer.rb
235
+ - app/serializers/spree/api/v3/tax_category_serializer.rb
211
236
  - app/serializers/spree/api/v3/variant_serializer.rb
212
237
  - app/serializers/spree/api/v3/wished_item_serializer.rb
213
238
  - app/serializers/spree/api/v3/wishlist_serializer.rb
214
239
  - app/services/spree/api/v3/filters_aggregator.rb
215
- - app/services/spree/api/v3/orders/update.rb
216
240
  - app/services/spree/webhooks/deliver_webhook.rb
217
241
  - app/subscribers/spree/webhook_event_subscriber.rb
218
242
  - config/brakeman.ignore
@@ -239,9 +263,9 @@ licenses:
239
263
  - BSD-3-Clause
240
264
  metadata:
241
265
  bug_tracker_uri: https://github.com/spree/spree/issues
242
- changelog_uri: https://github.com/spree/spree/releases/tag/v5.4.0.beta4
266
+ changelog_uri: https://github.com/spree/spree/releases/tag/v5.4.0.beta6
243
267
  documentation_uri: https://docs.spreecommerce.org/
244
- source_code_uri: https://github.com/spree/spree/tree/v5.4.0.beta4
268
+ source_code_uri: https://github.com/spree/spree/tree/v5.4.0.beta6
245
269
  post_install_message:
246
270
  rdoc_options: []
247
271
  require_paths:
@@ -1,38 +0,0 @@
1
- module Spree
2
- module Api
3
- module V3
4
- module Store
5
- module Customer
6
- class AccountController < Store::BaseController
7
- prepend_before_action :require_authentication!
8
-
9
- # GET /api/v3/store/customer
10
- def show
11
- render json: serialize_resource(current_user)
12
- end
13
-
14
- # PATCH /api/v3/store/customer
15
- def update
16
- if current_user.update(permitted_params)
17
- render json: serialize_resource(current_user)
18
- else
19
- render_errors(current_user.errors)
20
- end
21
- end
22
-
23
- protected
24
-
25
- def serializer_class
26
- Spree.api.customer_serializer
27
- end
28
-
29
- def permitted_params
30
- params.permit(:email, :password, :password_confirmation, :first_name, :last_name,
31
- :accepts_email_marketing, :phone)
32
- end
33
- end
34
- end
35
- end
36
- end
37
- end
38
- end
@@ -1,26 +0,0 @@
1
- module Spree
2
- module Api
3
- module V3
4
- module Store
5
- class StoresController < ResourceController
6
- skip_before_action :set_resource
7
-
8
- # GET /api/v3/store/store
9
- def show
10
- render json: serialize_resource(current_store)
11
- end
12
-
13
- protected
14
-
15
- def model_class
16
- Spree::Store
17
- end
18
-
19
- def serializer_class
20
- Spree.api.store_serializer
21
- end
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,19 +0,0 @@
1
- module Spree
2
- module Api
3
- module V3
4
- module Store
5
- class TaxonomiesController < ResourceController
6
- protected
7
-
8
- def model_class
9
- Spree::Taxonomy
10
- end
11
-
12
- def serializer_class
13
- Spree.api.taxonomy_serializer
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,37 +0,0 @@
1
- module Spree
2
- module Api
3
- module V3
4
- module Store
5
- module Taxons
6
- class ProductsController < Store::ProductsController
7
- before_action :set_taxon
8
-
9
- protected
10
-
11
- def set_taxon
12
- @taxon = find_taxon
13
- end
14
-
15
- def scope
16
- super.in_taxon(@taxon)
17
- end
18
-
19
- private
20
-
21
- def find_taxon
22
- id = params[:taxon_id]
23
- taxon_scope = Spree::Taxon.for_store(current_store).accessible_by(current_ability, :show)
24
- taxon_scope = taxon_scope.i18n if Spree::Taxon.include?(Spree::TranslatableResource)
25
-
26
- if id.to_s.start_with?('txn_')
27
- taxon_scope.find_by_prefix_id!(id)
28
- else
29
- find_with_fallback_default_locale { taxon_scope.i18n.find_by!(permalink: id) }
30
- end
31
- end
32
- end
33
- end
34
- end
35
- end
36
- end
37
- end
@@ -1,20 +0,0 @@
1
- module Spree
2
- module Api
3
- module V3
4
- module Admin
5
- # Admin API Taxon Serializer
6
- # Full taxon data including admin-only fields
7
- class TaxonSerializer < V3::TaxonSerializer
8
- typelize lft: :number, rgt: :number
9
-
10
- # Nested set columns for tree operations
11
- attributes :lft, :rgt
12
-
13
- many :metafields,
14
- resource: Spree.api.admin_metafield_serializer,
15
- if: proc { params[:expand]&.include?('metafields') }
16
- end
17
- end
18
- end
19
- end
20
- end
@@ -1,15 +0,0 @@
1
- module Spree
2
- module Api
3
- module V3
4
- module Admin
5
- # Admin API Taxonomy Serializer
6
- # Full taxonomy data including admin-only fields
7
- class TaxonomySerializer < V3::TaxonomySerializer
8
- many :metafields,
9
- resource: Spree.api.admin_metafield_serializer,
10
- if: proc { params[:expand]&.include?('metafields') }
11
- end
12
- end
13
- end
14
- end
15
- end
@@ -1,38 +0,0 @@
1
- module Spree
2
- module Api
3
- module V3
4
- class StoreSerializer < BaseSerializer
5
- typelize name: :string, url: :string, meta_description: [:string, nullable: true],
6
- meta_keywords: [:string, nullable: true], seo_title: [:string, nullable: true],
7
- code: :string,
8
- facebook: [:string, nullable: true], twitter: [:string, nullable: true], instagram: [:string, nullable: true],
9
- customer_support_email: [:string, nullable: true],
10
- favicon_image_url: [:string, nullable: true],
11
- logo_image_url: [:string, nullable: true], social_image_url: [:string, nullable: true]
12
-
13
- attributes :name, :url, :meta_description, :meta_keywords, :seo_title,
14
- :code, :facebook, :twitter,
15
- :instagram, :customer_support_email,
16
- created_at: :iso8601, updated_at: :iso8601
17
-
18
- attribute :favicon_image_url do |store|
19
- image_url_for(store.favicon_image)
20
- end
21
-
22
- attribute :logo_image_url do |store|
23
- image_url_for(store.logo)
24
- end
25
-
26
- attribute :social_image_url do |store|
27
- image_url_for(store.social_image)
28
- end
29
-
30
- many :payment_methods,
31
- proc { |payment_methods, _params|
32
- payment_methods.select { |pm| pm.available_on_front_end? && pm.active? }
33
- },
34
- resource: Spree.api.payment_method_serializer
35
- end
36
- end
37
- end
38
- end
@@ -1,78 +0,0 @@
1
- module Spree
2
- module Api
3
- module V3
4
- class TaxonSerializer < BaseSerializer
5
- typelize name: :string, permalink: :string, position: :number, depth: :number,
6
- meta_title: [:string, nullable: true], meta_description: [:string, nullable: true], meta_keywords: [:string, nullable: true],
7
- parent_id: [:string, nullable: true], taxonomy_id: :string, children_count: :number,
8
- description: :string, description_html: :string,
9
- image_url: [:string, nullable: true], square_image_url: [:string, nullable: true],
10
- is_root: :boolean, is_child: :boolean, is_leaf: :boolean
11
-
12
- attributes :name, :permalink, :position, :depth,
13
- :meta_title, :meta_description, :meta_keywords,
14
- :children_count,
15
- created_at: :iso8601, updated_at: :iso8601
16
-
17
- attribute :parent_id do |taxon|
18
- taxon.parent&.prefixed_id
19
- end
20
-
21
- attribute :taxonomy_id do |taxon|
22
- taxon.taxonomy&.prefixed_id
23
- end
24
-
25
- attribute :description do |taxon|
26
- taxon.description&.to_plain_text.to_s
27
- end
28
-
29
- attribute :description_html do |taxon|
30
- taxon.description&.body&.to_s.to_s
31
- end
32
-
33
- attribute :image_url do |taxon|
34
- image_url_for(taxon.image)
35
- end
36
-
37
- attribute :square_image_url do |taxon|
38
- image_url_for(taxon.square_image)
39
- end
40
-
41
- attribute :is_root do |taxon|
42
- taxon.root?
43
- end
44
-
45
- attribute :is_child do |taxon|
46
- taxon.child?
47
- end
48
-
49
- attribute :is_leaf do |taxon|
50
- taxon.leaf?
51
- end
52
-
53
- # Conditional associations
54
- # Note: We pass empty expand to nested taxons to prevent infinite recursion
55
- # (e.g., ancestors trying to load their own ancestors)
56
- one :parent,
57
- resource: Spree.api.taxon_serializer,
58
- if: proc { params[:expand]&.include?('parent') },
59
- params: { expand: [] }
60
-
61
- many :children,
62
- resource: Spree.api.taxon_serializer,
63
- if: proc { params[:expand]&.include?('children') },
64
- params: { expand: [] }
65
-
66
- many :ancestors,
67
- resource: Spree.api.taxon_serializer,
68
- if: proc { params[:expand]&.include?('ancestors') },
69
- params: { expand: [] }
70
-
71
- many :public_metafields,
72
- key: :metafields,
73
- resource: Spree.api.metafield_serializer,
74
- if: proc { params[:expand]&.include?('metafields') }
75
- end
76
- end
77
- end
78
- end
@@ -1,33 +0,0 @@
1
- module Spree
2
- module Api
3
- module V3
4
- class TaxonomySerializer < BaseSerializer
5
- typelize name: :string, position: :number, root_id: [:string, nullable: true]
6
-
7
- attributes :name, :position,
8
- created_at: :iso8601, updated_at: :iso8601
9
-
10
- attribute :root_id do |taxonomy|
11
- taxonomy.root&.prefixed_id
12
- end
13
-
14
- # Conditional associations
15
- # Note: We pass empty expand to nested taxons to prevent infinite recursion
16
- one :root,
17
- resource: Spree.api.taxon_serializer,
18
- if: proc { params[:expand]&.include?('root') },
19
- params: { expand: [] }
20
-
21
- many :taxons,
22
- resource: Spree.api.taxon_serializer,
23
- if: proc { params[:expand]&.include?('taxons') },
24
- params: { expand: [] }
25
-
26
- many :public_metafields,
27
- key: :metafields,
28
- resource: Spree.api.metafield_serializer,
29
- if: proc { params[:expand]&.include?('metafields') }
30
- end
31
- end
32
- end
33
- end