spree_cm_commissioner 1.18.1.pre.pre → 1.18.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b379b05eb67ebdd3f6eed7f7cb602c65a042431084c44773d8060177b54ee2c4
4
- data.tar.gz: 66e5e029f32bd7246d512b57703f71a9d3996a278655d76bd13b91c4d69403d9
3
+ metadata.gz: 60a9ca64e7401f96f8cb7e220a28a12ca89d7bc84ce724b0e7751e1c0abf1d0e
4
+ data.tar.gz: cb4e4fbfd87c785a73c23ee8fd3a02fadacf864d5c905df5a654c56069a79769
5
5
  SHA512:
6
- metadata.gz: 7706180ab5c1cdb1cf471221e52062026c198e178e061b1b678baaada93ed1ad0520f88c253f59eaa9dc38512022faad01a91e7e771f76d0da25ff7bd4307c25
7
- data.tar.gz: 28d18041966446254a1ee2a2f5cae01f25165c400409cdf31a72f02cefb3538aa8f94273837d08e9b111febfcf2c068cb791efcce85be8d0e1573069443d6714
6
+ metadata.gz: 0db6f0473e7663f28e179e51cc68034c6b96315d402a38bb49fef0669ba23ae46cc615d7ee350ec551b1c7fd1686a724a1aef0057ce2b4f637913766c8cdd8c9
7
+ data.tar.gz: bf5d35d082edc126bcead686c1d1de3e74f2a2bed22a1cbdd62e60dea23679c007ff1fb523f0a3447a3b598b1e3c66838b28f35e408b82024de877c5da237657
data/Gemfile.lock CHANGED
@@ -34,7 +34,7 @@ GIT
34
34
  PATH
35
35
  remote: .
36
36
  specs:
37
- spree_cm_commissioner (1.18.1.pre.pre)
37
+ spree_cm_commissioner (1.18.1)
38
38
  activerecord-multi-tenant
39
39
  activerecord_json_validator (~> 2.1, >= 2.1.3)
40
40
  aws-sdk-cloudfront
@@ -446,6 +446,7 @@ GEM
446
446
  google-cloud-recaptcha_enterprise-v1beta1 (0.10.0)
447
447
  gapic-common (>= 0.20.0, < 2.a)
448
448
  google-cloud-errors (~> 1.0)
449
+ google-protobuf (3.25.8)
449
450
  google-protobuf (3.25.8-x86_64-darwin)
450
451
  google-protobuf (3.25.8-x86_64-linux)
451
452
  googleapis-common-protos (1.4.0)
@@ -460,6 +461,9 @@ GEM
460
461
  multi_json (~> 1.11)
461
462
  os (>= 0.9, < 2.0)
462
463
  signet (>= 0.16, < 2.a)
464
+ grpc (1.72.0)
465
+ google-protobuf (>= 3.25, < 5.0)
466
+ googleapis-common-protos-types (~> 1.0)
463
467
  grpc (1.72.0-x86_64-darwin)
464
468
  google-protobuf (>= 3.25, < 5.0)
465
469
  googleapis-common-protos-types (~> 1.0)
@@ -547,6 +551,7 @@ GEM
547
551
  method_source (1.0.0)
548
552
  mini_magick (4.12.0)
549
553
  mini_mime (1.1.5)
554
+ mini_portile2 (2.8.4)
550
555
  minitest (5.20.0)
551
556
  monetize (1.12.0)
552
557
  money (~> 6.12)
@@ -564,9 +569,12 @@ GEM
564
569
  net-smtp (0.4.0)
565
570
  net-protocol
566
571
  nio4r (2.5.9)
567
- nokogiri (1.18.8-x86_64-darwin)
572
+ nokogiri (1.15.4)
573
+ mini_portile2 (~> 2.8.2)
574
+ racc (~> 1.4)
575
+ nokogiri (1.15.4-x86_64-darwin)
568
576
  racc (~> 1.4)
569
- nokogiri (1.18.8-x86_64-linux-gnu)
577
+ nokogiri (1.15.4-x86_64-linux)
570
578
  racc (~> 1.4)
571
579
  noticed (1.6.3)
572
580
  http (>= 4.0.0)
@@ -922,11 +930,11 @@ GEM
922
930
  zeitwerk (2.6.12)
923
931
 
924
932
  PLATFORMS
933
+ ruby
925
934
  x86_64-darwin-19
926
935
  x86_64-darwin-20
927
936
  x86_64-darwin-21
928
937
  x86_64-darwin-22
929
- x86_64-darwin-23
930
938
  x86_64-linux
931
939
 
932
940
  DEPENDENCIES
@@ -27,8 +27,6 @@ module Spree
27
27
  end
28
28
 
29
29
  def complete
30
- return render_serialized_payload { serialized_current_order } if spree_current_order.confirm? || spree_current_order.complete?
31
-
32
30
  spree_authorize! :update, spree_current_order, order_token
33
31
 
34
32
  result = complete_service.call(order: spree_current_order)
@@ -6,17 +6,6 @@ module SpreeCmCommissioner
6
6
  def self.prepended(base)
7
7
  base.include SpreeCmCommissioner::OrderConcern
8
8
  end
9
-
10
- # Override Spree's default behavior:
11
- # By default, Spree raises an error if `complete` is called on a completed or confirmed order.
12
- # We want to allow this call to succeed, so the API can be used both to:
13
- # - complete the order (if it's not yet complete), or
14
- # - return the latest state of a confirmed or completed order without raising a forbidden error.
15
- def complete
16
- return render_serialized_payload { serialized_current_order } if spree_current_order.confirm? || spree_current_order.complete?
17
-
18
- super
19
- end
20
9
  end
21
10
  end
22
11
  end
@@ -4,37 +4,25 @@ module SpreeCmCommissioner
4
4
  rescue_from StandardError, with: :handle_error
5
5
 
6
6
  def assetlinks_json
7
- render_platform_link(:android)
7
+ render_universal_link('assetlinks.json')
8
8
  end
9
9
 
10
10
  def apple_app_site_association
11
- render_platform_link(:ios)
11
+ render_universal_link('apple-app-site-association')
12
12
  end
13
13
 
14
14
  private
15
15
 
16
- def render_platform_link(platform)
17
- fetcher_class = platform_link_finder(platform)
18
-
19
- result = fetcher_class.call(
16
+ def render_universal_link(universal_link)
17
+ result = SpreeCmCommissioner::UniversalLinkFetcher.new(
18
+ universal_link: universal_link,
20
19
  store: @store,
21
20
  tenant: @tenant,
22
- refreshed: params[:_refreshed].present?
23
- )
24
-
25
- if result.success? && result.contents.present?
26
- render json: result.contents
27
- else
28
- render_not_found
29
- end
30
- end
21
+ refresh: params[:_refresh].to_s == 'true'
22
+ ).call
31
23
 
32
- def platform_link_finder(platform)
33
- case platform
34
- when :android
35
- SpreeCmCommissioner::AssetLinksFetcher
36
- when :ios
37
- SpreeCmCommissioner::AppleAppSiteAssociationFetcher
24
+ if result[:success]
25
+ render json: result[:data]
38
26
  else
39
27
  render_not_found
40
28
  end
@@ -0,0 +1,54 @@
1
+ module SpreeCmCommissioner
2
+ class UniversalLinkFetcher < BaseInteractor
3
+ delegate :universal_link, :store, :tenant, :refresh, to: :context
4
+
5
+ def call
6
+ return not_found unless resource
7
+
8
+ data = load_cached_preference(resource)
9
+ return not_found if data.blank?
10
+
11
+ { success: true, data: data }
12
+ end
13
+
14
+ private
15
+
16
+ def resource
17
+ @resource ||= store.presence || tenant
18
+ end
19
+
20
+ def load_cached_preference(resource)
21
+ preference_key = preference_key_for(universal_link)
22
+ return nil unless preference_key && resource.respond_to?(preference_key)
23
+
24
+ updated_at = resource.try(:updated_at)&.to_i || 'no_updated_at'
25
+ cache_key = build_cache_key(universal_link, resource, updated_at)
26
+
27
+ CmAppLogger.log(label: 'LOOKING_UP_CACHE', data: { cache_key: cache_key })
28
+
29
+ Rails.cache.delete(cache_key) if refresh
30
+
31
+ Rails.cache.fetch(cache_key, expires_in: 1.day, force: refresh) do
32
+ CmAppLogger.log(label: 'CACHE_MISS', data: { cache_key: cache_key })
33
+ resource.public_send(preference_key).presence
34
+ end
35
+ end
36
+
37
+ def build_cache_key(universal_link, resource, updated_at)
38
+ "well_known:#{universal_link}:#{resource.class.name}:#{resource.id}:#{updated_at}"
39
+ end
40
+
41
+ def preference_key_for(universal_link)
42
+ case universal_link
43
+ when 'assetlinks.json'
44
+ :preferred_assetlinks
45
+ when 'apple-app-site-association'
46
+ :preferred_apple_app_site_association
47
+ end
48
+ end
49
+
50
+ def not_found
51
+ { success: false, error: 'Not found' }
52
+ end
53
+ end
54
+ end
@@ -2,7 +2,7 @@ module SpreeCmCommissioner
2
2
  class PinCode < SpreeCmCommissioner::Base
3
3
  has_secure_token
4
4
 
5
- enum contact_type: { 'phone_number' => 0, 'email' => 1, 'telegram' => 2 }
5
+ enum contact_type: { 'phone_number' => 0, 'email' => 1 }
6
6
 
7
7
  validates :code, length: { maximum: 6 }
8
8
  validates :contact, presence: true
@@ -130,8 +130,7 @@ module SpreeCmCommissioner
130
130
  'SpreeCmCommissioner::PinCodeMobileConfirm' => I18n.t('pincode.readable_type.confirmation_code'),
131
131
  'SpreeCmCommissioner::PinCodeUpdateUserLogin' => I18n.t('pincode.readable_type.update_user_login'),
132
132
  'SpreeCmCommissioner::PinCodeEmailConfirm' => I18n.t('pincode.readable_type.confirmation_code'),
133
- 'SpreeCmCommissioner::OtpCode' => I18n.t('pincode.readable_type.otp_code'),
134
- 'SpreeCmCommissioner::PinCodeTelegram' => I18n.t('pincode.readable_type.telegram_verification')
133
+ 'SpreeCmCommissioner::OtpCode' => I18n.t('pincode.readable_type.otp_code')
135
134
  }
136
135
  end
137
136
 
@@ -78,7 +78,6 @@ module SpreeCmCommissioner
78
78
  base.has_many :invoices, class_name: 'SpreeCmCommissioner::Invoice', dependent: :destroy
79
79
  base.has_many :subscriptions, through: :customers, class_name: 'SpreeCmCommissioner::Subscription'
80
80
  base.has_many :subscription_orders, through: :subscriptions, class_name: 'Spree::Order', source: :orders
81
- base.has_many :promotion_categories, class_name: 'Spree::PromotionCategory', foreign_key: :vendor_id, dependent: :destroy
82
81
 
83
82
  base.has_many :homepage_section_relatables,
84
83
  class_name: 'SpreeCmCommissioner::HomepageSectionRelatable',
@@ -547,7 +547,6 @@ en:
547
547
  update_user_login: "update user code"
548
548
  contact_update: "update contact code"
549
549
  otp_code: "OTP code"
550
- telegram_verification: "telegram code"
551
550
 
552
551
  notifications:
553
552
  spree_cm_commissioner:
@@ -1,5 +1,5 @@
1
1
  module SpreeCmCommissioner
2
- VERSION = '1.18.1-pre'.freeze
2
+ VERSION = '1.18.1'.freeze
3
3
 
4
4
  module_function
5
5
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_cm_commissioner
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.18.1.pre.pre
4
+ version: 1.18.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - You
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-07-14 00:00:00.000000000 Z
11
+ date: 2025-07-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: spree
@@ -1038,9 +1038,7 @@ files:
1038
1038
  - app/interactors/spree_cm_commissioner/account_linkage.rb
1039
1039
  - app/interactors/spree_cm_commissioner/account_recover.rb
1040
1040
  - app/interactors/spree_cm_commissioner/account_updater.rb
1041
- - app/interactors/spree_cm_commissioner/apple_app_site_association_fetcher.rb
1042
1041
  - app/interactors/spree_cm_commissioner/apply_service_availability.rb
1043
- - app/interactors/spree_cm_commissioner/asset_links_fetcher.rb
1044
1042
  - app/interactors/spree_cm_commissioner/base_interactor.rb
1045
1043
  - app/interactors/spree_cm_commissioner/bib_number_swapper.rb
1046
1044
  - app/interactors/spree_cm_commissioner/chatrace_order_creator.rb
@@ -1109,7 +1107,6 @@ files:
1109
1107
  - app/interactors/spree_cm_commissioner/subscriptions_order_creator.rb
1110
1108
  - app/interactors/spree_cm_commissioner/subscriptions_order_cron_executor.rb
1111
1109
  - app/interactors/spree_cm_commissioner/subscriptions_prepaid_order_creator.rb
1112
- - app/interactors/spree_cm_commissioner/telegram_chats_auto_finder.rb
1113
1110
  - app/interactors/spree_cm_commissioner/telegram_chats_finder.rb
1114
1111
  - app/interactors/spree_cm_commissioner/telegram_debug_pin_code_sender.rb
1115
1112
  - app/interactors/spree_cm_commissioner/telegram_notification_sender.rb
@@ -1119,6 +1116,7 @@ files:
1119
1116
  - app/interactors/spree_cm_commissioner/telegram_web_app_vendor_user_checker.rb
1120
1117
  - app/interactors/spree_cm_commissioner/transactional_email_sender.rb
1121
1118
  - app/interactors/spree_cm_commissioner/unique_device_token_cron_executor.rb
1119
+ - app/interactors/spree_cm_commissioner/universal_link_fetcher.rb
1122
1120
  - app/interactors/spree_cm_commissioner/update_payment_gateway_status.rb
1123
1121
  - app/interactors/spree_cm_commissioner/user_contact_updater.rb
1124
1122
  - app/interactors/spree_cm_commissioner/user_device_token_deregister.rb
@@ -1304,7 +1302,6 @@ files:
1304
1302
  - app/models/spree_cm_commissioner/pin_code_mobile_confirm.rb
1305
1303
  - app/models/spree_cm_commissioner/pin_code_otp.rb
1306
1304
  - app/models/spree_cm_commissioner/pin_code_registration.rb
1307
- - app/models/spree_cm_commissioner/pin_code_telegram.rb
1308
1305
  - app/models/spree_cm_commissioner/pin_code_update_user_login.rb
1309
1306
  - app/models/spree_cm_commissioner/place.rb
1310
1307
  - app/models/spree_cm_commissioner/product_completion_step.rb
@@ -1324,7 +1321,6 @@ files:
1324
1321
  - app/models/spree_cm_commissioner/promotion/rules/guest_occupations.rb
1325
1322
  - app/models/spree_cm_commissioner/promotion/rules/vendors.rb
1326
1323
  - app/models/spree_cm_commissioner/promotion/rules/weekend.rb
1327
- - app/models/spree_cm_commissioner/promotion_category_decorator.rb
1328
1324
  - app/models/spree_cm_commissioner/promotion_decorator.rb
1329
1325
  - app/models/spree_cm_commissioner/property_decorator.rb
1330
1326
  - app/models/spree_cm_commissioner/prototype_decorator.rb
@@ -1359,7 +1355,6 @@ files:
1359
1355
  - app/models/spree_cm_commissioner/taxon_web_banner.rb
1360
1356
  - app/models/spree_cm_commissioner/taxonomy_decorator.rb
1361
1357
  - app/models/spree_cm_commissioner/telegram_bot.rb
1362
- - app/models/spree_cm_commissioner/telegram_chat.rb
1363
1358
  - app/models/spree_cm_commissioner/tenant.rb
1364
1359
  - app/models/spree_cm_commissioner/transactional_email.rb
1365
1360
  - app/models/spree_cm_commissioner/trip.rb
@@ -2523,11 +2518,9 @@ files:
2523
2518
  - db/migrate/20250611023548_add_country_code_to_guests.rb
2524
2519
  - db/migrate/20250612035937_add_intel_phone_number_to_guests.rb
2525
2520
  - db/migrate/20250616084219_add_description_to_cm_vendor_place.rb
2526
- - db/migrate/20250630103536_create_cm_telegram_chats.rb
2527
2521
  - db/migrate/20250701093203_add_configurations_to_cm_dynamic_field.rb
2528
2522
  - db/migrate/20250702091305_add_dynamic_field_option_to_guest_dynamic_field.rb
2529
2523
  - db/migrate/20250702091935_add_status_to_dynamic_field_option.rb
2530
- - db/migrate/20250707032008_add_vendor_id_to_spree_category.rb
2531
2524
  - docker-compose.yml
2532
2525
  - docs/option_types/attr_types.md
2533
2526
  - docs/private_key.pem
@@ -2680,9 +2673,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
2680
2673
  version: '2.7'
2681
2674
  required_rubygems_version: !ruby/object:Gem::Requirement
2682
2675
  requirements:
2683
- - - ">"
2676
+ - - ">="
2684
2677
  - !ruby/object:Gem::Version
2685
- version: 1.3.1
2678
+ version: '0'
2686
2679
  requirements:
2687
2680
  - none
2688
2681
  rubygems_version: 3.4.1
@@ -1,27 +0,0 @@
1
- module SpreeCmCommissioner
2
- class AppleAppSiteAssociationFetcher < BaseInteractor
3
- delegate :store, :tenant, :refreshed, to: :context
4
-
5
- def call
6
- key = cache_key
7
-
8
- CmAppLogger.log(label: 'LOOKING_UP_CACHE', data: { cache_key: key })
9
-
10
- Rails.cache.delete(key) if refreshed
11
-
12
- context.contents = Rails.cache.fetch(key) do
13
- CmAppLogger.log(label: 'CACHE_MISS', data: { cache_key: key })
14
- resource.preferred_apple_app_site_association
15
- end
16
- end
17
-
18
- def cache_key
19
- updated_at = tenant&.updated_at || store&.updated_at
20
- "well_known:apple-app-site-association:#{resource.class.name}:#{resource.id}:#{updated_at}"
21
- end
22
-
23
- def resource
24
- tenant || store
25
- end
26
- end
27
- end
@@ -1,27 +0,0 @@
1
- module SpreeCmCommissioner
2
- class AssetLinksFetcher < BaseInteractor
3
- delegate :store, :tenant, :refreshed, to: :context
4
-
5
- def call
6
- key = cache_key
7
-
8
- CmAppLogger.log(label: 'LOOKING_UP_CACHE', data: { cache_key: key })
9
-
10
- Rails.cache.delete(key) if refreshed
11
-
12
- context.contents = Rails.cache.fetch(key) do
13
- CmAppLogger.log(label: 'CACHE_MISS', data: { cache_key: key })
14
- resource.preferred_assetlinks
15
- end
16
- end
17
-
18
- def cache_key
19
- updated_at = tenant&.updated_at || store&.updated_at
20
- "well_known:assetlinks.json:#{resource.class.name}:#{resource.id}:#{updated_at}"
21
- end
22
-
23
- def resource
24
- tenant || store
25
- end
26
- end
27
- end
@@ -1,144 +0,0 @@
1
- module SpreeCmCommissioner
2
- class TelegramChatsAutoFinder < BaseInteractor
3
- delegate :contact, :pin_code, to: :context
4
-
5
- def call
6
- context.chats = []
7
- context.verified_chat_ids = []
8
-
9
- updates = fetch_updates
10
-
11
- if updates['result'].any?
12
- updates['result'].sort_by { |u| u['update_id'] }.reverse.each do |update|
13
- handle_message_update(update) if update['message']
14
- handle_channel_post_update(update) if update['channel_post']
15
- handle_chat_member_update(update) if update['my_chat_member']
16
- end
17
- end
18
- context.fail!(message: 'No pin codes verified') if context.verified_chat_ids.empty?
19
- end
20
-
21
- private
22
-
23
- def handle_chat_member_update(update)
24
- chat = update.dig('my_chat_member', 'chat')
25
- return unless chat
26
-
27
- chat_data = {
28
- id: chat['id'],
29
- title: chat['title'] || 'Unnamed Chat',
30
- type: chat['type']
31
- }
32
-
33
- return if context.chats.any? { |c| c[:id] == chat_data[:id] }
34
-
35
- db_chat = SpreeCmCommissioner::TelegramChat.find_or_initialize_by(chat_id: chat_data[:id])
36
- is_new_chat = db_chat.new_record?
37
- db_chat.update(chat_title: chat_data[:title], chat_type: chat_data[:type])
38
- context.chats << chat_data
39
- message = "👋Hello! This is Bookme+ bot.\n\nPlease enter the 6-digit PIN code displayed in your portal."
40
- send_message(chat_data[:id], message) if is_new_chat
41
- end
42
-
43
- def handle_channel_post_update(update)
44
- message = update['channel_post']
45
- process_pin_code_message(message)
46
- end
47
-
48
- def handle_message_update(update)
49
- message = update['message']
50
- process_pin_code_message(message)
51
- end
52
-
53
- def process_pin_code_message(message)
54
- chat_id = message.dig('chat', 'id')
55
- text = message['text']&.strip
56
-
57
- return unless valid_pin_code?(text, chat_id)
58
-
59
- pin_code_record = find_pin_code_record
60
- return unless pin_code_record
61
-
62
- vendor = find_vendor
63
- return unless vendor
64
-
65
- chat = update_telegram_chat(message, chat_id)
66
- return unless chat
67
-
68
- handle_successful_verification(chat, vendor, pin_code_record)
69
- end
70
-
71
- def valid_pin_code?(text, chat_id)
72
- text && chat_id && text == pin_code
73
- end
74
-
75
- def find_pin_code_record
76
- pin_code_record = SpreeCmCommissioner::PinCodeTelegram.find_by(code: pin_code, contact: contact)
77
- unless pin_code_record
78
- context.fail!(message: "Pin code #{pin_code} not found for contact #{contact}")
79
- return nil
80
- end
81
- pin_code_record
82
- end
83
-
84
- def find_vendor
85
- vendor = Spree::Vendor.find_by(id: contact)
86
- unless vendor
87
- context.fail!(message: "Vendor not found for contact #{contact}")
88
- return nil
89
- end
90
- vendor
91
- end
92
-
93
- def update_telegram_chat(message, chat_id)
94
- chat = SpreeCmCommissioner::TelegramChat.find_or_initialize_by(chat_id: chat_id)
95
- unless chat.update(
96
- chat_title: message.dig('chat', 'title') || 'Unnamed Chat',
97
- chat_type: message.dig('chat', 'type')
98
- )
99
- context.fail!(message: "Failed to update chat: #{chat.errors.full_messages.join(', ')}")
100
- return nil
101
- end
102
-
103
- context.chats << { id: chat.chat_id, title: chat.chat_title, type: chat.chat_type }
104
- chat
105
- end
106
-
107
- def handle_successful_verification(chat, vendor, pin_code_record)
108
- return if chat.vendor && chat.vendor != vendor
109
-
110
- update_vendor_preferences(vendor, chat)
111
- chat.update(active: true, vendor: vendor)
112
- expire_pin_code(pin_code_record)
113
- send_success_message(chat.chat_id, vendor.name)
114
- context.verified_chat_ids << chat.chat_id
115
- end
116
-
117
- def update_vendor_preferences(vendor, chat)
118
- vendor.update(
119
- preferred_telegram_chat_id: chat.chat_id,
120
- preferred_telegram_chat_name: chat.chat_title,
121
- preferred_telegram_chat_type: chat.chat_type
122
- )
123
- end
124
-
125
- def expire_pin_code(pin_code_record)
126
- pin_code_record.expire
127
- pin_code_record.save
128
- end
129
-
130
- def send_success_message(chat_id, vendor_name)
131
- message = "✅ PIN code verified successfully! This chat is now connected to <b>#{vendor_name}</b>.\n\n" \
132
- 'All completed orders will be sent to this chat.'
133
- send_message(chat_id, message)
134
- end
135
-
136
- def fetch_updates
137
- ::Telegram.bot.get_updates
138
- end
139
-
140
- def send_message(chat_id, text)
141
- ::Telegram.bot.send_message(chat_id: chat_id, text: text, parse_mode: 'HTML')
142
- end
143
- end
144
- end
@@ -1,28 +0,0 @@
1
- module SpreeCmCommissioner
2
- class PinCodeTelegram < PinCode
3
- before_validation :set_telegram_attrs, on: :create
4
- validates :contact, presence: true, numericality: { only_integer: true }, if: :telegram?
5
-
6
- belongs_to :vendor, class_name: 'Spree::Vendor', foreign_key: 'contact', primary_key: 'id'
7
-
8
- def telegram?
9
- true
10
- end
11
-
12
- def expires_in_seconds
13
- 5 * 60
14
- end
15
-
16
- def expired?
17
- expired_at < Time.zone.now
18
- end
19
-
20
- private
21
-
22
- def set_telegram_attrs
23
- self.contact_type = :telegram
24
- self.type = 'SpreeCmCommissioner::PinCodeTelegram'
25
- self.expired_at = Time.zone.now + expires_in_seconds unless expired_at
26
- end
27
- end
28
- end
@@ -1,11 +0,0 @@
1
- module SpreeCmCommissioner
2
- module PromotionCategoryDecorator
3
- def self.prepended(base)
4
- base.belongs_to :vendor, class_name: 'Spree::Vendor', optional: true
5
- end
6
- end
7
- end
8
-
9
- unless Spree::PromotionCategory.included_modules.include?(SpreeCmCommissioner::PromotionCategoryDecorator)
10
- Spree::PromotionCategory.prepend(SpreeCmCommissioner::PromotionCategoryDecorator)
11
- end
@@ -1,6 +0,0 @@
1
- module SpreeCmCommissioner
2
- class TelegramChat < Base
3
- belongs_to :vendor, class_name: 'Spree::Vendor'
4
- validates :chat_id, presence: true, uniqueness: true
5
- end
6
- end
@@ -1,13 +0,0 @@
1
- class CreateCmTelegramChats < ActiveRecord::Migration[7.0]
2
- def change
3
- create_table :cm_telegram_chats, if_not_exists: true do |t|
4
- t.bigint :chat_id, null: false
5
- t.string :chat_title
6
- t.string :chat_type
7
- t.boolean :active, default: false
8
- t.references :vendor, foreign_key: { to_table: :spree_vendors }
9
- t.timestamps
10
- end
11
- add_index :cm_telegram_chats, :chat_id, unique: true, if_not_exists: true
12
- end
13
- end
@@ -1,7 +0,0 @@
1
- class AddVendorIdToSpreeCategory < ActiveRecord::Migration[7.0]
2
- def change
3
- unless column_exists?(:spree_promotion_categories, :vendor_id)
4
- add_reference :spree_promotion_categories, :vendor, index: true, foreign_key: { to_table: :spree_vendors }
5
- end
6
- end
7
- end