spree_cm_commissioner 2.8.7.pre.pre2 → 2.8.8

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 (174) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -6
  3. data/Gemfile.lock +1 -1
  4. data/app/controllers/concerns/spree_cm_commissioner/content_cachable.rb +0 -2
  5. data/app/controllers/spree/admin/homepage_section_controller.rb +1 -4
  6. data/app/controllers/spree/admin/taxons_controller_decorator.rb +0 -19
  7. data/app/controllers/spree/api/v2/storefront/homepage_sections_controller.rb +0 -1
  8. data/app/controllers/spree/api/v2/tenant/base_controller.rb +0 -4
  9. data/app/controllers/spree/api/v2/tenant/homepage_sections_controller.rb +0 -1
  10. data/app/controllers/spree/api/v2/tenant/products_controller.rb +1 -1
  11. data/app/controllers/spree/api/v2/tenant/taxons_controller.rb +1 -1
  12. data/app/controllers/spree_cm_commissioner/admin/products_controller_decorator.rb +0 -19
  13. data/app/finders/spree_cm_commissioner/events/find_matches.rb +0 -1
  14. data/app/helpers/spree_cm_commissioner/admin/homepage_segment_helper.rb +0 -2
  15. data/app/interactors/spree_cm_commissioner/waiting_guests_caller.rb +39 -10
  16. data/app/models/concerns/spree_cm_commissioner/homepage_section_bitwise.rb +1 -2
  17. data/app/models/concerns/spree_cm_commissioner/option_type_attr_type.rb +1 -2
  18. data/app/models/concerns/spree_cm_commissioner/order_state_machine.rb +1 -11
  19. data/app/models/concerns/spree_cm_commissioner/product_type.rb +1 -1
  20. data/app/models/concerns/spree_cm_commissioner/taxon_kind.rb +1 -3
  21. data/app/models/spree_cm_commissioner/import.rb +1 -2
  22. data/app/models/spree_cm_commissioner/product_decorator.rb +0 -52
  23. data/app/models/spree_cm_commissioner/role_decorator.rb +1 -4
  24. data/app/models/spree_cm_commissioner/taxon_decorator.rb +0 -23
  25. data/app/models/spree_cm_commissioner/taxonomy_decorator.rb +1 -19
  26. data/app/models/spree_cm_commissioner/tenant.rb +0 -9
  27. data/app/models/spree_cm_commissioner/user_decorator.rb +0 -5
  28. data/app/models/spree_cm_commissioner/variant_decorator.rb +0 -4
  29. data/app/models/spree_cm_commissioner/variant_options.rb +0 -4
  30. data/app/models/spree_cm_commissioner/vendor_decorator.rb +0 -4
  31. data/app/serializers/spree/v2/storefront/homepage_section_serializer.rb +1 -1
  32. data/app/serializers/spree/v2/storefront/product_serializer_decorator.rb +1 -2
  33. data/app/serializers/spree/v2/storefront/role_serializer.rb +1 -1
  34. data/app/serializers/spree/v2/storefront/taxon_serializer_decorator.rb +1 -2
  35. data/app/serializers/spree/v2/tenant/homepage_section_serializer.rb +1 -1
  36. data/app/serializers/spree/v2/tenant/role_serializer.rb +1 -1
  37. data/app/services/spree_cm_commissioner/api_caches/invalidate.rb +0 -12
  38. data/app/services/spree_cm_commissioner/waiting_room/publish_lobby_path.rb +11 -2
  39. data/app/services/spree_cm_commissioner/waiting_room/stamp_queue_positions.rb +37 -8
  40. data/app/views/spree/admin/homepage_section/_form.html.erb +0 -5
  41. data/config/initializers/spree_permitted_attributes.rb +0 -8
  42. data/config/locales/en.yml +3 -45
  43. data/config/locales/km.yml +1 -32
  44. data/config/routes.rb +0 -28
  45. data/lib/spree_cm_commissioner/version.rb +1 -1
  46. data/lib/spree_cm_commissioner.rb +1 -7
  47. data/spree_cm_commissioner.gemspec +1 -1
  48. metadata +3 -130
  49. data/app/controllers/spree/api/v2/storefront/preview_products_controller.rb +0 -48
  50. data/app/controllers/spree/api/v2/storefront/preview_sections_controller.rb +0 -27
  51. data/app/controllers/spree/api/v2/storefront/preview_taxons_controller.rb +0 -18
  52. data/app/controllers/spree/api/v2/storefront/products_controller_decorator.rb +0 -15
  53. data/app/controllers/spree/api/v2/storefront/taxons_controller_decorator.rb +0 -15
  54. data/app/controllers/spree/api/v2/tenant/ad_campaigns_controller.rb +0 -25
  55. data/app/controllers/spree/api/v2/tenant/episodes_controller.rb +0 -38
  56. data/app/controllers/spree/api/v2/tenant/free_vote_claims_controller.rb +0 -37
  57. data/app/controllers/spree/api/v2/tenant/preview_products_controller.rb +0 -47
  58. data/app/controllers/spree/api/v2/tenant/preview_sections_controller.rb +0 -26
  59. data/app/controllers/spree/api/v2/tenant/preview_shows_controller.rb +0 -19
  60. data/app/controllers/spree/api/v2/tenant/preview_taxons_controller.rb +0 -19
  61. data/app/controllers/spree/api/v2/tenant/show_contestants_controller.rb +0 -52
  62. data/app/controllers/spree/api/v2/tenant/show_elimination_sessions_controller.rb +0 -57
  63. data/app/controllers/spree/api/v2/tenant/show_people_controller.rb +0 -49
  64. data/app/controllers/spree/api/v2/tenant/show_person_assignments_controller.rb +0 -36
  65. data/app/controllers/spree/api/v2/tenant/shows_controller.rb +0 -36
  66. data/app/controllers/spree/api/v2/tenant/votes_controller.rb +0 -94
  67. data/app/controllers/spree/api/v2/tenant/voting_contestants_controller.rb +0 -43
  68. data/app/controllers/spree/api/v2/tenant/voting_credit_transactions_controller.rb +0 -41
  69. data/app/controllers/spree/api/v2/tenant/voting_credits_controller.rb +0 -31
  70. data/app/jobs/spree_cm_commissioner/show_contestants/import_job.rb +0 -9
  71. data/app/jobs/spree_cm_commissioner/vote_fraud_event_job.rb +0 -9
  72. data/app/jobs/spree_cm_commissioner/voting_credit_allocation_job.rb +0 -10
  73. data/app/jobs/spree_cm_commissioner/voting_credit_de_allocation_job.rb +0 -10
  74. data/app/models/concerns/spree_cm_commissioner/voting_session_live_stream_concern.rb +0 -41
  75. data/app/models/spree_cm_commissioner/imports/import_contestant.rb +0 -7
  76. data/app/models/spree_cm_commissioner/maintenance_tasks/voting_session.rb +0 -36
  77. data/app/models/spree_cm_commissioner/preview_role.rb +0 -8
  78. data/app/models/spree_cm_commissioner/role_user_decorator.rb +0 -8
  79. data/app/models/spree_cm_commissioner/show.rb +0 -163
  80. data/app/models/spree_cm_commissioner/show_contestant.rb +0 -39
  81. data/app/models/spree_cm_commissioner/show_contestant_image.rb +0 -11
  82. data/app/models/spree_cm_commissioner/show_contestant_video.rb +0 -15
  83. data/app/models/spree_cm_commissioner/show_episode.rb +0 -108
  84. data/app/models/spree_cm_commissioner/show_person.rb +0 -15
  85. data/app/models/spree_cm_commissioner/show_person_assignment.rb +0 -21
  86. data/app/models/spree_cm_commissioner/show_person_image.rb +0 -11
  87. data/app/models/spree_cm_commissioner/vote.rb +0 -16
  88. data/app/models/spree_cm_commissioner/vote_fraud_event.rb +0 -20
  89. data/app/models/spree_cm_commissioner/voting_contestant.rb +0 -100
  90. data/app/models/spree_cm_commissioner/voting_credit.rb +0 -72
  91. data/app/models/spree_cm_commissioner/voting_credit_transaction.rb +0 -55
  92. data/app/models/spree_cm_commissioner/voting_session.rb +0 -216
  93. data/app/models/spree_cm_commissioner/voting_session_stat.rb +0 -8
  94. data/app/overrides/spree/admin/products/_form/preview_checkbox.html.erb.deface +0 -9
  95. data/app/overrides/spree/admin/taxons/_form/preview_checkbox.html.erb.deface +0 -7
  96. data/app/serializers/spree/v2/tenant/ad_campaign_serializer.rb +0 -13
  97. data/app/serializers/spree/v2/tenant/advertisement_serializer.rb +0 -11
  98. data/app/serializers/spree/v2/tenant/show_contestant_serializer.rb +0 -21
  99. data/app/serializers/spree/v2/tenant/show_episode_serializer.rb +0 -20
  100. data/app/serializers/spree/v2/tenant/show_parent_serializer.rb +0 -13
  101. data/app/serializers/spree/v2/tenant/show_person_assignment_serializer.rb +0 -16
  102. data/app/serializers/spree/v2/tenant/show_person_serializer.rb +0 -13
  103. data/app/serializers/spree/v2/tenant/show_serializer.rb +0 -23
  104. data/app/serializers/spree/v2/tenant/video_serializer.rb +0 -9
  105. data/app/serializers/spree/v2/tenant/vote_package_serializer.rb +0 -9
  106. data/app/serializers/spree/v2/tenant/vote_serializer.rb +0 -14
  107. data/app/serializers/spree/v2/tenant/voting_contestant_serializer.rb +0 -23
  108. data/app/serializers/spree/v2/tenant/voting_credit_serializer.rb +0 -10
  109. data/app/serializers/spree/v2/tenant/voting_credit_transaction_serializer.rb +0 -14
  110. data/app/serializers/spree/v2/tenant/voting_session_serializer.rb +0 -21
  111. data/app/services/spree_cm_commissioner/fraud_check.rb +0 -299
  112. data/app/services/spree_cm_commissioner/imports/contestants/create.rb +0 -153
  113. data/app/services/spree_cm_commissioner/show_contestants/normalize_video_highlights.rb +0 -57
  114. data/app/services/spree_cm_commissioner/show_persons/contestant_assigner.rb +0 -51
  115. data/app/services/spree_cm_commissioner/url_embed/youtube_embed.rb +0 -44
  116. data/app/services/spree_cm_commissioner/vote_counters/audit_counters.rb +0 -43
  117. data/app/services/spree_cm_commissioner/vote_counters/base.rb +0 -31
  118. data/app/services/spree_cm_commissioner/vote_counters/increment.rb +0 -44
  119. data/app/services/spree_cm_commissioner/vote_counters/per_contestant_counter.rb +0 -68
  120. data/app/services/spree_cm_commissioner/vote_counters/rebuild_from_db.rb +0 -70
  121. data/app/services/spree_cm_commissioner/vote_counters/snapshot_to_db.rb +0 -113
  122. data/app/services/spree_cm_commissioner/vote_credit_deductor.rb +0 -68
  123. data/app/services/spree_cm_commissioner/vote_package/create.rb +0 -145
  124. data/app/services/spree_cm_commissioner/vote_package/update.rb +0 -91
  125. data/app/services/spree_cm_commissioner/vote_processor.rb +0 -144
  126. data/app/services/spree_cm_commissioner/voting_contestants/advancer.rb +0 -335
  127. data/app/services/spree_cm_commissioner/voting_contestants/assigner.rb +0 -40
  128. data/app/services/spree_cm_commissioner/voting_contestants/bulk_updater.rb +0 -106
  129. data/app/services/spree_cm_commissioner/voting_credits/allocate.rb +0 -77
  130. data/app/services/spree_cm_commissioner/voting_credits/claim_free_votes.rb +0 -119
  131. data/app/services/spree_cm_commissioner/voting_credits/credit_calculator.rb +0 -35
  132. data/app/services/spree_cm_commissioner/voting_credits/de_allocate.rb +0 -87
  133. data/app/services/spree_cm_commissioner/voting_leaderboards/calculate_score.rb +0 -67
  134. data/app/services/spree_cm_commissioner/voting_leaderboards/combined_result.rb +0 -190
  135. data/app/services/spree_cm_commissioner/voting_sessions/finalize.rb +0 -105
  136. data/db/migrate/20260309230148_create_cm_show_people.rb +0 -14
  137. data/db/migrate/20260309230149_create_cm_show_people_assignments.rb +0 -16
  138. data/db/migrate/20260310082711_create_cm_show_contestants.rb +0 -28
  139. data/db/migrate/20260310082720_create_cm_voting_sessions.rb +0 -21
  140. data/db/migrate/20260310082721_create_cm_voting_contestants.rb +0 -23
  141. data/db/migrate/20260310082734_add_voting_fields_to_spree_taxons.rb +0 -9
  142. data/db/migrate/20260310082735_add_type_to_spree_products.rb +0 -6
  143. data/db/migrate/20260310082749_create_cm_voting_credits.rb +0 -27
  144. data/db/migrate/20260326080200_create_cm_voting_credit_transactions.rb +0 -27
  145. data/db/migrate/20260330160000_create_cm_votes.rb +0 -25
  146. data/db/migrate/20260401072500_add_advanced_from_to_cm_voting_contestants.rb +0 -7
  147. data/db/migrate/20260402000001_add_voting_credit_scope_to_spree_taxons.rb +0 -6
  148. data/db/migrate/20260402000002_rename_scopeable_to_votable_in_cm_voting_credits.rb +0 -12
  149. data/db/migrate/20260403070000_add_name_to_cm_voting_sessions.rb +0 -5
  150. data/db/migrate/20260406000001_add_vendor_id_to_voting_tables.rb +0 -6
  151. data/db/migrate/20260406000001_rename_votes_remaining_to_amount_in_cm_voting_credits.rb +0 -11
  152. data/db/migrate/20260408085255_add_show_id_and_vendor_id_to_cm_voting_sessions.rb +0 -9
  153. data/db/migrate/20260420000001_rename_type_to_credit_type_in_cm_voting_credits.rb +0 -25
  154. data/db/migrate/20260422000001_create_cm_vote_fraud_events.rb +0 -23
  155. data/db/migrate/20260423000001_add_preview_to_taxons_products_and_sections.rb +0 -11
  156. data/db/migrate/20260423000002_create_preview_roles.rb +0 -24
  157. data/db/migrate/20260515120000_add_public_metadata_to_cm_voting_sessions.rb +0 -5
  158. data/db/migrate/20260518090920_add_unique_voter_count_to_voting_contestants.rb +0 -5
  159. data/db/migrate/20260518094322_create_cm_voting_session_stats.rb +0 -17
  160. data/db/migrate/20260520000001_add_scoring_model_to_cm_voting_sessions.rb +0 -5
  161. data/db/migrate/20260520000001_optimize_cm_votes_indexes.rb +0 -22
  162. data/db/migrate/20260525042257_add_vote_number_to_cm_voting_contestants.rb +0 -18
  163. data/db/migrate/20260527035430_add_confirmed_rank_to_cm_voting_contestants.rb +0 -5
  164. data/db/migrate/20260527062005_add_eliminated_at_to_cm_show_contestants.rb +0 -5
  165. data/db/migrate/20260603063652_add_parent_to_voting_sessions.rb +0 -9
  166. data/db/migrate/20260603090000_add_session_type_to_cm_voting_sessions.rb +0 -6
  167. data/db/migrate/20260608000000_add_display_to_cm_voting_sessions.rb +0 -5
  168. data/docs/sql/jsonb_query_guide.md +0 -57
  169. data/lib/spree_cm_commissioner/test_helper/factories/show_episode_factory.rb +0 -12
  170. data/lib/spree_cm_commissioner/test_helper/factories/show_factory.rb +0 -120
  171. data/lib/spree_cm_commissioner/test_helper/factories/vote_credit_factory.rb +0 -37
  172. data/lib/spree_cm_commissioner/test_helper/factories/vote_factory.rb +0 -28
  173. data/lib/spree_cm_commissioner/test_helper/factories/voting_credit_transaction_factory.rb +0 -11
  174. data/lib/spree_cm_commissioner/test_helper/factories/voting_session_factory.rb +0 -11
@@ -14,8 +14,7 @@ module Spree
14
14
 
15
15
  base.attributes :need_confirmation, :product_type, :kyc, :kyc_fields, :allowed_upload_later, :allow_anonymous_booking,
16
16
  :use_video_as_default, :allow_transfer, :allow_gift_transfer
17
-
18
- base.attributes :reveal_description, :discontinue_on, :public_metadata, :purchasable_on, :preview,
17
+ base.attributes :reveal_description, :discontinue_on, :public_metadata, :purchasable_on,
19
18
  :enable_inventory_hold
20
19
 
21
20
  # Expose only the `event_id` here instead of the full event object.
@@ -2,7 +2,7 @@ module Spree
2
2
  module V2
3
3
  module Storefront
4
4
  class RoleSerializer < BaseSerializer
5
- attributes :name, :role_type
5
+ attributes :name
6
6
  end
7
7
  end
8
8
  end
@@ -17,8 +17,7 @@ module Spree
17
17
 
18
18
  base.attributes :custom_redirect_url, :kind, :subtitle, :from_date, :to_date,
19
19
  :background_color, :foreground_color, :show_badge_status,
20
- :purchasable_on, :vendor_id, :available_on, :hide_video_banner,
21
- :preview
20
+ :purchasable_on, :vendor_id, :available_on, :hide_video_banner
22
21
 
23
22
  # To get full seat layout details, call the seat_layouts API with this ID.
24
23
  base.attribute :seat_layout_ids, &:preload_seat_layout_ids
@@ -3,7 +3,7 @@ module Spree
3
3
  module Tenant
4
4
  class HomepageSectionSerializer < BaseSerializer
5
5
  attributes :id, :title, :segments, :description,
6
- :active, :position, :preview, :created_at, :updated_at
6
+ :active, :position, :created_at, :updated_at
7
7
 
8
8
  has_many :homepage_section_relatables, serializer: ::Spree::V2::Tenant::HomepageSectionRelatableSerializer
9
9
  end
@@ -2,7 +2,7 @@ module Spree
2
2
  module V2
3
3
  module Tenant
4
4
  class RoleSerializer < BaseSerializer
5
- attributes :name, :presentation, :role_type
5
+ attributes :name
6
6
  end
7
7
  end
8
8
  end
@@ -66,19 +66,12 @@ module SpreeCmCommissioner
66
66
  '/api/v2/storefront/homepage_data*'
67
67
  ],
68
68
  'Spree::Taxon' => ['/api/v2/storefront/taxons/:id*'],
69
- 'SpreeCmCommissioner::Show' => ['/api/v2/storefront/taxons/:id*'],
70
69
  'Spree::Product' => [
71
70
  '/api/v2/tenant/products/:id*',
72
71
  '/api/v2/tenant/products/:slug*',
73
72
  '/api/v2/storefront/products/:id*',
74
73
  '/api/v2/storefront/products/:slug*'
75
74
  ],
76
- 'SpreeCmCommissioner::ShowEpisode' => [
77
- '/api/v2/tenant/products/:id*',
78
- '/api/v2/tenant/products/:slug*',
79
- '/api/v2/storefront/products/:id*',
80
- '/api/v2/storefront/products/:slug*'
81
- ],
82
75
  'Spree::Vendor' => [
83
76
  '/api/v2/tenant/vendors/:id*',
84
77
  '/api/v2/storefront/vendors/:id*',
@@ -94,15 +87,10 @@ module SpreeCmCommissioner
94
87
  'SpreeCmCommissioner::HomepageBackground' => homepage_background_patterns,
95
88
  'Spree::Menu' => ['/api/v2/storefront/menus/*'],
96
89
  'Spree::Taxon' => ['/api/v2/storefront/taxons/*'],
97
- 'SpreeCmCommissioner::Show' => ['/api/v2/storefront/taxons/*'],
98
90
  'Spree::Product' => [
99
91
  '/api/v2/tenant/products/*',
100
92
  '/api/v2/storefront/products/*'
101
93
  ],
102
- 'SpreeCmCommissioner::ShowEpisode' => [
103
- '/api/v2/tenant/products/*',
104
- '/api/v2/storefront/products/*'
105
- ],
106
94
  'Spree::Vendor' => [
107
95
  '/api/v2/tenant/vendors/*',
108
96
  '/api/v2/storefront/vendors/*',
@@ -17,8 +17,17 @@ module SpreeCmCommissioner
17
17
  extend SpreeCmCommissioner::ServiceModuleThrowable
18
18
 
19
19
  def call
20
- # merge: true so we never clobber the lobby's `full` / `available_slots` fields.
21
- lobby_document.set({ waiting_guests_records_path: records_path }, merge: true)
20
+ # merge: true so we never clobber the lobby's `full` / `available_slots` fields, and it
21
+ # deep-merges the nested `logs` map so each job keeps its own namespaced key.
22
+ # logs.publish_lobby_path_job.last_published_at is a point-in-time heartbeat: it confirms
23
+ # the 5-min publisher cron is alive and (with the path above) shows the date partition.
24
+ lobby_document.set(
25
+ {
26
+ waiting_guests_records_path: records_path,
27
+ logs: { publish_lobby_path_job: { last_published_at: Time.zone.now } }
28
+ },
29
+ merge: true
30
+ )
22
31
 
23
32
  success(records_path: records_path)
24
33
  rescue StandardError => e
@@ -23,7 +23,7 @@ module SpreeCmCommissioner
23
23
  CALLER_INTERVAL_SECONDS = (ENV['WAITING_ROOM_CALLER_INTERVAL_SECONDS'] || 60).to_i
24
24
 
25
25
  # Caps the batch size assumed when estimating the ETA (not a release limit). The lobby's
26
- # slots_per_call is a single run's available_slots, which spikes on cold starts / lulls
26
+ # recent_slots_per_call is a single run's available_slots, which spikes on cold starts / lulls
27
27
  # (active_sessions low → available_slots ≈ max_sessions). An uncapped spike collapses hundreds
28
28
  # of positions into batch 1 and under-promises the wait, so we bound it to keep ETAs
29
29
  # conservative. Tune to roughly the real per-minute release capacity.
@@ -39,11 +39,11 @@ module SpreeCmCommissioner
39
39
  private
40
40
 
41
41
  def stamp_positions
42
+ started_at = Time.zone.now
42
43
  paths = stamp_paths
43
44
  total = paths.sum { |path| waiting_count(path) }
44
- return if total.zero?
45
45
 
46
- @slots_per_call = lobby_data[:slots_per_call].to_i
46
+ @recent_slots_per_call = lobby_data[:recent_slots_per_call].to_i
47
47
  @flat_wait = lobby_data[:avg_queue_to_enter_seconds].to_i
48
48
  @stamped_at = Time.zone.now
49
49
  @stamped = 0
@@ -60,6 +60,31 @@ module SpreeCmCommissioner
60
60
  firestore.batch { |batch| slice.each { |doc| stamp_doc(batch, doc) } }
61
61
  end
62
62
  end
63
+
64
+ publish_logs(started_at: started_at, waiting_total: total)
65
+ end
66
+
67
+ # Point-in-time heartbeat for the position-stamper cron, mirroring the caller/publisher writers.
68
+ # Written every run (even when nobody is waiting) so a stale timestamp signals a dead cron rather
69
+ # than an empty queue. merge: true deep-merges into the shared lobby `logs` map, so this job's
70
+ # key sits alongside the caller's and publisher's without clobbering them.
71
+ def publish_logs(started_at:, waiting_total:)
72
+ finished_at = Time.zone.now
73
+ lobby_document.set(
74
+ {
75
+ logs: {
76
+ stamp_queue_positions_job: {
77
+ stamped_count: @stamped,
78
+ waiting_total: waiting_total,
79
+ stamp_limit_reached: waiting_total > STAMP_LIMIT,
80
+ last_started_at: started_at,
81
+ last_finished_at: finished_at,
82
+ last_duration_ms: ((finished_at - started_at) * 1000).round
83
+ }
84
+ }
85
+ },
86
+ merge: true
87
+ )
63
88
  end
64
89
 
65
90
  def stamp_doc(batch, doc)
@@ -98,16 +123,16 @@ module SpreeCmCommissioner
98
123
  end
99
124
 
100
125
  # Groups positions into batches that enter together, so everyone in a batch gets the same ETA.
101
- # The batch size is slots_per_call, capped by MAX_ETA_BATCH_SIZE to keep a spiking release rate
102
- # from under-promising. nil when slots_per_call is unknown (cold start) → falls back to the
126
+ # The batch size is recent_slots_per_call, capped by MAX_ETA_BATCH_SIZE to keep a spiking release rate
127
+ # from under-promising. nil when recent_slots_per_call is unknown (cold start) → falls back to the
103
128
  # flat lobby average. e.g. batch size 50, 1 call/min:
104
129
  # flat estimate: position 1 and position 50 both see ~20 min ❌
105
130
  # batch estimate: positions 1–50 → batch 1 → ~10 min
106
131
  # positions 51–100 → batch 2 → ~20 min ✅
107
132
  def batch_wait(position)
108
- return nil unless @slots_per_call.positive?
133
+ return nil unless @recent_slots_per_call.positive?
109
134
 
110
- batch_size = [@slots_per_call, MAX_ETA_BATCH_SIZE].min
135
+ batch_size = [@recent_slots_per_call, MAX_ETA_BATCH_SIZE].min
111
136
  batch_number = ((position - 1) / batch_size) + 1
112
137
  [batch_number * CALLER_INTERVAL_SECONDS, min_queue_floor].max
113
138
  end
@@ -141,7 +166,11 @@ module SpreeCmCommissioner
141
166
  end
142
167
 
143
168
  def lobby_data
144
- @lobby_data ||= firestore.col('waiting_rooms').doc('lobby').get.data || {}
169
+ @lobby_data ||= lobby_document.get.data || {}
170
+ end
171
+
172
+ def lobby_document
173
+ @lobby_document ||= firestore.col('waiting_rooms').doc('lobby')
145
174
  end
146
175
 
147
176
  def firestore
@@ -32,11 +32,6 @@
32
32
  <%= f.label :active %>
33
33
  <%= f.check_box :active %>
34
34
  <% end %>
35
- <%= f.field_container :preview, class: ['custom-control', 'custom-checkbox', 'my-4'] do %>
36
- <%= f.check_box :preview, class: 'custom-control-input' %>
37
- <%= f.label :preview, 'Preview (internal team only)', class: 'custom-control-label' %>
38
- <%= f.error_message_on :preview %>
39
- <% end %>
40
35
  </div>
41
36
  </div>
42
37
  </div>
@@ -50,10 +50,6 @@ module Spree
50
50
  available_on
51
51
  hide_video_banner
52
52
  vendor_id
53
- type
54
- voting_config
55
- fraud_config
56
- preview
57
53
  ]
58
54
 
59
55
  @@store_attributes += [
@@ -111,9 +107,5 @@ module Spree
111
107
  route_stops
112
108
  terms_and_conditions
113
109
  ]
114
-
115
- @@product_attributes += %i[
116
- preview
117
- ]
118
110
  end
119
111
  end
@@ -216,10 +216,7 @@ en:
216
216
  riel: "៛"
217
217
 
218
218
  spree:
219
- voting_contestant_advancer:
220
- reversion_error: "Cannot eliminate here yet. This contestant appears in a later session."
221
- is_open_dated: "Is Open Dated Trip?"
222
- description: "Description"
219
+ description: Description
223
220
  enable_telegram_alert: Enable Telegram Alert
224
221
  registered_by:
225
222
  system_registered: "System Registered"
@@ -538,10 +535,6 @@ en:
538
535
  attributes:
539
536
  exception_rules:
540
537
  invalid_json: "is not a valid format"
541
- spree_cm_commissioner/show_contestant:
542
- attributes:
543
- video_highlights:
544
- invalid_json: "is not a valid format"
545
538
  spree_cm_commissioner/customer:
546
539
  attributes:
547
540
  base:
@@ -553,20 +546,6 @@ en:
553
546
  attributes:
554
547
  place_id:
555
548
  taken: "has already existed with this place type"
556
- spree_cm_commissioner/voting_session:
557
- attributes:
558
- closes_at:
559
- must_be_after_opens_at: "must be after opens_at"
560
- must_not_exceed_parent: "cannot be after parent session closes_at"
561
- parent_id:
562
- must_have_contestants: '"%{name}" must have contestants assigned'
563
- spree_cm_commissioner/voting_contestant:
564
- attributes:
565
- base:
566
- last_contestant_in_parent_session: 'cannot remove the last contestant from "%{session_name}" because child sessions depend on it'
567
- advanced_from_session: 'was advanced from a previous session and cannot be removed directly. Clear the advancement in the source session instead.'
568
- pre_vote_session: 'cannot be removed from a pre-vote session.'
569
- has_advanced_to_session: 'has been assigned to advance to another session. Clear the advancement first before removing this contestant.'
570
549
  spree_cm_commissioner/tenant:
571
550
  attributes:
572
551
  host:
@@ -726,10 +705,6 @@ en:
726
705
  FPS_TWEENTY_FOUR: "24 (Cinematic Mode)"
727
706
  FPS_THIRTY: "30 (TV Show or Online Video)"
728
707
  FPS_SIXTY: "60 (Sport and Gaming)"
729
- import_contestants:
730
- missing_file: "Please select a file to import."
731
- queued: "Import queued. Contestants will be created in the background."
732
-
733
708
  import_orders:
734
709
  invalid_file: "Invalid File upload"
735
710
  invalid_json_format: "Invalid JSON format for orders"
@@ -806,25 +781,7 @@ en:
806
781
  token_missing: "Verification token is missing"
807
782
  verification_failed: "Human verification failed"
808
783
  service_unavailable: "Verification service is temporarily unavailable"
809
- spree_cm_commissioner:
810
- voting_contestants:
811
- assigner:
812
- not_eliminated: "Only eliminated contestants can be added to a Save Contestants session. %{name} is %{status}."
813
- voting_leaderboards:
814
- combined_result:
815
- pre_vote_not_finalized: "Cannot combine results: Pre-Vote sessions not yet finalized: %{names}"
816
-
817
- voting:
818
- errors:
819
- rate_limit_user: "You're voting too fast. Please wait a moment before voting again."
820
- rate_limit_ip: "Too many votes from your network. Please try again shortly."
821
- device_account_limit: "This device has been used by too many accounts."
822
- vpn_blocked: "Voting is not allowed from VPN or proxy connections."
823
- contestant_vote_cap_exceeded: "You have reached the maximum number of votes allowed for this contestant."
824
- no_winners_confirmed: "No winners confirmed"
825
- all_contestants_must_be_ranked: "All non-eliminated contestants must be ranked"
826
- save_advance_to_session_required: "A target voting session must be selected to advance saved contestants"
827
- advance_to_session_not_found: "The selected target session could not be found"
784
+
828
785
  ticket_transfer:
829
786
  rules:
830
787
  rule_already_exists_for_scope: "An active transfer fee rule already exists for %{scope_type} with currency %{currency}"
@@ -870,3 +827,4 @@ en:
870
827
  cooldown_active: "Please wait %{hours_remaining} hour(s) before attempting another transfer"
871
828
  max_transfers_reached: "This ticket has reached the maximum number of transfers (%{limit})"
872
829
  event_cutoff_reached: "Transfers are no longer allowed less than %{hours} hour(s) before the event starts"
830
+
@@ -200,8 +200,6 @@ km:
200
200
  riel: "៛"
201
201
 
202
202
  spree:
203
- voting_contestant_advancer:
204
- reversion_error: "មិនអាចដកចេញនៅវគ្គនេះបានទេ។ បេក្ខជននេះមាននៅវគ្គបោះឆ្នោតក្រោយ។"
205
203
  registered_by:
206
204
  system_registered: "ចុះឈ្មោះដោយប្រព័ន្ធ"
207
205
  self_registered: "ចុះឈ្មោះដោយខ្លួនឯង"
@@ -409,24 +407,6 @@ km:
409
407
  attributes:
410
408
  exception_rules:
411
409
  invalid_json: "Format មិនត្រឹមត្រូវ"
412
- spree_cm_commissioner/show_contestant:
413
- attributes:
414
- video_highlights:
415
- invalid_json: "Format មិនត្រឹមត្រូវ"
416
- spree_cm_commissioner/voting_session:
417
- attributes:
418
- closes_at:
419
- must_be_after_opens_at: "ត្រូវតែក្រោយ opens_at"
420
- must_not_exceed_parent: "មិនអាចក្រោយ closes_at របស់ session មេ"
421
- parent_id:
422
- must_have_contestants: '"%{name}" ត្រូវតែមានអ្នកចូលប្រកួត'
423
- spree_cm_commissioner/voting_contestant:
424
- attributes:
425
- base:
426
- last_contestant_in_parent_session: 'មិនអាចដកអ្នកចូលប្រកួតចុងក្រោយពី "%{session_name}" ព្រោះ session កូនពឹងផ្អែកលើវា'
427
- advanced_from_session: 'ត្រូវបានដំឡើងពី session មុន ហើយមិនអាចដកចេញដោយផ្ទាល់បានទេ។ សូមលុបការដំឡើងនៅក្នុង session ប្រភពជំនួសវិញ។'
428
- pre_vote_session: 'មិនអាចដកចេញពី pre-vote session បានទេ។'
429
- has_advanced_to_session: 'ត្រូវបានកំណត់ឱ្យដំឡើងទៅ session មួយទៀត។ សូមលុបការដំឡើងជាមុនសិន មុននឹងដកអ្នកចូលប្រកួតនេះចេញ។'
430
410
  spree_cm_commissioner/tenant:
431
411
  attributes:
432
412
  host:
@@ -653,17 +633,7 @@ km:
653
633
  turnstile:
654
634
  token_missing: "សញ្ញាណផ្ទៀងផ្ទាត់គឺបាត់"
655
635
  service_unavailable: "សេវាកម្មពេលនេះមិនមានការផ្ទៀងផ្ទាត់"
656
-
657
- spree_cm_commissioner:
658
- voting_contestants:
659
- assigner:
660
- not_eliminated: "តែអ្នកចូលប្រកួតដែលត្រូវបានលុបចោលប៉ុណ្ណោះអាចបន្ថែមទៅ Save Contestants session បាន។ %{name} មានស្ថានភាព %{status}។"
661
- voting:
662
- errors:
663
- no_winners_confirmed: "មិនមានអ្នកឈ្នះត្រូវបានបញ្ជាក់"
664
- all_contestants_must_be_ranked: "អ្នកចូលរួមទាំងអស់ដែលមិនត្រូវបានលុបចោលត្រូវតែមានចំណាត់ថ្នាក់"
665
- save_advance_to_session_required: "ត្រូវតែជ្រើសរើសសម័យបោះឆ្នោតគោលដៅដើម្បីជំរុញអ្នកចូលរួមដែលបានជ្រើស"
666
- advance_to_session_not_found: "រកមិនឃើញសម័យគោលដៅដែលបានជ្រើស"
636
+ verification_failed: "ការផ្ទៀងផ្ទាត់មនុស្សបានបរាជ័យ។ សូមព្យាយាមម្តងទៀត។"
667
637
 
668
638
  ticket_transfer:
669
639
  transfer_not_found: "រកមិនឃើញការផ្ទេរ"
@@ -707,4 +677,3 @@ km:
707
677
  cooldown_active: "សូមរង់ចាំ %{hours_remaining} ម៉ោងមុនពេលព្យាយាមផ្ទេរម្តងទៀត"
708
678
  max_transfers_reached: "សំបុត្រនេះបានឈានដល់ចំនួនផ្ទេរអតិបរមា (%{limit})"
709
679
  event_cutoff_reached: "ការផ្ទេរមិនត្រូវបានអនុញ្ញាតឡើយក្នុងរយៈពេល %{hours} ម៉ោងមុនពេលព្រឹត្តិការណ៍ចាប់ផ្តើម"
710
- verification_failed: "ការផ្ទៀងផ្ទាត់មនុស្សបានបរាជ័យ។ សូមព្យាយាមម្តងទៀត។"
data/config/routes.rb CHANGED
@@ -511,7 +511,6 @@ Spree::Core::Engine.add_routes do
511
511
  resources :vendors
512
512
  resources :products
513
513
  resources :taxons, only: %i[index show], id: /.+/
514
- resources :ad_campaigns, only: [:index]
515
514
 
516
515
  resources :account_checker
517
516
  resource :pin_code_checkers, only: [:update]
@@ -521,7 +520,6 @@ Spree::Core::Engine.add_routes do
521
520
 
522
521
  resources :homepage, only: [] do
523
522
  resources :homepage_sections, only: [:index]
524
- resources :preview_sections, only: %i[index]
525
523
  end
526
524
 
527
525
  resource :account, controller: :account, only: %i[show update]
@@ -600,29 +598,6 @@ Spree::Core::Engine.add_routes do
600
598
  resources :cms_pages, only: %i[index show]
601
599
  resources :waiting_room_sessions, only: :create
602
600
 
603
- resources :shows, only: [:show] do
604
- resources :episodes, only: %i[index show]
605
- resources :people, controller: :show_people, only: %i[index] do
606
- resources :assignments, controller: :show_person_assignments, only: %i[index]
607
- end
608
- resources :contestants, controller: :show_contestants, only: %i[show]
609
- resources :elimination_sessions, controller: :show_elimination_sessions, only: %i[index]
610
- resources :free_vote_claims, only: :create
611
- end
612
-
613
- resources :voting_sessions, only: [] do
614
- resources :voting_contestants, only: :index
615
- resources :voting_credits, only: :index
616
- resources :votes, only: %i[create index]
617
- end
618
-
619
- resources :voting_credit_transactions, only: :index
620
- resources :votes, only: :index
621
-
622
- resources :preview_taxons, only: %i[index show], id: /.+/
623
- resources :preview_products, only: %i[index show]
624
- resources :preview_shows, only: %i[show]
625
-
626
601
  resources :order_histories, only: %i[index] do
627
602
  member do
628
603
  patch :archive
@@ -734,7 +709,6 @@ Spree::Core::Engine.add_routes do
734
709
  resources :homepage, only: [] do
735
710
  resources :homepage_sections, only: [:index]
736
711
  resource :homepage_background, controller: :homepage_background, only: [:show]
737
- resources :preview_sections, only: %i[index]
738
712
  end
739
713
  resources :active_homepage_events, only: [:index]
740
714
 
@@ -758,8 +732,6 @@ Spree::Core::Engine.add_routes do
758
732
  resources :inventory_items, only: %i[index]
759
733
  resources :event_matches, only: %i[index]
760
734
  resources :invite_guests, only: %i[show update]
761
- resources :preview_taxons, only: %i[index show], id: /.+/
762
- resources :preview_products, only: %i[index show]
763
735
  resources :ticket_transfers do
764
736
  collection do
765
737
  get :preview_rule
@@ -1,5 +1,5 @@
1
1
  module SpreeCmCommissioner
2
- VERSION = '2.8.7.pre.pre2'.freeze
2
+ VERSION = '2.8.8'.freeze
3
3
 
4
4
  module_function
5
5
 
@@ -69,22 +69,16 @@ require 'byebug' if Rails.env.development? || Rails.env.test?
69
69
  module SpreeCmCommissioner
70
70
  class << self
71
71
  # Allows overriding the default Redis connection pools with custom ones
72
- attr_writer :inventory_redis_pool, :voting_redis_pool
72
+ attr_writer :inventory_redis_pool
73
73
 
74
74
  # Inventory Redis pool for inventory management
75
75
  def inventory_redis_pool
76
76
  @inventory_redis_pool ||= default_redis_pool
77
77
  end
78
78
 
79
- # Voting Redis pool for voting system counters
80
- def voting_redis_pool
81
- @voting_redis_pool ||= default_redis_pool
82
- end
83
-
84
79
  # Resets all Redis pools, useful for testing or reinitialization
85
80
  def reset_redis_pools
86
81
  @inventory_redis_pool = nil
87
- @voting_redis_pool = nil
88
82
  end
89
83
 
90
84
  private
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
18
18
 
19
19
  s.files = `git ls-files`.split("\n").reject { |f| f.match(/^spec/) && !f.match(%r{^spec/fixtures})}
20
20
 
21
- s.require_paths = ['lib', 'app']
21
+ s.require_path = 'lib'
22
22
  s.requirements << 'none'
23
23
 
24
24
  spree_opts = '>= 4.5.0'