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.
- checksums.yaml +4 -4
- data/.gitignore +0 -4
- data/Gemfile.lock +1 -1
- data/app/controllers/spree/admin/homepage_section_controller.rb +1 -4
- data/app/controllers/spree/admin/taxons_controller_decorator.rb +0 -19
- data/app/controllers/spree/api/v2/storefront/homepage_sections_controller.rb +0 -1
- data/app/controllers/spree/api/v2/tenant/base_controller.rb +0 -4
- data/app/controllers/spree/api/v2/tenant/homepage_sections_controller.rb +0 -1
- data/app/controllers/spree/api/v2/tenant/products_controller.rb +1 -1
- data/app/controllers/spree/api/v2/tenant/taxons_controller.rb +1 -1
- data/app/controllers/spree_cm_commissioner/admin/products_controller_decorator.rb +0 -19
- data/app/finders/spree_cm_commissioner/events/find_matches.rb +0 -1
- data/app/helpers/spree_cm_commissioner/admin/homepage_segment_helper.rb +0 -2
- data/app/models/concerns/spree_cm_commissioner/homepage_section_bitwise.rb +1 -2
- data/app/models/concerns/spree_cm_commissioner/option_type_attr_type.rb +1 -2
- data/app/models/concerns/spree_cm_commissioner/order_state_machine.rb +0 -10
- data/app/models/concerns/spree_cm_commissioner/product_type.rb +1 -1
- data/app/models/spree_cm_commissioner/product_decorator.rb +0 -39
- data/app/models/spree_cm_commissioner/role_decorator.rb +1 -4
- data/app/models/spree_cm_commissioner/taxon_decorator.rb +0 -15
- data/app/models/spree_cm_commissioner/taxonomy_decorator.rb +1 -10
- data/app/models/spree_cm_commissioner/tenant.rb +0 -9
- data/app/models/spree_cm_commissioner/user_decorator.rb +0 -5
- data/app/models/spree_cm_commissioner/variant_options.rb +0 -4
- data/app/models/spree_cm_commissioner/vendor_decorator.rb +0 -4
- data/app/serializers/spree/v2/storefront/homepage_section_serializer.rb +1 -1
- data/app/serializers/spree/v2/storefront/product_serializer_decorator.rb +1 -1
- data/app/serializers/spree/v2/storefront/role_serializer.rb +1 -1
- data/app/serializers/spree/v2/storefront/taxon_serializer_decorator.rb +1 -2
- data/app/serializers/spree/v2/tenant/homepage_section_serializer.rb +1 -1
- data/app/serializers/spree/v2/tenant/role_serializer.rb +1 -1
- data/app/services/spree_cm_commissioner/api_caches/invalidate.rb +0 -12
- data/app/views/spree/admin/homepage_section/_form.html.erb +0 -5
- data/config/initializers/spree_permitted_attributes.rb +0 -8
- data/config/locales/en.yml +0 -14
- data/config/locales/km.yml +0 -10
- data/config/routes.rb +0 -26
- data/lib/spree_cm_commissioner/version.rb +1 -1
- data/lib/spree_cm_commissioner.rb +1 -7
- data/spree_cm_commissioner.gemspec +1 -1
- metadata +4 -116
- data/app/controllers/spree/api/v2/storefront/preview_products_controller.rb +0 -48
- data/app/controllers/spree/api/v2/storefront/preview_sections_controller.rb +0 -27
- data/app/controllers/spree/api/v2/storefront/preview_taxons_controller.rb +0 -18
- data/app/controllers/spree/api/v2/storefront/products_controller_decorator.rb +0 -15
- data/app/controllers/spree/api/v2/storefront/taxons_controller_decorator.rb +0 -15
- data/app/controllers/spree/api/v2/tenant/free_vote_claims_controller.rb +0 -37
- data/app/controllers/spree/api/v2/tenant/preview_products_controller.rb +0 -47
- data/app/controllers/spree/api/v2/tenant/preview_sections_controller.rb +0 -26
- data/app/controllers/spree/api/v2/tenant/preview_shows_controller.rb +0 -19
- data/app/controllers/spree/api/v2/tenant/preview_taxons_controller.rb +0 -19
- data/app/controllers/spree/api/v2/tenant/show_contestants_controller.rb +0 -52
- data/app/controllers/spree/api/v2/tenant/show_elimination_sessions_controller.rb +0 -57
- data/app/controllers/spree/api/v2/tenant/show_people_controller.rb +0 -49
- data/app/controllers/spree/api/v2/tenant/show_person_assignments_controller.rb +0 -36
- data/app/controllers/spree/api/v2/tenant/shows_controller.rb +0 -34
- data/app/controllers/spree/api/v2/tenant/votes_controller.rb +0 -94
- data/app/controllers/spree/api/v2/tenant/voting_contestants_controller.rb +0 -40
- data/app/controllers/spree/api/v2/tenant/voting_credit_transactions_controller.rb +0 -41
- data/app/controllers/spree/api/v2/tenant/voting_credits_controller.rb +0 -31
- data/app/jobs/spree_cm_commissioner/vote_fraud_event_job.rb +0 -9
- data/app/jobs/spree_cm_commissioner/voting_credit_allocation_job.rb +0 -10
- data/app/jobs/spree_cm_commissioner/voting_credit_de_allocation_job.rb +0 -10
- data/app/models/spree_cm_commissioner/maintenance_tasks/voting_session.rb +0 -36
- data/app/models/spree_cm_commissioner/preview_role.rb +0 -8
- data/app/models/spree_cm_commissioner/role_user_decorator.rb +0 -8
- data/app/models/spree_cm_commissioner/show.rb +0 -159
- data/app/models/spree_cm_commissioner/show_contestant.rb +0 -39
- data/app/models/spree_cm_commissioner/show_contestant_image.rb +0 -11
- data/app/models/spree_cm_commissioner/show_contestant_video.rb +0 -15
- data/app/models/spree_cm_commissioner/show_episode.rb +0 -135
- data/app/models/spree_cm_commissioner/show_person.rb +0 -15
- data/app/models/spree_cm_commissioner/show_person_assignment.rb +0 -20
- data/app/models/spree_cm_commissioner/show_person_image.rb +0 -11
- data/app/models/spree_cm_commissioner/vote.rb +0 -16
- data/app/models/spree_cm_commissioner/vote_fraud_event.rb +0 -19
- data/app/models/spree_cm_commissioner/voting_contestant.rb +0 -46
- data/app/models/spree_cm_commissioner/voting_credit.rb +0 -72
- data/app/models/spree_cm_commissioner/voting_credit_transaction.rb +0 -55
- data/app/models/spree_cm_commissioner/voting_session.rb +0 -223
- data/app/models/spree_cm_commissioner/voting_session_stat.rb +0 -8
- data/app/overrides/spree/admin/products/_form/preview_checkbox.html.erb.deface +0 -9
- data/app/overrides/spree/admin/taxons/_form/preview_checkbox.html.erb.deface +0 -7
- data/app/serializers/spree/v2/tenant/show_contestant_serializer.rb +0 -21
- data/app/serializers/spree/v2/tenant/show_episode_serializer.rb +0 -17
- data/app/serializers/spree/v2/tenant/show_person_assignment_serializer.rb +0 -16
- data/app/serializers/spree/v2/tenant/show_person_serializer.rb +0 -13
- data/app/serializers/spree/v2/tenant/show_serializer.rb +0 -26
- data/app/serializers/spree/v2/tenant/video_serializer.rb +0 -9
- data/app/serializers/spree/v2/tenant/vote_serializer.rb +0 -14
- data/app/serializers/spree/v2/tenant/voting_contestant_serializer.rb +0 -22
- data/app/serializers/spree/v2/tenant/voting_credit_serializer.rb +0 -10
- data/app/serializers/spree/v2/tenant/voting_credit_transaction_serializer.rb +0 -14
- data/app/serializers/spree/v2/tenant/voting_session_serializer.rb +0 -18
- data/app/services/spree_cm_commissioner/fraud_check.rb +0 -279
- data/app/services/spree_cm_commissioner/show_contestants/normalize_video_highlights.rb +0 -57
- data/app/services/spree_cm_commissioner/url_embed/youtube_embed.rb +0 -44
- data/app/services/spree_cm_commissioner/vote_counters/audit_counters.rb +0 -43
- data/app/services/spree_cm_commissioner/vote_counters/base.rb +0 -31
- data/app/services/spree_cm_commissioner/vote_counters/increment.rb +0 -44
- data/app/services/spree_cm_commissioner/vote_counters/per_contestant_counter.rb +0 -68
- data/app/services/spree_cm_commissioner/vote_counters/rebuild_from_db.rb +0 -70
- data/app/services/spree_cm_commissioner/vote_counters/snapshot_to_db.rb +0 -113
- data/app/services/spree_cm_commissioner/vote_credit_deductor.rb +0 -68
- data/app/services/spree_cm_commissioner/vote_package/create.rb +0 -145
- data/app/services/spree_cm_commissioner/vote_package/update.rb +0 -91
- data/app/services/spree_cm_commissioner/vote_processor.rb +0 -144
- data/app/services/spree_cm_commissioner/voting_contestants/advancer.rb +0 -334
- data/app/services/spree_cm_commissioner/voting_contestants/assigner.rb +0 -32
- data/app/services/spree_cm_commissioner/voting_contestants/bulk_updater.rb +0 -106
- data/app/services/spree_cm_commissioner/voting_credits/allocate.rb +0 -77
- data/app/services/spree_cm_commissioner/voting_credits/claim_free_votes.rb +0 -119
- data/app/services/spree_cm_commissioner/voting_credits/credit_calculator.rb +0 -35
- data/app/services/spree_cm_commissioner/voting_credits/de_allocate.rb +0 -87
- data/app/services/spree_cm_commissioner/voting_leaderboards/calculate_score.rb +0 -74
- data/app/services/spree_cm_commissioner/voting_sessions/finalize.rb +0 -66
- data/db/migrate/20260309230148_create_cm_show_people.rb +0 -14
- data/db/migrate/20260309230149_create_cm_show_people_assignments.rb +0 -16
- data/db/migrate/20260310082711_create_cm_show_contestants.rb +0 -28
- data/db/migrate/20260310082720_create_cm_voting_sessions.rb +0 -21
- data/db/migrate/20260310082721_create_cm_voting_contestants.rb +0 -23
- data/db/migrate/20260310082734_add_voting_fields_to_spree_taxons.rb +0 -9
- data/db/migrate/20260310082735_add_type_to_spree_products.rb +0 -6
- data/db/migrate/20260310082749_create_cm_voting_credits.rb +0 -27
- data/db/migrate/20260326080200_create_cm_voting_credit_transactions.rb +0 -27
- data/db/migrate/20260330160000_create_cm_votes.rb +0 -25
- data/db/migrate/20260401072500_add_advanced_from_to_cm_voting_contestants.rb +0 -7
- data/db/migrate/20260402000001_add_voting_credit_scope_to_spree_taxons.rb +0 -6
- data/db/migrate/20260402000002_rename_scopeable_to_votable_in_cm_voting_credits.rb +0 -12
- data/db/migrate/20260403070000_add_name_to_cm_voting_sessions.rb +0 -5
- data/db/migrate/20260406000001_add_vendor_id_to_voting_tables.rb +0 -6
- data/db/migrate/20260406000001_rename_votes_remaining_to_amount_in_cm_voting_credits.rb +0 -11
- data/db/migrate/20260408085255_add_show_id_and_vendor_id_to_cm_voting_sessions.rb +0 -9
- data/db/migrate/20260420000001_rename_type_to_credit_type_in_cm_voting_credits.rb +0 -25
- data/db/migrate/20260422000001_create_cm_vote_fraud_events.rb +0 -23
- data/db/migrate/20260423000001_add_preview_to_taxons_products_and_sections.rb +0 -11
- data/db/migrate/20260423000002_create_preview_roles.rb +0 -24
- data/db/migrate/20260515120000_add_public_metadata_to_cm_voting_sessions.rb +0 -5
- data/db/migrate/20260518090920_add_unique_voter_count_to_voting_contestants.rb +0 -5
- data/db/migrate/20260518094322_create_cm_voting_session_stats.rb +0 -17
- data/db/migrate/20260520000001_add_scoring_model_to_cm_voting_sessions.rb +0 -5
- data/db/migrate/20260520000001_optimize_cm_votes_indexes.rb +0 -22
- data/db/migrate/20260525042257_add_vote_number_to_cm_voting_contestants.rb +0 -18
- data/db/migrate/20260527035430_add_confirmed_rank_to_cm_voting_contestants.rb +0 -5
- data/db/migrate/20260527062005_add_eliminated_at_to_cm_show_contestants.rb +0 -5
- data/docs/sql/jsonb_query_guide.md +0 -57
- data/lib/spree_cm_commissioner/test_helper/factories/show_episode_factory.rb +0 -12
- data/lib/spree_cm_commissioner/test_helper/factories/show_factory.rb +0 -120
- data/lib/spree_cm_commissioner/test_helper/factories/vote_credit_factory.rb +0 -37
- data/lib/spree_cm_commissioner/test_helper/factories/vote_factory.rb +0 -28
- data/lib/spree_cm_commissioner/test_helper/factories/voting_credit_transaction_factory.rb +0 -11
- 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,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
|