spree_cm_commissioner 2.8.2.pre.pre.2 → 2.8.2

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 (152) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -4
  3. data/Gemfile.lock +1 -1
  4. data/app/controllers/spree/admin/homepage_section_controller.rb +1 -4
  5. data/app/controllers/spree/admin/taxons_controller_decorator.rb +0 -19
  6. data/app/controllers/spree/api/v2/storefront/homepage_sections_controller.rb +0 -1
  7. data/app/controllers/spree/api/v2/tenant/base_controller.rb +0 -4
  8. data/app/controllers/spree/api/v2/tenant/homepage_sections_controller.rb +0 -1
  9. data/app/controllers/spree/api/v2/tenant/products_controller.rb +1 -1
  10. data/app/controllers/spree/api/v2/tenant/taxons_controller.rb +1 -1
  11. data/app/controllers/spree_cm_commissioner/admin/products_controller_decorator.rb +0 -19
  12. data/app/finders/spree_cm_commissioner/events/find_matches.rb +0 -1
  13. data/app/helpers/spree_cm_commissioner/admin/homepage_segment_helper.rb +0 -2
  14. data/app/models/concerns/spree_cm_commissioner/homepage_section_bitwise.rb +1 -2
  15. data/app/models/concerns/spree_cm_commissioner/option_type_attr_type.rb +1 -2
  16. data/app/models/concerns/spree_cm_commissioner/order_state_machine.rb +0 -10
  17. data/app/models/concerns/spree_cm_commissioner/product_type.rb +1 -1
  18. data/app/models/spree_cm_commissioner/product_decorator.rb +0 -39
  19. data/app/models/spree_cm_commissioner/role_decorator.rb +1 -4
  20. data/app/models/spree_cm_commissioner/taxon_decorator.rb +0 -15
  21. data/app/models/spree_cm_commissioner/taxonomy_decorator.rb +1 -10
  22. data/app/models/spree_cm_commissioner/tenant.rb +0 -9
  23. data/app/models/spree_cm_commissioner/user_decorator.rb +0 -5
  24. data/app/models/spree_cm_commissioner/variant_options.rb +0 -4
  25. data/app/models/spree_cm_commissioner/vendor_decorator.rb +0 -4
  26. data/app/serializers/spree/v2/storefront/homepage_section_serializer.rb +1 -1
  27. data/app/serializers/spree/v2/storefront/product_serializer_decorator.rb +1 -1
  28. data/app/serializers/spree/v2/storefront/role_serializer.rb +1 -1
  29. data/app/serializers/spree/v2/storefront/taxon_serializer_decorator.rb +1 -2
  30. data/app/serializers/spree/v2/tenant/homepage_section_serializer.rb +1 -1
  31. data/app/serializers/spree/v2/tenant/role_serializer.rb +1 -1
  32. data/app/services/spree_cm_commissioner/api_caches/invalidate.rb +0 -12
  33. data/app/views/spree/admin/homepage_section/_form.html.erb +0 -5
  34. data/config/initializers/spree_permitted_attributes.rb +0 -8
  35. data/config/locales/en.yml +0 -14
  36. data/config/locales/km.yml +0 -10
  37. data/config/routes.rb +0 -26
  38. data/lib/spree_cm_commissioner/version.rb +1 -1
  39. data/lib/spree_cm_commissioner.rb +1 -7
  40. data/spree_cm_commissioner.gemspec +1 -1
  41. metadata +4 -116
  42. data/app/controllers/spree/api/v2/storefront/preview_products_controller.rb +0 -48
  43. data/app/controllers/spree/api/v2/storefront/preview_sections_controller.rb +0 -27
  44. data/app/controllers/spree/api/v2/storefront/preview_taxons_controller.rb +0 -18
  45. data/app/controllers/spree/api/v2/storefront/products_controller_decorator.rb +0 -15
  46. data/app/controllers/spree/api/v2/storefront/taxons_controller_decorator.rb +0 -15
  47. data/app/controllers/spree/api/v2/tenant/free_vote_claims_controller.rb +0 -37
  48. data/app/controllers/spree/api/v2/tenant/preview_products_controller.rb +0 -47
  49. data/app/controllers/spree/api/v2/tenant/preview_sections_controller.rb +0 -26
  50. data/app/controllers/spree/api/v2/tenant/preview_shows_controller.rb +0 -19
  51. data/app/controllers/spree/api/v2/tenant/preview_taxons_controller.rb +0 -19
  52. data/app/controllers/spree/api/v2/tenant/show_contestants_controller.rb +0 -52
  53. data/app/controllers/spree/api/v2/tenant/show_elimination_sessions_controller.rb +0 -57
  54. data/app/controllers/spree/api/v2/tenant/show_people_controller.rb +0 -49
  55. data/app/controllers/spree/api/v2/tenant/show_person_assignments_controller.rb +0 -36
  56. data/app/controllers/spree/api/v2/tenant/shows_controller.rb +0 -34
  57. data/app/controllers/spree/api/v2/tenant/votes_controller.rb +0 -94
  58. data/app/controllers/spree/api/v2/tenant/voting_contestants_controller.rb +0 -40
  59. data/app/controllers/spree/api/v2/tenant/voting_credit_transactions_controller.rb +0 -41
  60. data/app/controllers/spree/api/v2/tenant/voting_credits_controller.rb +0 -31
  61. data/app/jobs/spree_cm_commissioner/vote_fraud_event_job.rb +0 -9
  62. data/app/jobs/spree_cm_commissioner/voting_credit_allocation_job.rb +0 -10
  63. data/app/jobs/spree_cm_commissioner/voting_credit_de_allocation_job.rb +0 -10
  64. data/app/models/spree_cm_commissioner/maintenance_tasks/voting_session.rb +0 -36
  65. data/app/models/spree_cm_commissioner/preview_role.rb +0 -8
  66. data/app/models/spree_cm_commissioner/role_user_decorator.rb +0 -8
  67. data/app/models/spree_cm_commissioner/show.rb +0 -159
  68. data/app/models/spree_cm_commissioner/show_contestant.rb +0 -39
  69. data/app/models/spree_cm_commissioner/show_contestant_image.rb +0 -11
  70. data/app/models/spree_cm_commissioner/show_contestant_video.rb +0 -15
  71. data/app/models/spree_cm_commissioner/show_episode.rb +0 -135
  72. data/app/models/spree_cm_commissioner/show_person.rb +0 -15
  73. data/app/models/spree_cm_commissioner/show_person_assignment.rb +0 -20
  74. data/app/models/spree_cm_commissioner/show_person_image.rb +0 -11
  75. data/app/models/spree_cm_commissioner/vote.rb +0 -16
  76. data/app/models/spree_cm_commissioner/vote_fraud_event.rb +0 -19
  77. data/app/models/spree_cm_commissioner/voting_contestant.rb +0 -46
  78. data/app/models/spree_cm_commissioner/voting_credit.rb +0 -72
  79. data/app/models/spree_cm_commissioner/voting_credit_transaction.rb +0 -55
  80. data/app/models/spree_cm_commissioner/voting_session.rb +0 -223
  81. data/app/models/spree_cm_commissioner/voting_session_stat.rb +0 -8
  82. data/app/overrides/spree/admin/products/_form/preview_checkbox.html.erb.deface +0 -9
  83. data/app/overrides/spree/admin/taxons/_form/preview_checkbox.html.erb.deface +0 -7
  84. data/app/serializers/spree/v2/tenant/show_contestant_serializer.rb +0 -21
  85. data/app/serializers/spree/v2/tenant/show_episode_serializer.rb +0 -17
  86. data/app/serializers/spree/v2/tenant/show_person_assignment_serializer.rb +0 -16
  87. data/app/serializers/spree/v2/tenant/show_person_serializer.rb +0 -13
  88. data/app/serializers/spree/v2/tenant/show_serializer.rb +0 -26
  89. data/app/serializers/spree/v2/tenant/video_serializer.rb +0 -9
  90. data/app/serializers/spree/v2/tenant/vote_serializer.rb +0 -14
  91. data/app/serializers/spree/v2/tenant/voting_contestant_serializer.rb +0 -22
  92. data/app/serializers/spree/v2/tenant/voting_credit_serializer.rb +0 -10
  93. data/app/serializers/spree/v2/tenant/voting_credit_transaction_serializer.rb +0 -14
  94. data/app/serializers/spree/v2/tenant/voting_session_serializer.rb +0 -18
  95. data/app/services/spree_cm_commissioner/fraud_check.rb +0 -279
  96. data/app/services/spree_cm_commissioner/show_contestants/normalize_video_highlights.rb +0 -57
  97. data/app/services/spree_cm_commissioner/url_embed/youtube_embed.rb +0 -44
  98. data/app/services/spree_cm_commissioner/vote_counters/audit_counters.rb +0 -43
  99. data/app/services/spree_cm_commissioner/vote_counters/base.rb +0 -31
  100. data/app/services/spree_cm_commissioner/vote_counters/increment.rb +0 -44
  101. data/app/services/spree_cm_commissioner/vote_counters/per_contestant_counter.rb +0 -68
  102. data/app/services/spree_cm_commissioner/vote_counters/rebuild_from_db.rb +0 -70
  103. data/app/services/spree_cm_commissioner/vote_counters/snapshot_to_db.rb +0 -113
  104. data/app/services/spree_cm_commissioner/vote_credit_deductor.rb +0 -68
  105. data/app/services/spree_cm_commissioner/vote_package/create.rb +0 -145
  106. data/app/services/spree_cm_commissioner/vote_package/update.rb +0 -91
  107. data/app/services/spree_cm_commissioner/vote_processor.rb +0 -144
  108. data/app/services/spree_cm_commissioner/voting_contestants/advancer.rb +0 -334
  109. data/app/services/spree_cm_commissioner/voting_contestants/assigner.rb +0 -32
  110. data/app/services/spree_cm_commissioner/voting_contestants/bulk_updater.rb +0 -106
  111. data/app/services/spree_cm_commissioner/voting_credits/allocate.rb +0 -77
  112. data/app/services/spree_cm_commissioner/voting_credits/claim_free_votes.rb +0 -119
  113. data/app/services/spree_cm_commissioner/voting_credits/credit_calculator.rb +0 -35
  114. data/app/services/spree_cm_commissioner/voting_credits/de_allocate.rb +0 -87
  115. data/app/services/spree_cm_commissioner/voting_leaderboards/calculate_score.rb +0 -74
  116. data/app/services/spree_cm_commissioner/voting_sessions/finalize.rb +0 -66
  117. data/db/migrate/20260309230148_create_cm_show_people.rb +0 -14
  118. data/db/migrate/20260309230149_create_cm_show_people_assignments.rb +0 -16
  119. data/db/migrate/20260310082711_create_cm_show_contestants.rb +0 -28
  120. data/db/migrate/20260310082720_create_cm_voting_sessions.rb +0 -21
  121. data/db/migrate/20260310082721_create_cm_voting_contestants.rb +0 -23
  122. data/db/migrate/20260310082734_add_voting_fields_to_spree_taxons.rb +0 -9
  123. data/db/migrate/20260310082735_add_type_to_spree_products.rb +0 -6
  124. data/db/migrate/20260310082749_create_cm_voting_credits.rb +0 -27
  125. data/db/migrate/20260326080200_create_cm_voting_credit_transactions.rb +0 -27
  126. data/db/migrate/20260330160000_create_cm_votes.rb +0 -25
  127. data/db/migrate/20260401072500_add_advanced_from_to_cm_voting_contestants.rb +0 -7
  128. data/db/migrate/20260402000001_add_voting_credit_scope_to_spree_taxons.rb +0 -6
  129. data/db/migrate/20260402000002_rename_scopeable_to_votable_in_cm_voting_credits.rb +0 -12
  130. data/db/migrate/20260403070000_add_name_to_cm_voting_sessions.rb +0 -5
  131. data/db/migrate/20260406000001_add_vendor_id_to_voting_tables.rb +0 -6
  132. data/db/migrate/20260406000001_rename_votes_remaining_to_amount_in_cm_voting_credits.rb +0 -11
  133. data/db/migrate/20260408085255_add_show_id_and_vendor_id_to_cm_voting_sessions.rb +0 -9
  134. data/db/migrate/20260420000001_rename_type_to_credit_type_in_cm_voting_credits.rb +0 -25
  135. data/db/migrate/20260422000001_create_cm_vote_fraud_events.rb +0 -23
  136. data/db/migrate/20260423000001_add_preview_to_taxons_products_and_sections.rb +0 -11
  137. data/db/migrate/20260423000002_create_preview_roles.rb +0 -24
  138. data/db/migrate/20260515120000_add_public_metadata_to_cm_voting_sessions.rb +0 -5
  139. data/db/migrate/20260518090920_add_unique_voter_count_to_voting_contestants.rb +0 -5
  140. data/db/migrate/20260518094322_create_cm_voting_session_stats.rb +0 -17
  141. data/db/migrate/20260520000001_add_scoring_model_to_cm_voting_sessions.rb +0 -5
  142. data/db/migrate/20260520000001_optimize_cm_votes_indexes.rb +0 -22
  143. data/db/migrate/20260525042257_add_vote_number_to_cm_voting_contestants.rb +0 -18
  144. data/db/migrate/20260527035430_add_confirmed_rank_to_cm_voting_contestants.rb +0 -5
  145. data/db/migrate/20260527062005_add_eliminated_at_to_cm_show_contestants.rb +0 -5
  146. data/docs/sql/jsonb_query_guide.md +0 -57
  147. data/lib/spree_cm_commissioner/test_helper/factories/show_episode_factory.rb +0 -12
  148. data/lib/spree_cm_commissioner/test_helper/factories/show_factory.rb +0 -120
  149. data/lib/spree_cm_commissioner/test_helper/factories/vote_credit_factory.rb +0 -37
  150. data/lib/spree_cm_commissioner/test_helper/factories/vote_factory.rb +0 -28
  151. data/lib/spree_cm_commissioner/test_helper/factories/voting_credit_transaction_factory.rb +0 -11
  152. data/lib/spree_cm_commissioner/test_helper/factories/voting_session_factory.rb +0 -11
@@ -1,223 +0,0 @@
1
- module SpreeCmCommissioner
2
- class VotingSession < SpreeCmCommissioner::Base
3
- include SpreeCmCommissioner::StoreMetadata
4
-
5
- belongs_to :vendor, class_name: 'Spree::Vendor', optional: false
6
- belongs_to :show, class_name: 'SpreeCmCommissioner::Show', optional: false
7
- belongs_to :episode, class_name: 'Spree::Product', optional: false
8
-
9
- has_many :voting_credits, class_name: 'SpreeCmCommissioner::VotingCredit', as: :votable, dependent: :destroy
10
- has_many :voting_contestants, class_name: 'SpreeCmCommissioner::VotingContestant', dependent: :destroy
11
- has_many :eliminated_voting_contestants, lambda {
12
- where(eliminated: true)
13
- }, class_name: 'SpreeCmCommissioner::VotingContestant', foreign_key: 'voting_session_id'
14
- has_many :show_contestants, through: :voting_contestants
15
- has_many :contestants, through: :show, source: :show_contestants
16
- has_many :votes, class_name: 'SpreeCmCommissioner::Vote', dependent: :destroy
17
- has_one :stat, class_name: 'SpreeCmCommissioner::VotingSessionStat', dependent: :destroy
18
-
19
- acts_as_list scope: :episode
20
-
21
- enum status: { disabled: 0, enabled: 1, closed: 2, finalized: 3 }
22
- enum scoring_model: { manual: 0, geometric: 1, harmonic: 2, weighted_sum: 3, arithmetic: 4 }
23
-
24
- self.whitelisted_ransackable_attributes = %w[name status]
25
-
26
- validates :session_key, presence: true, uniqueness: true
27
- validates :name, :opens_at, :closes_at, :status, presence: true
28
- validate :closes_after_opens
29
- validate :validate_live_stream_url, if: :live_stream_url_changed?
30
-
31
- before_validation :generate_session_key, on: :create
32
- before_save :update_live_stream_thumbnail
33
- after_update :schedule_counter_reconciliation, if: -> { saved_change_to_status?(from: 'enabled', to: 'closed') }
34
- # Scopes
35
- # Uses the database clock (CURRENT_TIMESTAMP) for consistency and to avoid application server clock drift.
36
- scope :current, -> { where(status: %i[enabled closed]).where('opens_at <= CURRENT_TIMESTAMP AND closes_at >= CURRENT_TIMESTAMP') }
37
- scope :upcoming, -> { where(status: :enabled).where('opens_at > CURRENT_TIMESTAMP') }
38
- scope :past, -> { where(status: :closed).or(where('closes_at < CURRENT_TIMESTAMP')) }
39
-
40
- def active?
41
- enabled? && Time.current.between?(opens_at, closes_at)
42
- end
43
-
44
- def upcoming?
45
- enabled? && Time.current < opens_at
46
- end
47
-
48
- def past?
49
- closed? || (closes_at.present? && Time.current > closes_at)
50
- end
51
-
52
- def paused?
53
- disabled? && Time.current.between?(opens_at, closes_at)
54
- end
55
-
56
- # Priority 1: Current session wins over Upcoming session.
57
- # Priority 2: Follow manual position (Managed by acts_as_list).
58
- def self.current_or_next_upcoming
59
- current.or(upcoming).order(
60
- Arel.sql('CASE WHEN opens_at <= CURRENT_TIMESTAMP AND closes_at >= CURRENT_TIMESTAMP THEN 0 ELSE 1 END'),
61
- :position
62
- )
63
- end
64
-
65
- # Define standard fraud configuration keys
66
- store_accessor :fraud_config,
67
- :max_votes_per_minute_per_user,
68
- :max_votes_per_minute_per_ip,
69
- :max_accounts_per_device,
70
- :block_vpn
71
-
72
- # Define standard voting configuration keys
73
- store_accessor :voting_config,
74
- :free_vote_limit,
75
- :free_vote_limit_type,
76
- :paid_vote_enabled,
77
- :max_paid_votes_per_session,
78
- :sms_vote_enabled,
79
- :sms_vote_cost_usd,
80
- :operator_vote_enabled,
81
- :votes_weight,
82
- :voters_weight,
83
- :suggestion_top_n
84
-
85
- DEFAULT_SUGGESTION_TOP_N = 1
86
-
87
- validate :weights_present_for_weighted_sum
88
-
89
- def effective_suggestion_top_n
90
- suggestion_top_n&.to_i&.positive? ? suggestion_top_n.to_i : DEFAULT_SUGGESTION_TOP_N
91
- end
92
-
93
- # Define public metadata keys (customer-facing data)
94
- store_public_metadata :live_stream_url, :string
95
- store_public_metadata :live_stream_enabled, :boolean
96
- store_public_metadata :live_stream_thumbnail, :string
97
- store_public_metadata :live_stream_title, :string
98
- store_public_metadata :live_stream_description, :text
99
-
100
- def find_or_create_voting_contestant(show_contestant)
101
- voting_contestants.find_or_create_by!(show_contestant: show_contestant) do |vc|
102
- vc.show_id = show.id
103
- end
104
- end
105
-
106
- def effective_voting_config
107
- return {} unless show
108
-
109
- config = parse_json_config(voting_config)
110
- show_config = show.effective_voting_config
111
- config.reverse_merge(show_config || {})
112
- end
113
-
114
- def effective_fraud_config
115
- return {} unless show
116
-
117
- config = parse_json_config(fraud_config)
118
- show_config = show.effective_fraud_config
119
- config.reverse_merge(show_config || {})
120
- end
121
-
122
- def can_vote?
123
- enabled? && Time.zone.now.between?(opens_at, closes_at)
124
- end
125
-
126
- # Returns the next session within the same episode (by position).
127
- # e.g. current session position=1 → returns session at position=2; last session → nil
128
- def next_in_episode
129
- episode.voting_sessions.where('position > ?', position).order(:position).first
130
- end
131
-
132
- # True when this session is the first in its episode.
133
- # e.g. position=1 → true; position=2 → false
134
- def first_in_episode?
135
- position == 1
136
- end
137
-
138
- # Show contestants expected in this session but not yet assigned.
139
- # episode.season.show_contestants → all contestants on the season this episode belongs to.
140
- # show_contestants → already assigned to this voting session.
141
- # e.g. season has [Alice, Bob, Carol]; session only has [Alice] → returns [Bob, Carol]
142
- def missing_show_contestants
143
- episode.season.show_contestants.where.not(id: show_contestants.select(:id)).ordered
144
- end
145
-
146
- def max_votes_per_user
147
- effective_voting_config['max_votes_per_user'] || 10
148
- end
149
-
150
- def rate_limit_window
151
- effective_voting_config['rate_limit_window'] || 60
152
- end
153
-
154
- def rate_limit_max_votes
155
- effective_voting_config['rate_limit_max_votes'] || 5
156
- end
157
-
158
- def embedded_live_stream_url
159
- return nil if live_stream_url.blank?
160
-
161
- result = SpreeCmCommissioner::UrlEmbed::YoutubeEmbed.call(url: live_stream_url)
162
- result.success? ? result.value : nil
163
- end
164
-
165
- private
166
-
167
- def weights_present_for_weighted_sum
168
- return unless weighted_sum?
169
-
170
- config = effective_voting_config
171
- errors.add(:votes_weight, :blank) if config['votes_weight'].blank?
172
- errors.add(:voters_weight, :blank) if config['voters_weight'].blank?
173
- end
174
-
175
- # Enqueues a MaintenanceTasks::VotingSession to reconcile Redis counters after
176
- # a session state change (e.g. closed). find_or_create_by(pending) is idempotent —
177
- # multiple triggers won't queue duplicate jobs.
178
- # Unlike VoteProcessor's Redis-down rescue path, it's safe to call async_execute
179
- # here because this runs from an after_* callback inside the normal request cycle,
180
- # not from a Redis error handler where Sidekiq is also unavailable.
181
- def schedule_counter_reconciliation
182
- SpreeCmCommissioner::MaintenanceTasks::VotingSession.pending.find_or_create_by(
183
- maintainable_type: self.class.name,
184
- maintainable_id: id
185
- ).async_execute
186
- end
187
-
188
- def validate_live_stream_url
189
- return if live_stream_url.blank?
190
-
191
- result = SpreeCmCommissioner::UrlEmbed::YoutubeEmbed.call(url: live_stream_url)
192
- return if result.success?
193
-
194
- errors.add(:live_stream_url, result.error)
195
- end
196
-
197
- def update_live_stream_thumbnail
198
- return if live_stream_url.blank?
199
-
200
- video_id = SpreeCmCommissioner::UrlEmbed::YoutubeEmbed.extract_video_id(live_stream_url)
201
- self.live_stream_thumbnail = "https://img.youtube.com/vi/#{video_id}/hqdefault.jpg" if video_id
202
- end
203
-
204
- def generate_session_key
205
- self.session_key ||= "#{episode.slug}-#{Time.current.to_i}-#{SecureRandom.hex(8)}"
206
- end
207
-
208
- def closes_after_opens
209
- return unless opens_at && closes_at
210
-
211
- errors.add(:closes_at, 'must be after opens_at') if closes_at <= opens_at
212
- end
213
-
214
- def parse_json_config(value)
215
- return {} if value.nil? || value == ''
216
- return value if value.is_a?(Hash)
217
-
218
- JSON.parse(value)
219
- rescue JSON::ParserError
220
- {}
221
- end
222
- end
223
- end
@@ -1,8 +0,0 @@
1
- module SpreeCmCommissioner
2
- class VotingSessionStat < SpreeCmCommissioner::Base
3
- belongs_to :voting_session, class_name: 'SpreeCmCommissioner::VotingSession', optional: false
4
- belongs_to :leading_contestant, class_name: 'SpreeCmCommissioner::VotingContestant', optional: true
5
-
6
- validates :unique_voter_count, :total_vote_count, presence: true
7
- end
8
- end
@@ -1,9 +0,0 @@
1
- <!-- insert_after "[data-hook='admin_product_form_promotionable']" -->
2
-
3
- <div data-hook="admin_product_form_preview">
4
- <%= f.field_container :preview do %>
5
- <%= f.check_box :preview %>
6
- <%= f.label :preview, 'Preview (internal team only)' %>
7
- <%= f.error_message_on :preview %>
8
- <% end %>
9
- </div>
@@ -1,7 +0,0 @@
1
- <!-- insert_before "erb[loud]:contains('field_container :hide_from_nav')" -->
2
-
3
- <%= f.field_container :preview, class: ['custom-control', 'custom-checkbox', 'my-4'] do %>
4
- <%= f.check_box :preview, class: 'custom-control-input' %>
5
- <%= f.label :preview, 'Preview (internal team only)', class: 'custom-control-label' %>
6
- <%= f.error_message_on :preview %>
7
- <% end %>
@@ -1,21 +0,0 @@
1
- module Spree
2
- module V2
3
- module Tenant
4
- class ShowContestantSerializer < BaseSerializer
5
- set_type :show_contestant
6
-
7
- attributes :name, :age, :origin, :category, :bio, :gender, :status, :contestant_number, :show_id, :eliminated_at
8
-
9
- attribute :video_highlights do |contestant|
10
- contestant.video_highlights || []
11
- end
12
-
13
- has_one :current_voting_session, serializer: ::Spree::V2::Tenant::VotingSessionSerializer
14
- has_many :show_contestant_images, serializer: ::Spree::V2::Tenant::AssetSerializer
15
- has_many :show_contestant_videos, serializer: ::Spree::V2::Tenant::VideoSerializer
16
- has_many :voting_contestants, serializer: ::Spree::V2::Tenant::VotingContestantSerializer
17
- has_one :assigned_show_person, serializer: ::Spree::V2::Tenant::ShowPersonSerializer
18
- end
19
- end
20
- end
21
- end
@@ -1,17 +0,0 @@
1
- module Spree
2
- module V2
3
- module Tenant
4
- class ShowEpisodeSerializer < BaseSerializer
5
- attributes :episode_number, :name, :scheduled_at, :ends_at
6
-
7
- attribute :status do |episode|
8
- if episode.current?
9
- 'current'
10
- elsif episode.upcoming?
11
- 'upcoming'
12
- end
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,16 +0,0 @@
1
- module Spree
2
- module V2
3
- module Tenant
4
- class ShowPersonAssignmentSerializer < BaseSerializer
5
- set_type :show_person_assignment
6
-
7
- attribute :role
8
-
9
- has_many :assigned_contestants, serializer: ::Spree::V2::Tenant::ShowContestantSerializer, &:assigned_contestants
10
-
11
- has_one :show_person, serializer: ::Spree::V2::Tenant::ShowPersonSerializer
12
- has_one :show, serializer: ::Spree::V2::Tenant::ShowSerializer
13
- end
14
- end
15
- end
16
- end
@@ -1,13 +0,0 @@
1
- module Spree
2
- module V2
3
- module Tenant
4
- class ShowPersonSerializer < BaseSerializer
5
- set_type :show_person
6
-
7
- attributes :name, :bio, :social_links
8
-
9
- has_many :show_person_images, serializer: ::Spree::V2::Tenant::AssetSerializer
10
- end
11
- end
12
- end
13
- end
@@ -1,26 +0,0 @@
1
- module Spree
2
- module V2
3
- module Tenant
4
- class ShowSerializer < BaseSerializer
5
- set_type :show
6
-
7
- attributes :slug, :description, :permalink, :from_date, :to_date, :preview, :created_at, :updated_at,
8
- :free_vote_limit, :free_vote_limit_type
9
-
10
- attribute :name, &:display_name
11
-
12
- attribute :show_type do |show|
13
- if show.show?
14
- 'franchise'
15
- elsif show.season?
16
- 'season'
17
- end
18
- end
19
-
20
- has_one :current_episode, serializer: Spree::V2::Tenant::ShowEpisodeSerializer
21
- has_one :current_voting_session, serializer: Spree::V2::Tenant::VotingSessionSerializer
22
- has_one :app_banner, serializer: Spree::V2::Tenant::AssetSerializer
23
- end
24
- end
25
- end
26
- end
@@ -1,9 +0,0 @@
1
- module Spree
2
- module V2
3
- module Tenant
4
- class VideoSerializer < BaseSerializer
5
- attributes :alt, :original_url, :position
6
- end
7
- end
8
- end
9
- end
@@ -1,14 +0,0 @@
1
- module Spree
2
- module V2
3
- module Tenant
4
- class VoteSerializer < BaseSerializer
5
- attributes :voting_session_id, :contestant_id, :quantity, :channel,
6
- :voter_identifier, :public_metadata, :created_at
7
-
8
- has_one :contestant, serializer: Spree::V2::Tenant::VotingContestantSerializer
9
- has_one :voting_session, serializer: Spree::V2::Tenant::VotingSessionSerializer
10
- has_one :vote_credit, serializer: Spree::V2::Tenant::VotingCreditSerializer
11
- end
12
- end
13
- end
14
- end
@@ -1,22 +0,0 @@
1
- module Spree
2
- module V2
3
- module Tenant
4
- class VotingContestantSerializer < BaseSerializer
5
- set_type :voting_contestant
6
-
7
- attributes :show_id, :show_contestant_id, :name, :contestant_number, :vote_number, :category, :gender,
8
- :vote_count, :eliminated, :eliminated_via, :eliminated_at, :advanced_to_type, :advanced_to_id, :special_rules,
9
- :created_at, :updated_at, :advanced_from_type, :advanced_from_id, :unique_voter_count, :preferences
10
-
11
- attribute :voting_session_id, &:voting_session_id
12
-
13
- attribute :can_vote, &:can_vote?
14
-
15
- belongs_to :voting_session, serializer: ::Spree::V2::Tenant::VotingSessionSerializer
16
-
17
- has_many :show_contestant_images, serializer: ::Spree::V2::Tenant::AssetSerializer
18
- has_many :show_contestant_videos, serializer: ::Spree::V2::Tenant::VideoSerializer
19
- end
20
- end
21
- end
22
- end
@@ -1,10 +0,0 @@
1
- module Spree
2
- module V2
3
- module Tenant
4
- class VotingCreditSerializer < BaseSerializer
5
- attributes :category, :votable_type, :votable_id, :free_votes_amount, :free_votes_used,
6
- :paid_votes_amount, :paid_votes_used, :available_votes, :created_at, :updated_at
7
- end
8
- end
9
- end
10
- end
@@ -1,14 +0,0 @@
1
- module Spree
2
- module V2
3
- module Tenant
4
- class VotingCreditTransactionSerializer < BaseSerializer
5
- attributes :amount, :user_total_amount, :memo, :created_at
6
-
7
- attribute :action, &:action # we want to return the string value of the enum
8
-
9
- has_one :vote_credit, serializer: Spree::V2::Tenant::VotingCreditSerializer
10
- has_one :originator, polymorphic: true, serializer: Spree::V2::Tenant::OrderSerializer
11
- end
12
- end
13
- end
14
- end
@@ -1,18 +0,0 @@
1
- module Spree
2
- module V2
3
- module Tenant
4
- class VotingSessionSerializer < BaseSerializer
5
- attributes :name, :opens_at, :closes_at, :status, :live_stream_enabled, :live_stream_thumbnail, :live_stream_title, :live_stream_description,
6
- :created_at
7
-
8
- attribute :live_stream_url, &:embedded_live_stream_url
9
- attribute :can_vote, &:can_vote?
10
-
11
- belongs_to :episode, serializer: Spree::V2::Tenant::ShowEpisodeSerializer
12
- belongs_to :show, serializer: Spree::V2::Tenant::ShowSerializer
13
-
14
- has_many :eliminated_voting_contestants, serializer: ::Spree::V2::Tenant::VotingContestantSerializer
15
- end
16
- end
17
- end
18
- end