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,26 +0,0 @@
1
- module Spree
2
- module Api
3
- module V2
4
- module Tenant
5
- class PreviewSectionsController < HomepageSectionsController
6
- before_action :require_spree_current_user
7
-
8
- # override
9
- def collection
10
- allowed_ids = spree_current_user.preview_roles.where(previewable_type: Spree::Taxon.polymorphic_name).pluck(:previewable_id)
11
-
12
- section_ids = SpreeCmCommissioner::HomepageSectionRelatable
13
- .where(relatable_type: 'Spree::Taxon', relatable_id: allowed_ids.presence || [])
14
- .select(:homepage_section_id)
15
-
16
- @collection ||= scope.filter_by_segment(params[:homepage_id] || :general)
17
- .active
18
- .where(preview: true)
19
- .where(id: section_ids)
20
- .order(position: :asc)
21
- end
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,19 +0,0 @@
1
- module Spree
2
- module Api
3
- module V2
4
- module Tenant
5
- class PreviewShowsController < ShowsController
6
- before_action :require_spree_current_user
7
-
8
- # override
9
- def scope
10
- allowed_ids = spree_current_user.preview_roles
11
- .where(previewable_type: SpreeCmCommissioner::Show.polymorphic_name)
12
- .select(:previewable_id)
13
- super.rewhere(preview: true).where(id: allowed_ids)
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,19 +0,0 @@
1
- module Spree
2
- module Api
3
- module V2
4
- module Tenant
5
- class PreviewTaxonsController < TaxonsController
6
- before_action :require_spree_current_user
7
-
8
- # override
9
- def scope
10
- allowed_ids = spree_current_user.preview_roles.where(previewable_type: model_class.polymorphic_name).select(:previewable_id)
11
- MultiTenant.with(@tenant) do
12
- model_class.where(preview: true, id: allowed_ids)
13
- end
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,52 +0,0 @@
1
- module Spree
2
- module Api
3
- module V2
4
- module Tenant
5
- class ShowContestantsController < BaseController
6
- private
7
-
8
- # override
9
- def model_class
10
- SpreeCmCommissioner::ShowContestant
11
- end
12
-
13
- # override
14
- def scope
15
- return model_class.none unless current_show
16
-
17
- model_class
18
- .where(show_id: current_show.id)
19
- .includes(
20
- :show_contestant_images,
21
- :show_contestant_videos,
22
- :current_voting_session,
23
- :voting_contestants,
24
- assigned_show_person: :show_person_images,
25
- show: [
26
- :parent,
27
- { episodes: :voting_sessions },
28
- { seasons: { episodes: :voting_sessions } }
29
- ]
30
- )
31
- end
32
-
33
- def current_show
34
- @current_show ||= show_scope.find_by!(slug: params[:show_id])
35
- end
36
-
37
- def show_scope
38
- vendor_ids = @tenant.vendors.select(:id)
39
- return SpreeCmCommissioner::Show.none if vendor_ids.blank?
40
-
41
- SpreeCmCommissioner::Show.where(vendor_id: vendor_ids)
42
- end
43
-
44
- # override
45
- def resource_serializer
46
- Spree::V2::Tenant::ShowContestantSerializer
47
- end
48
- end
49
- end
50
- end
51
- end
52
- end
@@ -1,57 +0,0 @@
1
- module Spree
2
- module Api
3
- module V2
4
- module Tenant
5
- class ShowEliminationSessionsController < BaseController
6
- # override
7
- def collection
8
- @collection ||= scope
9
- .includes(
10
- :episode,
11
- :show,
12
- eliminated_voting_contestants: [
13
- :show_contestant,
14
- { show_contestant: %i[show_contestant_images show_contestant_videos] }
15
- ]
16
- )
17
- .order('cm_voting_sessions.closes_at DESC')
18
- end
19
-
20
- # override
21
- def collection_serializer
22
- Spree::V2::Tenant::VotingSessionSerializer
23
- end
24
-
25
- private
26
-
27
- # override
28
- def model_class
29
- SpreeCmCommissioner::VotingSession
30
- end
31
-
32
- # override
33
- def scope
34
- return model_class.none unless current_show
35
-
36
- current_show.voting_sessions
37
- .joins(:episode)
38
- .joins(:voting_contestants)
39
- .where(voting_contestants: { eliminated: true })
40
- .distinct
41
- end
42
-
43
- def current_show
44
- @current_show ||= show_scope.find_by!(slug: params[:show_id])
45
- end
46
-
47
- def show_scope
48
- vendor_ids = @tenant.vendors.select(:id)
49
- return SpreeCmCommissioner::Show.none if vendor_ids.blank?
50
-
51
- SpreeCmCommissioner::Show.where(vendor_id: vendor_ids)
52
- end
53
- end
54
- end
55
- end
56
- end
57
- end
@@ -1,49 +0,0 @@
1
- module Spree
2
- module Api
3
- module V2
4
- module Tenant
5
- class ShowPeopleController < BaseController
6
- private
7
-
8
- # override
9
- def model_class
10
- SpreeCmCommissioner::ShowPerson
11
- end
12
-
13
- # override
14
- def scope
15
- scope = current_show.show_people
16
- .joins(:assignments)
17
- .distinct
18
- .includes(
19
- :assignments,
20
- assigned_contestants: %i[show_contestant_images current_voting_session]
21
- )
22
-
23
- role = params[:role].presence
24
- return scope if role.blank?
25
-
26
- role_value = SpreeCmCommissioner::ShowPersonAssignment.roles[role.to_s]
27
- return scope.none if role_value.nil?
28
-
29
- scope.where(cm_show_people_assignments: { role: role_value })
30
- end
31
-
32
- # override
33
- def collection_serializer
34
- Spree::V2::Tenant::ShowPersonSerializer
35
- end
36
-
37
- def current_show
38
- @current_show ||= show_scope.find_by!(slug: params[:show_id])
39
- end
40
-
41
- def show_scope
42
- vendor_ids = @tenant.vendors.select(:id)
43
- SpreeCmCommissioner::Show.where(vendor_id: vendor_ids)
44
- end
45
- end
46
- end
47
- end
48
- end
49
- end
@@ -1,36 +0,0 @@
1
- module Spree
2
- module Api
3
- module V2
4
- module Tenant
5
- class ShowPersonAssignmentsController < BaseController
6
- private
7
-
8
- def model_class
9
- SpreeCmCommissioner::ShowPersonAssignment
10
- end
11
-
12
- def scope
13
- vendor_ids = @tenant.vendors.select(:id)
14
- show_ids = SpreeCmCommissioner::Show.where(vendor_id: vendor_ids).select(:id)
15
-
16
- model_class.where(show_id: show_ids)
17
- .where(show_person_id: params[:person_id], show_id: current_show.id)
18
- .includes(:show_person, :show)
19
- end
20
-
21
- def current_show
22
- @current_show ||= SpreeCmCommissioner::Show.find_by!(slug: params[:show_id])
23
- end
24
-
25
- def resource_serializer
26
- Spree::V2::Tenant::ShowPersonAssignmentSerializer
27
- end
28
-
29
- def collection_serializer
30
- Spree::V2::Tenant::ShowPersonAssignmentSerializer
31
- end
32
- end
33
- end
34
- end
35
- end
36
- end
@@ -1,34 +0,0 @@
1
- module Spree
2
- module Api
3
- module V2
4
- module Tenant
5
- class ShowsController < BaseController
6
- private
7
-
8
- # override
9
- def model_class
10
- SpreeCmCommissioner::Show
11
- end
12
-
13
- def resource
14
- @resource ||= scope.find_by!(slug: params[:id])
15
- end
16
-
17
- # override
18
- def scope
19
- vendor_ids = @tenant.vendors.select(:id)
20
- return model_class.none if vendor_ids.blank?
21
-
22
- model_class.where(vendor_id: vendor_ids, preview: false)
23
- .includes(:parent, :app_banner, episodes: :voting_sessions, seasons: { episodes: :voting_sessions })
24
- end
25
-
26
- # override
27
- def resource_serializer
28
- Spree::V2::Tenant::ShowSerializer
29
- end
30
- end
31
- end
32
- end
33
- end
34
- end
@@ -1,94 +0,0 @@
1
- module Spree
2
- module Api
3
- module V2
4
- module Tenant
5
- class VotesController < BaseController
6
- before_action :require_spree_current_user
7
-
8
- def index
9
- render_serialized_payload do
10
- serialize_collection(collection)
11
- end
12
- end
13
-
14
- def create
15
- voting_session = current_vendor.voting_sessions.find(params[:voting_session_id])
16
- contestant = voting_session.voting_contestants.find(params[:contestant_id])
17
-
18
- processor_params = vote_params.merge(
19
- device_fingerprint: device_params[:fingerprint],
20
- voter_identifier: device_params[:identifier],
21
- public_metadata: params[:public_metadata] || {},
22
- tenant_id: MultiTenant.current_tenant_id,
23
- vendor_id: current_vendor.id
24
- )
25
-
26
- result = SpreeCmCommissioner::VoteProcessor.call(
27
- voting_session: voting_session,
28
- contestant: contestant,
29
- user: spree_current_user,
30
- params: processor_params,
31
- request: request
32
- )
33
-
34
- if result.success?
35
- render_serialized_payload(201) { serialize_resource(result.value) }
36
- else
37
- render_error_payload(result.error)
38
- end
39
- end
40
-
41
- private
42
-
43
- def collection
44
- @collection ||= scope.page(params[:page])
45
- .per(params[:per_page])
46
- end
47
-
48
- def scope
49
- MultiTenant.with(@tenant) do
50
- scope = spree_current_user.votes
51
- .includes(:contestant, :voting_session, :vote_credit)
52
- .order(created_at: :desc)
53
-
54
- scope = scope.for_session(params[:voting_session_id]) if params[:voting_session_id]
55
- scope
56
- end
57
- end
58
-
59
- def model_class
60
- SpreeCmCommissioner::Vote
61
- end
62
-
63
- def resource_serializer
64
- Spree::V2::Tenant::VoteSerializer
65
- end
66
-
67
- def collection_serializer
68
- Spree::V2::Tenant::VoteSerializer
69
- end
70
-
71
- # {
72
- # "contestant_id": 1,
73
- # "vote": {
74
- # "quantity": 1,
75
- # "channel": "mobile"
76
- # },
77
- # "device": {
78
- # "fingerprint": "fp-xyz",
79
- # "identifier": "device-abc",
80
- # "platform": "android"
81
- # }
82
- # }
83
- def vote_params
84
- params.require(:vote).permit(:quantity, :channel)
85
- end
86
-
87
- def device_params
88
- params.require(:device).permit(:fingerprint, :identifier, :platform)
89
- end
90
- end
91
- end
92
- end
93
- end
94
- end
@@ -1,40 +0,0 @@
1
- module Spree
2
- module Api
3
- module V2
4
- module Tenant
5
- class VotingContestantsController < BaseController
6
- before_action :load_voting_session, only: %i[index]
7
-
8
- # override
9
- def collection
10
- @collection ||= @voting_session
11
- .voting_contestants
12
- .includes(show_contestant: :show_contestant_images)
13
- .order(:id)
14
- end
15
-
16
- # override
17
- def collection_serializer
18
- Spree::V2::Tenant::VotingContestantSerializer
19
- end
20
-
21
- private
22
-
23
- # override
24
- def model_class
25
- SpreeCmCommissioner::VotingSession
26
- end
27
-
28
- # override
29
- def scope
30
- current_vendor.voting_sessions.includes(:episode)
31
- end
32
-
33
- def load_voting_session
34
- @voting_session = scope.find(params[:voting_session_id])
35
- end
36
- end
37
- end
38
- end
39
- end
40
- end
@@ -1,41 +0,0 @@
1
- module Spree
2
- module Api
3
- module V2
4
- module Tenant
5
- class VotingCreditTransactionsController < BaseController
6
- before_action :require_spree_current_user
7
-
8
- def index
9
- render_serialized_payload do
10
- serialize_collection(collection)
11
- end
12
- end
13
-
14
- private
15
-
16
- def collection
17
- @collection ||= scope.page(params[:page])
18
- .per(params[:per_page])
19
- end
20
-
21
- def scope
22
- scope = spree_current_user.voting_credit_transactions
23
- .includes(:vote_credit, :originator)
24
- .order(created_at: :desc)
25
-
26
- scope = scope.by_action(params[:actions].split(',')) if params[:actions].present?
27
- scope
28
- end
29
-
30
- def model_class
31
- SpreeCmCommissioner::VotingCreditTransaction
32
- end
33
-
34
- def collection_serializer
35
- Spree::V2::Tenant::VotingCreditTransactionSerializer
36
- end
37
- end
38
- end
39
- end
40
- end
41
- end
@@ -1,31 +0,0 @@
1
- module Spree
2
- module Api
3
- module V2
4
- module Tenant
5
- class VotingCreditsController < BaseController
6
- before_action :require_spree_current_user
7
-
8
- def index
9
- render_serialized_payload do
10
- serialize_resource(voting_credit)
11
- end
12
- end
13
-
14
- private
15
-
16
- def voting_credit
17
- spree_current_user.voting_credits.active.eligible(load_voting_session).first
18
- end
19
-
20
- def load_voting_session
21
- @voting_session ||= SpreeCmCommissioner::VotingSession.find(params[:voting_session_id])
22
- end
23
-
24
- def resource_serializer
25
- Spree::V2::Tenant::VotingCreditSerializer
26
- end
27
- end
28
- end
29
- end
30
- end
31
- end
@@ -1,9 +0,0 @@
1
- module SpreeCmCommissioner
2
- class VoteFraudEventJob < ApplicationJob
3
- queue_as :default
4
-
5
- def perform(options = {})
6
- SpreeCmCommissioner::VoteFraudEvent.create!(options)
7
- end
8
- end
9
- end
@@ -1,10 +0,0 @@
1
- module SpreeCmCommissioner
2
- class VotingCreditAllocationJob < ApplicationUniqueJob
3
- def perform(options = {})
4
- order = Spree::Order.find_by(id: options[:order_id])
5
- return if order.nil?
6
-
7
- SpreeCmCommissioner::VotingCredits::Allocate.new(order).call
8
- end
9
- end
10
- end
@@ -1,10 +0,0 @@
1
- module SpreeCmCommissioner
2
- class VotingCreditDeAllocationJob < ApplicationUniqueJob
3
- def perform(options = {})
4
- order = Spree::Order.find_by(id: options[:order_id])
5
- return if order.nil?
6
-
7
- SpreeCmCommissioner::VotingCredits::DeAllocate.new(order).call
8
- end
9
- end
10
- end
@@ -1,36 +0,0 @@
1
- # Reconciles Redis vote counters against cm_votes for a specific voting session.
2
- #
3
- # Created automatically by VoteProcessor when Redis is unavailable during a vote —
4
- # VoteProcessor skips async_execute (Sidekiq also needs Redis) and just creates
5
- # the DB row so OrchestrateJob's cron can pick it up once Redis recovers.
6
- #
7
- # `maintain` runs three steps in order:
8
- # 1. RebuildFromDb — overwrites Redis counters with DB totals (source of truth)
9
- # 2. AuditCounters — logs any remaining mismatches between Redis and DB
10
- # 3. SnapshotToDb — writes final aggregates to cm_voting_contestants and cm_voting_session_stats
11
- #
12
- # maintainable: SpreeCmCommissioner::VotingSession
13
- #
14
- # Trigger on-demand:
15
- # MaintenanceTasks::VotingSession.create!(maintainable: session).async_execute
16
- module SpreeCmCommissioner
17
- module MaintenanceTasks
18
- class VotingSession < MaintenanceTask
19
- def maintain
20
- ttl = rebuild_ttl
21
- SpreeCmCommissioner::VoteCounters::RebuildFromDb.call(voting_session_id: maintainable.id, ttl: ttl)
22
- SpreeCmCommissioner::VoteCounters::AuditCounters.call(voting_session_id: maintainable.id)
23
- SpreeCmCommissioner::VoteCounters::SnapshotToDb.call(voting_session_id: maintainable.id)
24
- end
25
-
26
- # For closed sessions use the fixed 24h constant — closes_at is in the past
27
- # so the dynamic formula would produce a TTL shorter than intended.
28
- # For active sessions use closes_at + 24h buffer (same formula as Increment).
29
- def rebuild_ttl
30
- return SpreeCmCommissioner::VoteCounters::Base::REDIS_KEY_TTL if maintainable.closed?
31
-
32
- [(maintainable.closes_at - Time.current).to_i + 1.day.to_i, 1].max
33
- end
34
- end
35
- end
36
- end
@@ -1,8 +0,0 @@
1
- module SpreeCmCommissioner
2
- class PreviewRole < Base
3
- belongs_to :previewable, polymorphic: true, optional: false
4
- belongs_to :role, class_name: 'Spree::Role', optional: false
5
-
6
- validates :role_id, uniqueness: { scope: %i[previewable_type previewable_id] }
7
- end
8
- end
@@ -1,8 +0,0 @@
1
- module SpreeCmCommissioner
2
- module RoleUserDecorator
3
- end
4
- end
5
-
6
- unless Spree::RoleUser.included_modules.include?(SpreeCmCommissioner::RoleUserDecorator)
7
- Spree::RoleUser.prepend SpreeCmCommissioner::RoleUserDecorator
8
- end