spree_cm_commissioner 2.9.8 → 2.9.9
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/Gemfile.lock +1 -1
- data/app/controllers/concerns/spree_cm_commissioner/content_cachable.rb +1 -0
- data/app/controllers/spree/api/v2/storefront/payment_methods_controller.rb +40 -0
- data/app/controllers/spree/api/v2/tenant/payment_methods_controller.rb +54 -0
- data/app/finders/spree_cm_commissioner/payment_methods/find.rb +59 -0
- data/app/serializers/spree/v2/storefront/user_serializer_decorator.rb +2 -1
- data/app/serializers/spree/v2/tenant/user_serializer.rb +1 -1
- data/app/services/spree_cm_commissioner/api_caches/invalidate.rb +24 -3
- data/config/routes.rb +2 -0
- data/lib/spree_cm_commissioner/version.rb +1 -1
- metadata +4 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 391b15d7aada08289da9a21d18a9d48d461ecf1fe0c36a361a276df201455a5e
|
|
4
|
+
data.tar.gz: af3f07ac5d9e449cb5300949dbbcdcb80981b78b41f0aa23a396ce6cdd49e68b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 49e38586ae76dfcf37be8bb6f9c4ddef60a2ef694f491ffb648b5903070dd0932c2efb1d936f3c5a6b4c1af16355b2ddc26e4706cc04c7ed32bed0908ed88db5
|
|
7
|
+
data.tar.gz: be58778bd8a6124b8b3c914e9c0c83a44dce42a75c1df0f677ef00868bc388f3fa88518828e1833b701366eedf551e03a30528919a2c1f8ea16aec108d92b8fe
|
data/Gemfile.lock
CHANGED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V2
|
|
4
|
+
module Storefront
|
|
5
|
+
# Order & user independent catalog of the payment methods a vendor accepts.
|
|
6
|
+
# Takes vendor_id as a required query param. See
|
|
7
|
+
# Spree::Api::V2::Tenant::PaymentMethodsController for the caching caveat
|
|
8
|
+
# that comes with that, and for what this deliberately leaves out.
|
|
9
|
+
class PaymentMethodsController < Spree::Api::V2::ResourceController
|
|
10
|
+
# override
|
|
11
|
+
def index
|
|
12
|
+
render_serialized_payload do
|
|
13
|
+
collection_serializer.new(collection).serializable_hash
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# override
|
|
18
|
+
def collection
|
|
19
|
+
@collection ||= SpreeCmCommissioner::PaymentMethods::Find.new(
|
|
20
|
+
vendor: vendor,
|
|
21
|
+
store: current_store,
|
|
22
|
+
type: params[:type]
|
|
23
|
+
).execute
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
# override
|
|
27
|
+
def collection_serializer
|
|
28
|
+
::Spree::V2::Storefront::PaymentMethodSerializer
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
def vendor
|
|
34
|
+
@vendor ||= ::Spree::Vendor.active.find(params[:vendor_id])
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
module Spree
|
|
2
|
+
module Api
|
|
3
|
+
module V2
|
|
4
|
+
module Tenant
|
|
5
|
+
# Order & user independent catalog of the payment methods a vendor accepts.
|
|
6
|
+
#
|
|
7
|
+
# vendor_id is a required query param. A vendor id is globally unique and
|
|
8
|
+
# belongs to exactly one tenant, so it is what identifies tenant, vendor and
|
|
9
|
+
# store here — the tenant itself comes from the Doorkeeper token, not the URL.
|
|
10
|
+
#
|
|
11
|
+
# IMPORTANT for caching (see SpreeCmCommissioner::ContentCachable): the CDN
|
|
12
|
+
# must include vendor_id in its cache key. If query strings are stripped,
|
|
13
|
+
# every vendor collapses into one cache entry and the wrong payment methods
|
|
14
|
+
# are served. Moving to /vendors/:vendor_id/payment_methods would remove that
|
|
15
|
+
# dependency — tracked as a follow-up.
|
|
16
|
+
#
|
|
17
|
+
# For the per-order truth (store credit, early adopter, payout filtering)
|
|
18
|
+
# use CartPaymentMethodGroupsController instead.
|
|
19
|
+
class PaymentMethodsController < BaseController
|
|
20
|
+
# override
|
|
21
|
+
def index
|
|
22
|
+
render_serialized_payload do
|
|
23
|
+
collection_serializer.new(collection).serializable_hash
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# override
|
|
28
|
+
def collection
|
|
29
|
+
@collection ||= SpreeCmCommissioner::PaymentMethods::Find.new(
|
|
30
|
+
vendor: vendor,
|
|
31
|
+
store: current_store,
|
|
32
|
+
type: params[:type]
|
|
33
|
+
).execute
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# override
|
|
37
|
+
def collection_serializer
|
|
38
|
+
Spree::V2::Tenant::PaymentMethodSerializer
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
private
|
|
42
|
+
|
|
43
|
+
# Scoped to the token's tenant, so a token from another tenant gets a 404
|
|
44
|
+
# rather than a cache hit on someone else's vendor.
|
|
45
|
+
def vendor
|
|
46
|
+
@vendor ||= MultiTenant.with(@tenant) do
|
|
47
|
+
::Spree::Vendor.active.find(params[:vendor_id])
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
module SpreeCmCommissioner
|
|
2
|
+
module PaymentMethods
|
|
3
|
+
# Order & user independent lookup of the payment methods a vendor accepts.
|
|
4
|
+
#
|
|
5
|
+
# Mirrors the scope selection of Vpago::OrderDecorator#available_payment_methods,
|
|
6
|
+
# minus everything that depends on the order or the current user, so the result
|
|
7
|
+
# is safe to cache on the vendor id alone:
|
|
8
|
+
#
|
|
9
|
+
# - available_for_order? (only Spree::PaymentMethod::StoreCredit varies, on user balance)
|
|
10
|
+
# - available_on_frontend_for_early_adopter (user attribute)
|
|
11
|
+
# - support_payout? (order line items)
|
|
12
|
+
# - preferred_payment_method_id (user, affects sort only)
|
|
13
|
+
#
|
|
14
|
+
# Callers needing the per-order truth must keep using
|
|
15
|
+
# Spree::Api::V2::*::CartPaymentMethodGroupsController.
|
|
16
|
+
class Find
|
|
17
|
+
attr_reader :vendor, :store, :type
|
|
18
|
+
|
|
19
|
+
def initialize(vendor:, store: nil, type: nil)
|
|
20
|
+
@vendor = vendor
|
|
21
|
+
@store = store
|
|
22
|
+
@type = type
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def execute
|
|
26
|
+
return mini_app_scope if type.present?
|
|
27
|
+
|
|
28
|
+
scope.reject(&:mini_app?)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
def scope
|
|
34
|
+
@scope ||= source.available_on_front_end.order(:position).to_a
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Vendors without their own payment methods fall back to the store's,
|
|
38
|
+
# same as Vpago::OrderDecorator#available_payment_methods.
|
|
39
|
+
def source
|
|
40
|
+
vendor_payment_methods.exists? ? vendor_payment_methods : store_payment_methods
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def vendor_payment_methods
|
|
44
|
+
@vendor_payment_methods ||= vendor&.payment_methods || Spree::PaymentMethod.none
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def store_payment_methods
|
|
48
|
+
(store || Spree::Store.default).payment_methods
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def mini_app_scope
|
|
52
|
+
mapped_type = SpreeCmCommissioner::PaymentMethodTypeMapper.call(type)
|
|
53
|
+
return [] if mapped_type.blank?
|
|
54
|
+
|
|
55
|
+
scope.select { |payment_method| payment_method.mini_app? && payment_method.type == mapped_type }
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
@@ -7,7 +7,8 @@ module Spree
|
|
|
7
7
|
:country_code, :otp_enabled, :otp_email, :otp_phone_number,
|
|
8
8
|
:confirm_pin_code_enabled, :tenant_id,
|
|
9
9
|
:login, :qr_data, :qr_data_version, :qr_data_invalidated_at,
|
|
10
|
-
:unread_notifications_count, :request_orders_count
|
|
10
|
+
:unread_notifications_count, :request_orders_count,
|
|
11
|
+
:preferred_payment_method_id
|
|
11
12
|
|
|
12
13
|
base.attribute :has_incomplete_guest_info, &:has_incomplete_guest_info?
|
|
13
14
|
|
|
@@ -6,7 +6,7 @@ module Spree
|
|
|
6
6
|
:public_metadata, :completed_orders,
|
|
7
7
|
:phone_number, :intel_phone_number, :country_code,
|
|
8
8
|
:otp_enabled, :otp_email, :otp_phone_number,
|
|
9
|
-
:confirm_pin_code_enabled
|
|
9
|
+
:confirm_pin_code_enabled, :preferred_payment_method_id
|
|
10
10
|
|
|
11
11
|
has_one :profile, serializer: Spree::V2::Tenant::AssetSerializer
|
|
12
12
|
has_many :device_tokens, serializer: Spree::V2::Tenant::UserDeviceTokenSerializer
|
|
@@ -9,7 +9,8 @@ module SpreeCmCommissioner
|
|
|
9
9
|
'Spree::Menu' => Spree::Menu,
|
|
10
10
|
'Spree::Taxon' => Spree::Taxon,
|
|
11
11
|
'Spree::Product' => Spree::Product,
|
|
12
|
-
'Spree::Vendor' => Spree::Vendor
|
|
12
|
+
'Spree::Vendor' => Spree::Vendor,
|
|
13
|
+
'Spree::PaymentMethod' => Spree::PaymentMethod
|
|
13
14
|
}.freeze
|
|
14
15
|
|
|
15
16
|
# eg. 'Spree::Product', 123 or 'Spree::Product', nil
|
|
@@ -84,7 +85,8 @@ module SpreeCmCommissioner
|
|
|
84
85
|
'/api/v2/storefront/vendors/:id*',
|
|
85
86
|
'/api/v2/storefront/accommodations/:id*',
|
|
86
87
|
'/api/v2/storefront/accommodations/:slug*'
|
|
87
|
-
]
|
|
88
|
+
],
|
|
89
|
+
'Spree::PaymentMethod' => payment_method_patterns
|
|
88
90
|
}
|
|
89
91
|
end
|
|
90
92
|
|
|
@@ -107,12 +109,31 @@ module SpreeCmCommissioner
|
|
|
107
109
|
'/api/v2/tenant/vendors/*',
|
|
108
110
|
'/api/v2/storefront/vendors/*',
|
|
109
111
|
'/api/v2/storefront/accommodations/*'
|
|
110
|
-
]
|
|
112
|
+
],
|
|
113
|
+
'Spree::PaymentMethod' => payment_method_patterns
|
|
111
114
|
}
|
|
112
115
|
end
|
|
113
116
|
|
|
114
117
|
private
|
|
115
118
|
|
|
119
|
+
# Deliberately broad, and identical for single-record and all-record
|
|
120
|
+
# invalidation: a payment method is either vendor-owned or store-level, and a
|
|
121
|
+
# store-level one is served for every vendor through the fallback in
|
|
122
|
+
# SpreeCmCommissioner::PaymentMethods::Find. From the record alone we cannot
|
|
123
|
+
# tell which vendors are affected.
|
|
124
|
+
#
|
|
125
|
+
# vendor_id is a query param, so the trailing `*` is what clears every
|
|
126
|
+
# vendor's cached variant of this path in one go.
|
|
127
|
+
#
|
|
128
|
+
# Payment methods change a handful of times a year, so a broad invalidation
|
|
129
|
+
# is cheap.
|
|
130
|
+
def payment_method_patterns
|
|
131
|
+
[
|
|
132
|
+
'/api/v2/tenant/payment_methods*',
|
|
133
|
+
'/api/v2/storefront/payment_methods*'
|
|
134
|
+
]
|
|
135
|
+
end
|
|
136
|
+
|
|
116
137
|
# eg. updated_at: Fri, 26 Dec 2025 10:40:56.505450000 +07 +07:00
|
|
117
138
|
def refresh_record_cache_key(record)
|
|
118
139
|
# rubocop:disable Rails/SkipsModelValidations
|
data/config/routes.rb
CHANGED
|
@@ -532,6 +532,7 @@ Spree::Core::Engine.add_routes do
|
|
|
532
532
|
namespace :tenant do
|
|
533
533
|
resource :token, controller: :access_tokens, only: [:create]
|
|
534
534
|
resources :vendors
|
|
535
|
+
resources :payment_methods, only: %i[index]
|
|
535
536
|
resources :products
|
|
536
537
|
resources :taxons, only: %i[index show], id: /.+/
|
|
537
538
|
resources :ad_campaigns, only: [:index]
|
|
@@ -757,6 +758,7 @@ Spree::Core::Engine.add_routes do
|
|
|
757
758
|
resources :vendor_photos
|
|
758
759
|
resources :events
|
|
759
760
|
end
|
|
761
|
+
resources :payment_methods, only: %i[index]
|
|
760
762
|
resource :homepage_data, only: [:show]
|
|
761
763
|
resources :homepage_sections, only: [:index]
|
|
762
764
|
resources :order_qrs, only: [:show]
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: spree_cm_commissioner
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.9.
|
|
4
|
+
version: 2.9.9
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- You
|
|
@@ -1004,6 +1004,7 @@ files:
|
|
|
1004
1004
|
- app/controllers/spree/api/v2/storefront/order_promotions_controller.rb
|
|
1005
1005
|
- app/controllers/spree/api/v2/storefront/order_qrs_controller.rb
|
|
1006
1006
|
- app/controllers/spree/api/v2/storefront/order_request_notifications_controller.rb
|
|
1007
|
+
- app/controllers/spree/api/v2/storefront/payment_methods_controller.rb
|
|
1007
1008
|
- app/controllers/spree/api/v2/storefront/pending_line_items_controller.rb
|
|
1008
1009
|
- app/controllers/spree/api/v2/storefront/pin_code_checkers_controller.rb
|
|
1009
1010
|
- app/controllers/spree/api/v2/storefront/pin_code_generators_controller.rb
|
|
@@ -1074,6 +1075,7 @@ files:
|
|
|
1074
1075
|
- app/controllers/spree/api/v2/tenant/my_votes_controller.rb
|
|
1075
1076
|
- app/controllers/spree/api/v2/tenant/notifications_controller.rb
|
|
1076
1077
|
- app/controllers/spree/api/v2/tenant/order_histories_controller.rb
|
|
1078
|
+
- app/controllers/spree/api/v2/tenant/payment_methods_controller.rb
|
|
1077
1079
|
- app/controllers/spree/api/v2/tenant/pin_code_checkers_controller.rb
|
|
1078
1080
|
- app/controllers/spree/api/v2/tenant/pin_code_generators_controller.rb
|
|
1079
1081
|
- app/controllers/spree/api/v2/tenant/popular_route_places_controller.rb
|
|
@@ -1201,6 +1203,7 @@ files:
|
|
|
1201
1203
|
- app/finders/spree_cm_commissioner/orders/find.rb
|
|
1202
1204
|
- app/finders/spree_cm_commissioner/orders/find_by_all_state.rb
|
|
1203
1205
|
- app/finders/spree_cm_commissioner/orders/find_by_state.rb
|
|
1206
|
+
- app/finders/spree_cm_commissioner/payment_methods/find.rb
|
|
1204
1207
|
- app/finders/spree_cm_commissioner/payment_methods/group_by_bank.rb
|
|
1205
1208
|
- app/finders/spree_cm_commissioner/places/find_with_route.rb
|
|
1206
1209
|
- app/finders/spree_cm_commissioner/products/find_decorator.rb
|