spree_cm_commissioner 2.8.15 → 2.8.16

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 (350) hide show
  1. checksums.yaml +4 -4
  2. data/.env.example +0 -4
  3. data/.gitignore +0 -6
  4. data/Gemfile.lock +2 -2
  5. data/app/controllers/concerns/spree_cm_commissioner/content_cachable.rb +0 -10
  6. data/app/controllers/concerns/spree_cm_commissioner/order_concern.rb +0 -5
  7. data/app/controllers/concerns/spree_cm_commissioner/turnstile_protectable.rb +7 -9
  8. data/app/controllers/spree/admin/guests_controller.rb +2 -4
  9. data/app/controllers/spree/admin/homepage_section_controller.rb +1 -4
  10. data/app/controllers/spree/admin/taxons_controller_decorator.rb +0 -19
  11. data/app/controllers/spree/admin/users_controller_decorator.rb +0 -18
  12. data/app/controllers/spree/api/chatrace/guests_controller.rb +1 -1
  13. data/app/controllers/spree/api/v2/operator/event_charts_controller.rb +0 -1
  14. data/app/controllers/spree/api/v2/operator/guest_json_gzips_controller.rb +4 -14
  15. data/app/controllers/spree/api/v2/storefront/account/guest_dynamic_fields_controller.rb +48 -19
  16. data/app/controllers/spree/api/v2/storefront/account/mark_guest_info_complete_controller.rb +2 -2
  17. data/app/controllers/spree/api/v2/storefront/account/orders_controller_decorator.rb +15 -5
  18. data/app/controllers/spree/api/v2/storefront/account_checker_controller.rb +0 -4
  19. data/app/controllers/spree/api/v2/storefront/guests_controller.rb +9 -10
  20. data/app/controllers/spree/api/v2/storefront/homepage_sections_controller.rb +0 -1
  21. data/app/controllers/spree/api/v2/storefront/order_histories_controller.rb +1 -0
  22. data/app/controllers/spree/api/v2/storefront/saved_guests_controller.rb +77 -0
  23. data/app/controllers/spree/api/v2/storefront/waiting_room_sessions_controller.rb +1 -8
  24. data/app/controllers/spree/api/v2/tenant/account/orders_controller.rb +1 -1
  25. data/app/controllers/spree/api/v2/tenant/base_controller.rb +0 -4
  26. data/app/controllers/spree/api/v2/tenant/guests_controller.rb +21 -11
  27. data/app/controllers/spree/api/v2/tenant/homepage_sections_controller.rb +0 -1
  28. data/app/controllers/spree/api/v2/tenant/order_histories_controller.rb +1 -2
  29. data/app/controllers/spree/api/v2/tenant/products_controller.rb +1 -1
  30. data/app/controllers/spree/api/v2/tenant/taxons_controller.rb +1 -1
  31. data/app/controllers/spree/api/v2/tenant/waiting_room_sessions_controller.rb +1 -8
  32. data/app/controllers/spree_cm_commissioner/admin/orders_controller_decorator.rb +0 -9
  33. data/app/controllers/spree_cm_commissioner/admin/products_controller_decorator.rb +0 -19
  34. data/app/controllers/spree_cm_commissioner/admin/variants_controller_decorator.rb +0 -17
  35. data/app/controllers/spree_cm_commissioner/api/v2/storefront/checkout_controller_decorator.rb +3 -3
  36. data/app/finders/spree_cm_commissioner/events/find_matches.rb +0 -1
  37. data/app/finders/spree_cm_commissioner/routes/find.rb +1 -1
  38. data/app/helpers/spree_cm_commissioner/admin/homepage_segment_helper.rb +0 -2
  39. data/app/interactors/spree_cm_commissioner/create_ticket.rb +3 -7
  40. data/app/interactors/spree_cm_commissioner/guest_dynamic_field_notification_sender.rb +11 -0
  41. data/app/interactors/spree_cm_commissioner/guest_dynamic_fields_manager.rb +33 -0
  42. data/app/interactors/spree_cm_commissioner/host_matcher.rb +5 -6
  43. data/app/interactors/spree_cm_commissioner/turnstile_token_validator.rb +13 -43
  44. data/app/interactors/spree_cm_commissioner/user_id_token_authenticator.rb +5 -2
  45. data/app/interactors/spree_cm_commissioner/user_password_authenticator.rb +1 -23
  46. data/app/interactors/spree_cm_commissioner/waiting_guests_caller.rb +2 -11
  47. data/app/interactors/spree_cm_commissioner/waiting_room_session_creator.rb +6 -31
  48. data/app/mailers/spree/order_mailer_decorator.rb +0 -2
  49. data/app/models/concerns/spree_cm_commissioner/event_metadata.rb +2 -17
  50. data/app/models/concerns/spree_cm_commissioner/homepage_section_bitwise.rb +1 -2
  51. data/app/models/concerns/spree_cm_commissioner/kyc_bitwise.rb +0 -17
  52. data/app/models/concerns/spree_cm_commissioner/line_item_durationable.rb +0 -4
  53. data/app/models/concerns/spree_cm_commissioner/line_item_guests_concern.rb +1 -1
  54. data/app/models/concerns/spree_cm_commissioner/line_items_filter_scope.rb +3 -5
  55. data/app/models/concerns/spree_cm_commissioner/option_type_attr_type.rb +2 -2
  56. data/app/models/concerns/spree_cm_commissioner/order_scopes.rb +0 -5
  57. data/app/models/concerns/spree_cm_commissioner/order_state_machine.rb +30 -35
  58. data/app/models/concerns/spree_cm_commissioner/product_delegation.rb +0 -2
  59. data/app/models/concerns/spree_cm_commissioner/product_type.rb +1 -1
  60. data/app/models/concerns/spree_cm_commissioner/store_metadata.rb +0 -3
  61. data/app/models/concerns/spree_cm_commissioner/store_preference.rb +0 -2
  62. data/app/models/concerns/spree_cm_commissioner/taxon_kind.rb +1 -3
  63. data/app/models/concerns/spree_cm_commissioner/tenant_preference.rb +0 -2
  64. data/app/models/concerns/spree_cm_commissioner/variant_options_concern.rb +1 -0
  65. data/app/models/spree_cm_commissioner/check_in_session.rb +0 -36
  66. data/app/models/spree_cm_commissioner/dynamic_field.rb +0 -12
  67. data/app/models/spree_cm_commissioner/exports/operator_guest_json_gzip.rb +1 -26
  68. data/app/models/spree_cm_commissioner/guest.rb +144 -5
  69. data/app/models/spree_cm_commissioner/guest_dynamic_field.rb +71 -43
  70. data/app/models/spree_cm_commissioner/homepage_section_relatable.rb +0 -25
  71. data/app/models/spree_cm_commissioner/import.rb +1 -1
  72. data/app/models/spree_cm_commissioner/line_item_decorator.rb +3 -30
  73. data/app/models/spree_cm_commissioner/maintenance_tasks/event.rb +1 -9
  74. data/app/models/spree_cm_commissioner/order_decorator.rb +31 -22
  75. data/app/models/spree_cm_commissioner/payment_method_decorator.rb +0 -2
  76. data/app/models/spree_cm_commissioner/pricing_model_route.rb +0 -8
  77. data/app/models/spree_cm_commissioner/product_decorator.rb +22 -54
  78. data/app/models/spree_cm_commissioner/product_dynamic_field.rb +0 -17
  79. data/app/models/spree_cm_commissioner/role_decorator.rb +4 -55
  80. data/app/models/spree_cm_commissioner/seat_layout.rb +4 -12
  81. data/app/models/spree_cm_commissioner/taxon_decorator.rb +0 -25
  82. data/app/models/spree_cm_commissioner/taxonomy_decorator.rb +1 -19
  83. data/app/models/spree_cm_commissioner/tenant.rb +6 -26
  84. data/app/models/spree_cm_commissioner/trip.rb +1 -18
  85. data/app/models/spree_cm_commissioner/user_decorator.rb +1 -72
  86. data/app/models/spree_cm_commissioner/variant_decorator.rb +0 -4
  87. data/app/models/spree_cm_commissioner/variant_options.rb +4 -4
  88. data/app/models/spree_cm_commissioner/vehicle_type.rb +0 -1
  89. data/app/models/spree_cm_commissioner/vendor_decorator.rb +0 -5
  90. data/app/models/spree_cm_commissioner/waiting_room_session.rb +0 -14
  91. data/app/queries/spree_cm_commissioner/event_chart_queries.rb +9 -25
  92. data/app/queries/spree_cm_commissioner/guest_searcher_query.rb +3 -16
  93. data/app/queries/spree_cm_commissioner/multi_leg_trips_query.rb +0 -7
  94. data/app/queries/spree_cm_commissioner/pie_chart_event_aggregator_queries.rb +2 -3
  95. data/app/queries/spree_cm_commissioner/single_leg_trips_query.rb +1 -2
  96. data/app/serializers/spree/v2/storefront/homepage_section_serializer.rb +1 -1
  97. data/app/serializers/spree/v2/storefront/line_item_serializer_decorator.rb +2 -2
  98. data/app/serializers/spree/v2/storefront/order_serializer_decorator.rb +63 -0
  99. data/app/serializers/spree/v2/storefront/product_serializer_decorator.rb +1 -6
  100. data/app/serializers/spree/v2/storefront/role_serializer.rb +1 -1
  101. data/app/serializers/spree/v2/storefront/taxon_serializer_decorator.rb +1 -3
  102. data/app/serializers/spree/v2/storefront/user_serializer_decorator.rb +2 -5
  103. data/app/serializers/spree/v2/storefront/variant_serializer_decorator.rb +1 -2
  104. data/app/serializers/spree/v2/tenant/homepage_section_serializer.rb +1 -1
  105. data/app/serializers/spree/v2/tenant/product_serializer.rb +0 -5
  106. data/app/serializers/spree/v2/tenant/role_serializer.rb +1 -1
  107. data/app/serializers/spree/v2/tenant/user_serializer.rb +1 -1
  108. data/app/serializers/spree/v2/tenant/variant_serializer.rb +1 -2
  109. data/app/serializers/spree_cm_commissioner/v2/storefront/cart_serializer_decorator.rb +0 -1
  110. data/app/serializers/spree_cm_commissioner/v2/storefront/guest_minimal_serializer.rb +30 -0
  111. data/app/serializers/spree_cm_commissioner/v2/storefront/guest_serializer.rb +6 -3
  112. data/app/serializers/spree_cm_commissioner/v2/storefront/line_item_minimal_serializer.rb +57 -0
  113. data/app/serializers/spree_cm_commissioner/v2/storefront/ticket_transfer_minimal_serializer.rb +17 -0
  114. data/app/serializers/spree_cm_commissioner/v2/storefront/ticket_transfer_serializer.rb +2 -2
  115. data/app/serializers/spree_cm_commissioner/v2/storefront/trip_result_serializer.rb +2 -2
  116. data/app/serializers/spree_cm_commissioner/v2/storefront/trip_serializer.rb +1 -3
  117. data/app/services/spree_cm_commissioner/api_caches/invalidate.rb +3 -36
  118. data/app/services/spree_cm_commissioner/{guests/create.rb → cart/create_guest.rb} +10 -12
  119. data/app/services/spree_cm_commissioner/check_ins/create_bulk.rb +6 -10
  120. data/app/services/spree_cm_commissioner/inventory_holds/validate_limits.rb +3 -8
  121. data/app/services/spree_cm_commissioner/operator_guest_json_gzips/create.rb +7 -14
  122. data/app/services/spree_cm_commissioner/organizer/export_guest_csv_service.rb +11 -12
  123. data/app/services/spree_cm_commissioner/pricing_models/create_with_rule_groups.rb +3 -9
  124. data/app/services/spree_cm_commissioner/pricing_models/preview.rb +6 -49
  125. data/app/services/spree_cm_commissioner/pricing_models/update_with_rule_groups.rb +7 -10
  126. data/app/services/spree_cm_commissioner/trips/update_single_leg.rb +1 -6
  127. data/app/services/spree_cm_commissioner/update_guest_service.rb +129 -0
  128. data/app/services/spree_cm_commissioner/user_authenticator.rb +1 -22
  129. data/app/services/spree_cm_commissioner/users/incomplete_guest_checker_service.rb +34 -0
  130. data/app/views/spree/admin/featured_trips/index.html.erb +1 -1
  131. data/app/views/spree/admin/guests/_form.html.erb +0 -37
  132. data/app/views/spree/admin/homepage_section/_form.html.erb +0 -5
  133. data/app/views/spree/admin/shared/_system_tabs.html.erb +0 -7
  134. data/app/views/spree/admin/tenants/_form.html.erb +1 -40
  135. data/config/initializers/doorkeeper.rb +6 -10
  136. data/config/initializers/spree_permitted_attributes.rb +0 -59
  137. data/config/locales/en.yml +18 -180
  138. data/config/locales/km.yml +5 -73
  139. data/config/routes.rb +1 -56
  140. data/lib/spree_cm_commissioner/test_helper/factories/option_type_factory.rb +6 -0
  141. data/lib/spree_cm_commissioner/test_helper/factories/vehicle_factory.rb +1 -1
  142. data/lib/spree_cm_commissioner/trip_result.rb +1 -3
  143. data/lib/spree_cm_commissioner/version.rb +1 -1
  144. data/lib/spree_cm_commissioner.rb +1 -7
  145. data/spree_cm_commissioner.gemspec +1 -1
  146. metadata +12 -208
  147. data/app/controllers/concerns/spree_cm_commissioner/load_test_account_management.rb +0 -80
  148. data/app/controllers/concerns/spree_cm_commissioner/load_test_account_scope.rb +0 -39
  149. data/app/controllers/concerns/spree_cm_commissioner/load_test_bypassable.rb +0 -29
  150. data/app/controllers/concerns/spree_cm_commissioner/load_test_login_token_generation.rb +0 -53
  151. data/app/controllers/spree/admin/system/load_test_accounts_controller.rb +0 -24
  152. data/app/controllers/spree/admin/system/load_test_flows_controller.rb +0 -11
  153. data/app/controllers/spree/admin/system/load_test_login_tokens_controller.rb +0 -16
  154. data/app/controllers/spree/admin/system/load_testing_controller.rb +0 -9
  155. data/app/controllers/spree/api/v2/storefront/account/saved_guests_controller.rb +0 -65
  156. data/app/controllers/spree/api/v2/storefront/draft_orders_controller.rb +0 -52
  157. data/app/controllers/spree/api/v2/storefront/payment_methods_controller.rb +0 -40
  158. data/app/controllers/spree/api/v2/storefront/preview_products_controller.rb +0 -48
  159. data/app/controllers/spree/api/v2/storefront/preview_sections_controller.rb +0 -21
  160. data/app/controllers/spree/api/v2/storefront/preview_taxons_controller.rb +0 -18
  161. data/app/controllers/spree/api/v2/storefront/products_controller_decorator.rb +0 -15
  162. data/app/controllers/spree/api/v2/storefront/taxons_controller_decorator.rb +0 -15
  163. data/app/controllers/spree/api/v2/storefront/telegram_oauth_tokens_controller.rb +0 -61
  164. data/app/controllers/spree/api/v2/tenant/account/saved_guests_controller.rb +0 -70
  165. data/app/controllers/spree/api/v2/tenant/ad_campaigns_controller.rb +0 -25
  166. data/app/controllers/spree/api/v2/tenant/draft_orders_controller.rb +0 -50
  167. data/app/controllers/spree/api/v2/tenant/episodes_controller.rb +0 -40
  168. data/app/controllers/spree/api/v2/tenant/my_votes_controller.rb +0 -51
  169. data/app/controllers/spree/api/v2/tenant/payment_methods_controller.rb +0 -54
  170. data/app/controllers/spree/api/v2/tenant/preview_products_controller.rb +0 -47
  171. data/app/controllers/spree/api/v2/tenant/preview_sections_controller.rb +0 -20
  172. data/app/controllers/spree/api/v2/tenant/preview_shows_controller.rb +0 -19
  173. data/app/controllers/spree/api/v2/tenant/preview_taxons_controller.rb +0 -19
  174. data/app/controllers/spree/api/v2/tenant/show_contestants_controller.rb +0 -52
  175. data/app/controllers/spree/api/v2/tenant/show_elimination_sessions_controller.rb +0 -57
  176. data/app/controllers/spree/api/v2/tenant/show_people_controller.rb +0 -46
  177. data/app/controllers/spree/api/v2/tenant/show_person_assignments_controller.rb +0 -39
  178. data/app/controllers/spree/api/v2/tenant/shows_controller.rb +0 -36
  179. data/app/controllers/spree/api/v2/tenant/vote_packages_controller.rb +0 -81
  180. data/app/controllers/spree/api/v2/tenant/votes_controller.rb +0 -94
  181. data/app/controllers/spree/api/v2/tenant/voting_contestants_controller.rb +0 -46
  182. data/app/controllers/spree/api/v2/tenant/voting_credit_transactions_controller.rb +0 -41
  183. data/app/controllers/spree/api/v2/tenant/voting_credits_controller.rb +0 -31
  184. data/app/finders/spree_cm_commissioner/payment_methods/find.rb +0 -59
  185. data/app/interactors/spree_cm_commissioner/telegram_oauth_id_token_provider.rb +0 -99
  186. data/app/interactors/spree_cm_commissioner/telegram_oauth_token_exchanger.rb +0 -71
  187. data/app/interactors/spree_cm_commissioner/user_telegram_oauth_authenticator.rb +0 -88
  188. data/app/jobs/spree_cm_commissioner/maintenance_tasks/guest_data_fill_stage_batch_job.rb +0 -28
  189. data/app/jobs/spree_cm_commissioner/show_contestants/import_job.rb +0 -9
  190. data/app/jobs/spree_cm_commissioner/vote_fraud_event_job.rb +0 -9
  191. data/app/jobs/spree_cm_commissioner/voting_credit_allocation_job.rb +0 -10
  192. data/app/jobs/spree_cm_commissioner/voting_credit_de_allocation_job.rb +0 -10
  193. data/app/models/concerns/spree_cm_commissioner/guest_data_fill_stage_concern.rb +0 -82
  194. data/app/models/concerns/spree_cm_commissioner/order_qr_codeable.rb +0 -39
  195. data/app/models/concerns/spree_cm_commissioner/purchase_limitable.rb +0 -59
  196. data/app/models/concerns/spree_cm_commissioner/voting_session_live_stream_concern.rb +0 -41
  197. data/app/models/spree_cm_commissioner/claim.rb +0 -27
  198. data/app/models/spree_cm_commissioner/current.rb +0 -11
  199. data/app/models/spree_cm_commissioner/imports/import_contestant.rb +0 -7
  200. data/app/models/spree_cm_commissioner/maintenance_tasks/guest_data_fill_stage.rb +0 -21
  201. data/app/models/spree_cm_commissioner/maintenance_tasks/voting_session.rb +0 -36
  202. data/app/models/spree_cm_commissioner/preview_role.rb +0 -8
  203. data/app/models/spree_cm_commissioner/request_guard.rb +0 -19
  204. data/app/models/spree_cm_commissioner/role_user_decorator.rb +0 -19
  205. data/app/models/spree_cm_commissioner/show.rb +0 -173
  206. data/app/models/spree_cm_commissioner/show_contestant.rb +0 -39
  207. data/app/models/spree_cm_commissioner/show_contestant_image.rb +0 -11
  208. data/app/models/spree_cm_commissioner/show_contestant_video.rb +0 -15
  209. data/app/models/spree_cm_commissioner/show_episode.rb +0 -124
  210. data/app/models/spree_cm_commissioner/show_person.rb +0 -19
  211. data/app/models/spree_cm_commissioner/show_person_assignment.rb +0 -21
  212. data/app/models/spree_cm_commissioner/show_person_image.rb +0 -11
  213. data/app/models/spree_cm_commissioner/vote.rb +0 -16
  214. data/app/models/spree_cm_commissioner/vote_fraud_event.rb +0 -20
  215. data/app/models/spree_cm_commissioner/voting_contestant.rb +0 -114
  216. data/app/models/spree_cm_commissioner/voting_credit.rb +0 -84
  217. data/app/models/spree_cm_commissioner/voting_credit_transaction.rb +0 -55
  218. data/app/models/spree_cm_commissioner/voting_session.rb +0 -217
  219. data/app/models/spree_cm_commissioner/voting_session_stat.rb +0 -8
  220. data/app/overrides/spree/admin/payment_methods/index/pagination.html.erb.deface +0 -3
  221. data/app/overrides/spree/admin/payment_methods/index/preserve_tab_in_search.html.erb.deface +0 -4
  222. data/app/overrides/spree/admin/products/_form/enable_social_sharing_email.html.erb.deface +0 -13
  223. data/app/overrides/spree/admin/products/_form/preview_checkbox.html.erb.deface +0 -9
  224. data/app/overrides/spree/admin/shared/_order_summary/internal_note.html.erb.deface +0 -23
  225. data/app/overrides/spree/admin/shared/_order_summary/internal_note_modal.html.erb.deface +0 -40
  226. data/app/overrides/spree/admin/stores/_form/telegram_auth.html.erb.deface +0 -73
  227. data/app/overrides/spree/admin/taxons/_form/preview_checkbox.html.erb.deface +0 -7
  228. data/app/overrides/spree/admin/variants/index/fixture_action.html.erb.deface +0 -9
  229. data/app/queries/spree_cm_commissioner/user_votes_per_contestant_query.rb +0 -48
  230. data/app/serializers/spree/v2/tenant/ad_campaign_serializer.rb +0 -13
  231. data/app/serializers/spree/v2/tenant/advertisement_serializer.rb +0 -11
  232. data/app/serializers/spree/v2/tenant/my_vote_serializer.rb +0 -19
  233. data/app/serializers/spree/v2/tenant/saved_guest_serializer.rb +0 -23
  234. data/app/serializers/spree/v2/tenant/show_contestant_serializer.rb +0 -21
  235. data/app/serializers/spree/v2/tenant/show_episode_serializer.rb +0 -12
  236. data/app/serializers/spree/v2/tenant/show_parent_serializer.rb +0 -13
  237. data/app/serializers/spree/v2/tenant/show_person_assignment_serializer.rb +0 -16
  238. data/app/serializers/spree/v2/tenant/show_person_serializer.rb +0 -13
  239. data/app/serializers/spree/v2/tenant/show_serializer.rb +0 -24
  240. data/app/serializers/spree/v2/tenant/video_serializer.rb +0 -9
  241. data/app/serializers/spree/v2/tenant/vote_package_serializer.rb +0 -15
  242. data/app/serializers/spree/v2/tenant/vote_serializer.rb +0 -14
  243. data/app/serializers/spree/v2/tenant/voting_contestant_serializer.rb +0 -25
  244. data/app/serializers/spree/v2/tenant/voting_credit_serializer.rb +0 -10
  245. data/app/serializers/spree/v2/tenant/voting_credit_transaction_serializer.rb +0 -14
  246. data/app/serializers/spree/v2/tenant/voting_session_serializer.rb +0 -21
  247. data/app/services/spree_cm_commissioner/draft_order/create.rb +0 -95
  248. data/app/services/spree_cm_commissioner/fraud_check.rb +0 -308
  249. data/app/services/spree_cm_commissioner/guests/refresh_data_fill_stage.rb +0 -20
  250. data/app/services/spree_cm_commissioner/guests/send_dynamic_field_notification.rb +0 -15
  251. data/app/services/spree_cm_commissioner/guests/update.rb +0 -68
  252. data/app/services/spree_cm_commissioner/imports/contestants/create.rb +0 -171
  253. data/app/services/spree_cm_commissioner/line_items/validate_purchase_limits.rb +0 -97
  254. data/app/services/spree_cm_commissioner/load_test/create_accounts.rb +0 -68
  255. data/app/services/spree_cm_commissioner/load_test/destroy_accounts.rb +0 -47
  256. data/app/services/spree_cm_commissioner/load_test/flow_registry.rb +0 -26
  257. data/app/services/spree_cm_commissioner/load_test/generate_booking_ticket_data.rb +0 -204
  258. data/app/services/spree_cm_commissioner/load_test/generate_voting_fixture_data.rb +0 -178
  259. data/app/services/spree_cm_commissioner/load_test/login_token.rb +0 -46
  260. data/app/services/spree_cm_commissioner/order/guests/update.rb +0 -53
  261. data/app/services/spree_cm_commissioner/show_contestants/normalize_video_highlights.rb +0 -61
  262. data/app/services/spree_cm_commissioner/show_persons/contestant_assigner.rb +0 -51
  263. data/app/services/spree_cm_commissioner/url_embed/youtube_embed.rb +0 -44
  264. data/app/services/spree_cm_commissioner/vote_counters/audit_counters.rb +0 -43
  265. data/app/services/spree_cm_commissioner/vote_counters/base.rb +0 -31
  266. data/app/services/spree_cm_commissioner/vote_counters/increment.rb +0 -44
  267. data/app/services/spree_cm_commissioner/vote_counters/per_contestant_counter.rb +0 -68
  268. data/app/services/spree_cm_commissioner/vote_counters/rebuild_from_db.rb +0 -70
  269. data/app/services/spree_cm_commissioner/vote_counters/snapshot_to_db.rb +0 -113
  270. data/app/services/spree_cm_commissioner/vote_credit_deductor.rb +0 -68
  271. data/app/services/spree_cm_commissioner/vote_package/create.rb +0 -150
  272. data/app/services/spree_cm_commissioner/vote_package/update.rb +0 -97
  273. data/app/services/spree_cm_commissioner/vote_processor.rb +0 -144
  274. data/app/services/spree_cm_commissioner/voting_contestants/advancer.rb +0 -342
  275. data/app/services/spree_cm_commissioner/voting_contestants/assigner.rb +0 -58
  276. data/app/services/spree_cm_commissioner/voting_contestants/bulk_updater.rb +0 -115
  277. data/app/services/spree_cm_commissioner/voting_credits/admin_grant.rb +0 -37
  278. data/app/services/spree_cm_commissioner/voting_credits/allocate.rb +0 -134
  279. data/app/services/spree_cm_commissioner/voting_credits/claimable_scope_resolver.rb +0 -64
  280. data/app/services/spree_cm_commissioner/voting_credits/credit_calculator.rb +0 -35
  281. data/app/services/spree_cm_commissioner/voting_credits/de_allocate.rb +0 -87
  282. data/app/services/spree_cm_commissioner/voting_leaderboards/calculate_score.rb +0 -67
  283. data/app/services/spree_cm_commissioner/voting_leaderboards/combined_result.rb +0 -190
  284. data/app/services/spree_cm_commissioner/voting_leaderboards/time_range_result.rb +0 -79
  285. data/app/services/spree_cm_commissioner/voting_sessions/finalize.rb +0 -105
  286. data/app/views/spree/admin/system/load_test_accounts/_login_tokens_modal.html.erb +0 -52
  287. data/app/views/spree/admin/system/load_test_accounts/index.html.erb +0 -175
  288. data/app/views/spree/admin/system/load_test_flows/index.html.erb +0 -66
  289. data/app/views/spree/admin/system/load_testing/index.html.erb +0 -25
  290. data/app/views/spree/admin/tenants/form/_telegram_auth.html.erb +0 -61
  291. data/app/views/spree/admin/variants/fixture.html.erb +0 -49
  292. data/config/load_test_flows/platform.yml +0 -25
  293. data/config/load_test_flows/tenant.yml +0 -93
  294. data/db/migrate/20260309230148_create_cm_show_people.rb +0 -14
  295. data/db/migrate/20260309230149_create_cm_show_people_assignments.rb +0 -16
  296. data/db/migrate/20260310082711_create_cm_show_contestants.rb +0 -28
  297. data/db/migrate/20260310082720_create_cm_voting_sessions.rb +0 -21
  298. data/db/migrate/20260310082721_create_cm_voting_contestants.rb +0 -23
  299. data/db/migrate/20260310082734_add_voting_fields_to_spree_taxons.rb +0 -9
  300. data/db/migrate/20260310082735_add_type_to_spree_products.rb +0 -6
  301. data/db/migrate/20260310082749_create_cm_voting_credits.rb +0 -27
  302. data/db/migrate/20260326080200_create_cm_voting_credit_transactions.rb +0 -27
  303. data/db/migrate/20260330160000_create_cm_votes.rb +0 -25
  304. data/db/migrate/20260401072500_add_advanced_from_to_cm_voting_contestants.rb +0 -7
  305. data/db/migrate/20260402000001_add_voting_credit_scope_to_spree_taxons.rb +0 -6
  306. data/db/migrate/20260402000002_rename_scopeable_to_votable_in_cm_voting_credits.rb +0 -12
  307. data/db/migrate/20260403070000_add_name_to_cm_voting_sessions.rb +0 -5
  308. data/db/migrate/20260406000001_add_vendor_id_to_voting_tables.rb +0 -6
  309. data/db/migrate/20260406000001_rename_votes_remaining_to_amount_in_cm_voting_credits.rb +0 -11
  310. data/db/migrate/20260408085255_add_show_id_and_vendor_id_to_cm_voting_sessions.rb +0 -9
  311. data/db/migrate/20260420000001_rename_type_to_credit_type_in_cm_voting_credits.rb +0 -25
  312. data/db/migrate/20260422000001_create_cm_vote_fraud_events.rb +0 -23
  313. data/db/migrate/20260423000001_add_preview_to_taxons_products_and_sections.rb +0 -11
  314. data/db/migrate/20260423000002_create_preview_roles.rb +0 -24
  315. data/db/migrate/20260515120000_add_public_metadata_to_cm_voting_sessions.rb +0 -5
  316. data/db/migrate/20260518090920_add_unique_voter_count_to_voting_contestants.rb +0 -5
  317. data/db/migrate/20260518094322_create_cm_voting_session_stats.rb +0 -17
  318. data/db/migrate/20260520000001_add_scoring_model_to_cm_voting_sessions.rb +0 -5
  319. data/db/migrate/20260520000001_optimize_cm_votes_indexes.rb +0 -22
  320. data/db/migrate/20260525042257_add_vote_number_to_cm_voting_contestants.rb +0 -18
  321. data/db/migrate/20260527035430_add_confirmed_rank_to_cm_voting_contestants.rb +0 -5
  322. data/db/migrate/20260527062005_add_eliminated_at_to_cm_show_contestants.rb +0 -5
  323. data/db/migrate/20260603063652_add_parent_to_voting_sessions.rb +0 -9
  324. data/db/migrate/20260603090000_add_session_type_to_cm_voting_sessions.rb +0 -6
  325. data/db/migrate/20260608000000_add_display_to_cm_voting_sessions.rb +0 -5
  326. data/db/migrate/20260623082233_create_cm_claims.rb +0 -14
  327. data/db/migrate/20260624175658_add_unique_index_to_cm_claims.rb +0 -11
  328. data/db/migrate/20260630000001_add_trip_to_cm_pricing_model_routes.rb +0 -7
  329. data/db/migrate/20260701000001_add_device_info_to_cm_waiting_room_sessions.rb +0 -14
  330. data/db/migrate/20260703065239_add_position_to_cm_voting_contestants.rb +0 -6
  331. data/db/migrate/20260708150000_add_name_and_short_name_to_cm_trips.rb +0 -6
  332. data/db/migrate/20260713022227_add_advanced_to_episode_id_to_cm_voting_contestants.rb +0 -8
  333. data/db/migrate/20260714002626_rename_data_fill_stage_phase_on_cm_guests.rb +0 -5
  334. data/db/migrate/20260720000001_add_check_in_fields_to_spree_roles.rb +0 -11
  335. data/db/migrate/20260723000000_add_payment_host_to_cm_tenants.rb +0 -6
  336. data/db/migrate/20260723000001_add_metadata_to_spree_roles.rb +0 -11
  337. data/db/migrate/20260728074153_add_role_to_cm_exports.rb +0 -5
  338. data/db/migrate/20260729000000_add_visibility_to_cm_trips.rb +0 -6
  339. data/db/migrate/20260729000001_add_session_created_at_index_to_cm_votes.rb +0 -12
  340. data/db/migrate/20260730000000_add_purchase_limit_scopes_to_spree_orders.rb +0 -22
  341. data/docs/sql/jsonb_query_guide.md +0 -57
  342. data/lib/spree_cm_commissioner/test_helper/factories/claim_factory.rb +0 -14
  343. data/lib/spree_cm_commissioner/test_helper/factories/pricing_model_trip_factory.rb +0 -11
  344. data/lib/spree_cm_commissioner/test_helper/factories/show_episode_factory.rb +0 -12
  345. data/lib/spree_cm_commissioner/test_helper/factories/show_factory.rb +0 -120
  346. data/lib/spree_cm_commissioner/test_helper/factories/vote_credit_factory.rb +0 -37
  347. data/lib/spree_cm_commissioner/test_helper/factories/vote_factory.rb +0 -28
  348. data/lib/spree_cm_commissioner/test_helper/factories/voting_credit_transaction_factory.rb +0 -11
  349. data/lib/spree_cm_commissioner/test_helper/factories/voting_session_factory.rb +0 -11
  350. data/lib/tasks/recompute_guest_data_fill_stage.rake +0 -19
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ca0138759a1da40541b5d076fb9709847d44d88885593f5b69921993cfd26591
4
- data.tar.gz: 79408535d56a9d4b62cac5154a316f6652d6d8664c04a030f00588b39f7ddd24
3
+ metadata.gz: 793be478c9e769be1ddebd446fb98201ed4277176ca0cc64880a1fdeb71297b2
4
+ data.tar.gz: fe71e91c4f124dcb730cad8ff27dd87dddd92e0ffab66aaf292845e797b3fa01
5
5
  SHA512:
6
- metadata.gz: 3e1a90b2f9115755fcd8cb777e0cd4d3c05b950a8a1b913ac526be4c5967d062533b5683bf48d3ca979e726347bb1945520b0701337872e7626d2fc3524d7952
7
- data.tar.gz: 8b4813fe21cc8495e2a512ea1662e2105ba61994c1866794bd9da91ef5c805b1b49cc9d8ea5cdf53f35dd2fe6a96295491eea72853cfdaf899377264922e8a84
6
+ metadata.gz: c15e41fc7108a69dd080a6610af697f6b1a669a4b830de63dbb725242b3c0ca899fc00e47b1086b9eb1c3da2df0567d94f95cdab60e230994f9abfc031dc2cb8
7
+ data.tar.gz: 1f25bae14db105a7b0db5225fe2df2fd232e6d507940bac7876cd038ed2eb71fff35799d9809a39c208972e70d2c2c9ce90f51ca78c86b904cc7cfe6f3edd6a5
data/.env.example CHANGED
@@ -32,10 +32,6 @@ WAITING_ROOM_MAX_ETA_BATCH_SIZE=50 # cap on batch size assumed when estimating t
32
32
  VATTANAC_AES_SECRET_KEY= ""
33
33
  VATTANAC_PUBLIC_KEY=""
34
34
 
35
- # Telegram OAuth (OpenID Connect) login client_id/client_secret are configured
36
- # per tenant (or on the default store for tenant-less logins) from the admin
37
- # under Telegram Authentication - see docs/authentication/telegram-login.md.
38
-
39
35
  # Organizer URL
40
36
  ORGANIZER_URL=http://127.0.0.1:4000/organizer
41
37
 
data/.gitignore CHANGED
@@ -34,9 +34,3 @@ vendor/bundle/
34
34
  # Cursor
35
35
  .cursor
36
36
  dump.rdb
37
- # Added by code-review-graph
38
- .code-review-graph/
39
- .cursorrules
40
- .claude
41
- CLAUDE.md
42
- AGENTS.md
data/Gemfile.lock CHANGED
@@ -34,7 +34,7 @@ GIT
34
34
  PATH
35
35
  remote: .
36
36
  specs:
37
- spree_cm_commissioner (2.8.15)
37
+ spree_cm_commissioner (2.8.16)
38
38
  activerecord-multi-tenant
39
39
  activerecord_json_validator (~> 2.1, >= 2.1.3)
40
40
  aws-sdk-cloudfront
@@ -886,7 +886,7 @@ GEM
886
886
  spree_backend (>= 4.3.0.rc1)
887
887
  spree_emails (>= 4.3.0.rc1)
888
888
  spree_extension
889
- spree_vpago (2.3.4)
889
+ spree_vpago (2.0.5.pre.beta)
890
890
  faraday
891
891
  google-cloud-firestore
892
892
  spree_api (>= 4.5)
@@ -16,7 +16,6 @@ module SpreeCmCommissioner
16
16
  GuestCardClassesController
17
17
  SeatLayoutController
18
18
  CmsPagesController
19
- AdvertisementsController
20
19
  ].freeze
21
20
 
22
21
  # Priority 2: Semi-Static (1 hour)
@@ -26,14 +25,6 @@ module SpreeCmCommissioner
26
25
  HomepageDataController
27
26
  PopularRoutesController
28
27
  RoutePlacesController
29
- ShowsController
30
- EpisodesController
31
- ShowPeopleController
32
- ShowPersonAssignmentsController
33
- ShowContestantsController
34
- VotePackagesController
35
- ShowEliminationSessionsController
36
- PaymentMethodsController
37
28
  ].freeze
38
29
 
39
30
  # Priority 3: Moderate Freshness (30 minutes)
@@ -53,7 +44,6 @@ module SpreeCmCommissioner
53
44
  HIGH_FRESHNESS_CONTROLLERS = %w[
54
45
  TripsController
55
46
  TripSearchController
56
- VotingContestantsController
57
47
  ].freeze
58
48
 
59
49
  def shared_max_age
@@ -12,7 +12,6 @@ module SpreeCmCommissioner
12
12
  end
13
13
 
14
14
  @spree_current_order.last_ip_address = request.remote_ip
15
- @spree_current_order.device_id = device_id if device_id.present?
16
15
  @spree_current_order
17
16
  end
18
17
 
@@ -26,9 +25,5 @@ module SpreeCmCommissioner
26
25
  state: params[:state]
27
26
  )
28
27
  end
29
-
30
- def device_id
31
- params[:device_id].presence
32
- end
33
28
  end
34
29
  end
@@ -27,15 +27,13 @@ module SpreeCmCommissioner
27
27
  return unless result.failure?
28
28
 
29
29
  render json: {
30
- errors: [
31
- {
32
- status: '403',
33
- error_code: 'human_verification_failed',
34
- title: I18n.t('turnstile.verification_failed'),
35
- detail: result.message,
36
- turnstile_error_code: result.respond_to?(:error_code) ? result.error_code : nil
37
- }
38
- ]
30
+ errors: [{
31
+ status: '403',
32
+ error_code: 'human_verification_failed',
33
+ title: I18n.t('turnstile.verification_failed'),
34
+ detail: result.message
35
+ }
36
+ ]
39
37
  }, status: :forbidden
40
38
  end
41
39
 
@@ -80,10 +80,8 @@ module Spree
80
80
 
81
81
  def permitted_resource_params
82
82
  params.require(object_name).permit(:first_name, :last_name, :gender, :dob, :occupation_id,
83
- :nationality_id, :age, :emergency_contact,
84
- :line_item_id, :seat_number, :phone_number, :contact,
85
- :other_organization, :expectation, :address,
86
- :social_contact_platform, :social_contact
83
+ :nationality_id, :age, :emergency_contact, :line_item_id,
84
+ :seat_number, :phone_number
87
85
  )
88
86
  end
89
87
 
@@ -51,10 +51,7 @@ module Spree
51
51
  def permitted_resource_params
52
52
  segment_value = helpers.calculate_segment_value(params[:spree_cm_commissioner_homepage_section])
53
53
 
54
- params
55
- .require(:spree_cm_commissioner_homepage_section)
56
- .permit(:title, :description, :active, :tenant_id, :preview)
57
- .merge(segment: segment_value)
54
+ params.require(:spree_cm_commissioner_homepage_section).permit(:title, :description, :active, :tenant_id).merge(segment: segment_value)
58
55
  end
59
56
 
60
57
  def load_tenants
@@ -3,7 +3,6 @@ module Spree
3
3
  module TaxonsControllerDecorator
4
4
  def self.prepended(base)
5
5
  base.before_action :build_assets, only: %i[create update]
6
- base.before_action :normalize_sti_taxon_params, only: %i[create update]
7
6
  end
8
7
 
9
8
  # override
@@ -56,24 +55,6 @@ module Spree
56
55
  @taxon.build_ad_banner(attachment: permitted_resource_params.delete(:ad_banner)) if permitted_resource_params[:ad_banner]
57
56
  @taxon.build_video_banner(attachment: permitted_resource_params.delete(:video_banner)) if permitted_resource_params[:video_banner]
58
57
  end
59
-
60
- # Some admin forms submit STI records under their class key
61
- # (e.g. :spree_cm_commissioner_show) while Spree update reads :taxon.
62
- # Merge both into :taxon so all edited fields are persisted.
63
- def normalize_sti_taxon_params
64
- return unless @taxon
65
-
66
- sti_key = @taxon.class.model_name.param_key.to_sym
67
- sti_params = params[sti_key]
68
- return unless sti_params.is_a?(::ActionController::Parameters)
69
-
70
- base_params = params[:taxon]
71
- base_hash = base_params.is_a?(::ActionController::Parameters) ? base_params.to_unsafe_h : {}
72
- sti_hash = sti_params.to_unsafe_h
73
- merged_params = ::ActionController::Parameters.new(base_hash.merge(sti_hash))
74
-
75
- params[:taxon] = merged_params
76
- end
77
58
  end
78
59
  end
79
60
  end
@@ -20,26 +20,8 @@ module Spree
20
20
  end
21
21
  end
22
22
 
23
- # override
24
- def update
25
- preserve_non_form_roles
26
- super
27
- end
28
-
29
23
  private
30
24
 
31
- # Role types the user form doesn't render (assigned in organizer dashboards), e.g. check-in groups and preview.
32
- NON_FORM_ROLE_TYPES = %i[check_in preview].freeze
33
-
34
- # spree_role_ids= replaces the whole role set, so a submit that omits these would drop them. Merge
35
- # the user's existing ones back in so they survive. Skip when the form didn't submit roles at all.
36
- def preserve_non_form_roles
37
- return if params.dig(:user, :spree_role_ids).nil?
38
-
39
- preserved_ids = @user.spree_roles.where(role_type: NON_FORM_ROLE_TYPES).pluck(:id).map(&:to_s)
40
- params[:user][:spree_role_ids] = (params[:user][:spree_role_ids] + preserved_ids).uniq
41
- end
42
-
43
25
  def build_profile
44
26
  return unless permitted_resource_params[:profile]
45
27
 
@@ -53,7 +53,7 @@ module Spree
53
53
  preferences upload_later social_contact_platform user_id
54
54
  bib_number bib_prefix bib_index public_metadata private_metadata
55
55
  seat_number intel_phone_number block_id saved_guest_id
56
- data_fill_stage
56
+ data_fill_stage_phase
57
57
  ].freeze
58
58
 
59
59
  def guest_base_columns
@@ -36,7 +36,6 @@ module Spree
36
36
  SpreeCmCommissioner::EventChartQueries.new(
37
37
  taxon_id: params[:taxon_id],
38
38
  chart_type: params[:id] || 'participation',
39
- check_in_session_id: params[:check_in_session_id],
40
39
  refreshed: params[:refreshed] || false
41
40
  )
42
41
  end
@@ -26,8 +26,6 @@ module Spree
26
26
 
27
27
  result = SpreeCmCommissioner::OperatorGuestJsonGzips::Create.call(
28
28
  exportable: exportable,
29
- # Scope the offline file to the requesting operator's check-in role (nil = unrestricted).
30
- role: spree_current_user.check_in_role_for(exportable),
31
29
  force_create: false,
32
30
  options: {
33
31
  created_by_id: spree_current_user.id.to_s,
@@ -55,19 +53,11 @@ module Spree
55
53
  end
56
54
 
57
55
  # override
58
- # Scope the list to the requesting operator's check-in group, the same way the create cache
59
- # does — otherwise a restricted crew could list (and download via exported_file_url) other
60
- # groups' files for the event.
61
56
  def scope
62
- exportable = Spree::Taxon.find(params[:taxon_id])
63
-
64
- SpreeCmCommissioner::Exports::OperatorGuestJsonGzip
65
- .where(
66
- exportable_type: 'Spree::Taxon',
67
- exportable_id: params[:taxon_id],
68
- role_id: spree_current_user.check_in_role_for(exportable)&.id
69
- )
70
- .order(created_at: :desc)
57
+ SpreeCmCommissioner::Exports::OperatorGuestJsonGzip.where(
58
+ exportable_type: 'Spree::Taxon',
59
+ exportable_id: params[:taxon_id]
60
+ ).order(created_at: :desc)
71
61
  end
72
62
 
73
63
  # override
@@ -4,40 +4,69 @@ module Spree
4
4
  module Storefront
5
5
  module Account
6
6
  class GuestDynamicFieldsController < ::Spree::Api::V2::ResourceController
7
- ALLOWED_PHASES = %w[pre_registration post_registration].freeze
8
-
9
7
  before_action :require_spree_current_user
10
8
  before_action :load_guest
11
9
 
12
10
  def update_dynamic_field
13
- return render_error_payload('Invalid phase') unless ALLOWED_PHASES.include?(params[:phase])
14
- return render_error_payload('No dynamic fields provided') if dynamic_fields_params.blank?
15
-
16
- result = SpreeCmCommissioner::Guests::Update.call(
17
- guest: @guest,
18
- guest_params: {
19
- guest_dynamic_fields_attributes: dynamic_fields_params.map { |f| { dynamic_field_id: f[:id], value: f[:value] } }
20
- }
21
- )
22
-
23
- if result.success?
24
- render_serialized_payload { serialize_guest(result.value[:guest]) }
25
- else
26
- render_error_payload(result.error)
11
+ phase = params[:phase]
12
+
13
+ return render_error_payload('Invalid phase', 422) unless %w[pre_registration post_registration].include?(phase)
14
+
15
+ begin
16
+ fields = dynamic_fields_params
17
+ rescue ActionController::ParameterMissing
18
+ return render_error_payload('No dynamic fields provided', 422)
27
19
  end
20
+
21
+ return render_error_payload('No dynamic fields provided', 422) if fields.blank?
22
+
23
+ ActiveRecord::Base.transaction do
24
+ fields.each do |field|
25
+ process_dynamic_field(field)
26
+ end
27
+
28
+ @guest.save_and_move_to_next_stage
29
+ end
30
+
31
+ render_serialized_payload { serialize_guest(@guest) }
32
+ rescue ActiveRecord::RecordInvalid => e
33
+ render_error_payload(e.record.errors, 422)
34
+ rescue ActiveRecord::RecordNotFound => e
35
+ render_error_payload(e.message, 404)
28
36
  end
29
37
 
30
38
  private
31
39
 
32
40
  def dynamic_fields_params
33
- Array(params[:dynamic_fields]).map { |field| field.permit(:id, :value) }
41
+ params.require(:dynamic_fields).map do |field|
42
+ field.permit(:id, :value)
43
+ end
34
44
  end
35
45
 
36
46
  def load_guest
37
47
  @guest = SpreeCmCommissioner::Guest.find(params[:guest_id])
38
48
 
39
- raise CanCan::AccessDenied unless spree_current_user.guests.exists?(id: @guest.id) ||
40
- @guest.line_item.order.user == spree_current_user
49
+ unless spree_current_user.guests.exists?(id: @guest.id) ||
50
+ @guest.line_item.order.user == spree_current_user
51
+ render_error_payload('Unauthorized', 401)
52
+ end
53
+ end
54
+
55
+ def process_dynamic_field(field)
56
+ dynamic_field = SpreeCmCommissioner::DynamicField.find(field[:id])
57
+ guest_field = @guest.guest_dynamic_fields.build(dynamic_field_id: dynamic_field.id)
58
+
59
+ if dynamic_field.requires_dynamic_field_options?
60
+ option = dynamic_field.dynamic_field_options.find_by(value: field[:value])
61
+ raise ActiveRecord::RecordNotFound, "Invalid value for dynamic field #{dynamic_field.label}" unless option
62
+
63
+ guest_field.dynamic_field_option = option
64
+ guest_field.value = option.value
65
+ else
66
+ guest_field.value = field[:value]
67
+ end
68
+
69
+ guest_field.save!
41
70
  end
42
71
 
43
72
  def serialize_guest(guest)
@@ -7,7 +7,7 @@ module Spree
7
7
  before_action :require_spree_current_user
8
8
 
9
9
  def update
10
- spree_current_user.clear_has_incomplete_guest_info_cache
10
+ SpreeCmCommissioner::Users::IncompleteGuestCheckerService.new(spree_current_user).call
11
11
  render_success
12
12
  end
13
13
 
@@ -18,7 +18,7 @@ module Spree
18
18
  {
19
19
  success: true,
20
20
  message: 'Guest information marked as complete',
21
- has_incomplete_guest_info: spree_current_user.has_incomplete_guest_info?
21
+ has_incomplete_guest_info: false
22
22
  }
23
23
  end
24
24
  end
@@ -24,11 +24,21 @@ module Spree
24
24
  private
25
25
 
26
26
  def find_orders_with_incomplete_guest_info
27
- spree_current_user.orders
28
- .complete
29
- .joins(:guests)
30
- .merge(SpreeCmCommissioner::Guest.post_registration)
31
- .distinct
27
+ orders = spree_current_user.orders
28
+ .complete
29
+ .includes(line_items: { guests: [:guest_dynamic_fields] })
30
+
31
+ incomplete_order_ids = orders.select do |order|
32
+ order.line_items.any? do |line_item|
33
+ line_item.guests.any? do |guest|
34
+ guest.pre_registration_completed? &&
35
+ guest.post_registration_fields? &&
36
+ !guest.post_registration_completed?
37
+ end
38
+ end
39
+ end.map(&:id)
40
+
41
+ spree_current_user.orders.where(id: incomplete_order_ids)
32
42
  end
33
43
 
34
44
  def collection_finder
@@ -3,10 +3,6 @@ module Spree
3
3
  module V2
4
4
  module Storefront
5
5
  class AccountCheckerController < Spree::Api::V2::BaseController
6
- include SpreeCmCommissioner::TurnstileProtectable
7
-
8
- before_action :verify_turnstile!, only: :index
9
-
10
6
  def index
11
7
  checker = SpreeCmCommissioner::ExistingAccountChecker.call(filter_params.to_h)
12
8
 
@@ -31,27 +31,26 @@ module Spree
31
31
  def create
32
32
  spree_authorize! :update, spree_current_order, order_token
33
33
 
34
- result = SpreeCmCommissioner::Guests::Create.call(
34
+ result = SpreeCmCommissioner::Cart::CreateGuest.call(
35
35
  line_item: parent,
36
- guest_params: guest_params
36
+ options: guest_params
37
37
  )
38
38
 
39
39
  if result.success?
40
- render_serialized_payload(201) { serialize_resource(result.value[:guest]) }
40
+ render_serialized_payload(201) { serialize_resource(result.value) }
41
41
  else
42
- render_error_payload(result.error || result.value.errors, 422)
42
+ render_error_payload(result.value.errors, 422)
43
43
  end
44
44
  end
45
45
 
46
46
  def update
47
47
  spree_authorize! :update, spree_current_order, order_token unless guest_for_update.pre_registration?
48
48
 
49
- result = SpreeCmCommissioner::Guests::Update.call(guest: guest_for_update, guest_params: guest_params)
50
-
51
- if result.success?
52
- render_serialized_payload { serialize_resource(result.value[:guest]) }
53
- else
54
- render_error_payload(result.error || result.value&.errors, 422)
49
+ begin
50
+ SpreeCmCommissioner::UpdateGuestService.new(guest_for_update, guest_params).call
51
+ render_serialized_payload { serialize_resource(guest_for_update) }
52
+ rescue ActiveRecord::RecordInvalid => e
53
+ render_error_payload(e.record.errors, 422)
55
54
  end
56
55
  end
57
56
 
@@ -19,7 +19,6 @@ module Spree
19
19
  @collection ||= model_class.filter_by_segment(params[:homepage_id] || :general)
20
20
  .active
21
21
  .where(tenant_id: nil)
22
- .where(preview: false)
23
22
  .order(position: :asc)
24
23
  end
25
24
  end
@@ -18,6 +18,7 @@ module Spree
18
18
  order = Spree::Order.not_archived.find_by!(token: order_token)
19
19
 
20
20
  spree_authorize! :update, order, order_token
21
+ raise CanCan::AccessDenied unless order.payment?
21
22
 
22
23
  if order.mark_as_archive
23
24
  render_serialized_payload { serialize_resource(order) }
@@ -0,0 +1,77 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Storefront
5
+ class SavedGuestsController < ::Spree::Api::V2::ResourceController
6
+ before_action :require_spree_current_user
7
+ before_action :load_saved_guest, only: %i[show update destroy]
8
+
9
+ def collection
10
+ spree_current_user.saved_guests.order(created_at: :desc)
11
+ .page(params[:page])
12
+ .per(params[:per_page])
13
+ end
14
+
15
+ def create
16
+ saved_guest = spree_current_user.saved_guests.new(saved_guest_params)
17
+
18
+ if saved_guest.save
19
+ render_serialized_payload(201) { serialize_resource(saved_guest) }
20
+ else
21
+ render_error_payload(saved_guest.errors.full_messages.to_sentence, 422)
22
+ end
23
+ end
24
+
25
+ def update
26
+ if @saved_guest.update(saved_guest_params)
27
+ render_serialized_payload { serialize_resource(@saved_guest) }
28
+ else
29
+ render_error_payload(@saved_guest.errors.full_messages.to_sentence, 400)
30
+ end
31
+ end
32
+
33
+ def destroy
34
+ @saved_guest.destroy
35
+ head :no_content
36
+ end
37
+
38
+ private
39
+
40
+ def model_class
41
+ SpreeCmCommissioner::SavedGuest
42
+ end
43
+
44
+ def collection_serializer
45
+ resource_serializer
46
+ end
47
+
48
+ def resource_serializer
49
+ SpreeCmCommissioner::V2::Storefront::SavedGuestSerializer
50
+ end
51
+
52
+ def load_saved_guest
53
+ @saved_guest = spree_current_user.saved_guests.find(params[:id])
54
+ end
55
+
56
+ def saved_guest_params
57
+ params.require(:saved_guest).permit(
58
+ :first_name,
59
+ :last_name,
60
+ :dob,
61
+ :age,
62
+ :gender,
63
+ :email,
64
+ :country_code,
65
+ :phone_number,
66
+ :intel_phone_number,
67
+ :nationality_id,
68
+ :occupation_id,
69
+ :nationality_group,
70
+ :age_group
71
+ )
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
@@ -14,8 +14,7 @@ module Spree
14
14
  tenant_id: nil,
15
15
  remote_ip: request.remote_ip,
16
16
  waiting_guest_firebase_doc_id: params[:waiting_guest_firebase_doc_id],
17
- page_path: params[:page_path],
18
- device_attributes: permitted_device_attributes
17
+ page_path: params[:page_path]
19
18
  )
20
19
 
21
20
  if context.success?
@@ -28,12 +27,6 @@ module Spree
28
27
  def resource_serializer
29
28
  SpreeCmCommissioner::V2::Storefront::WaitingRoomSessionSerializer
30
29
  end
31
-
32
- private
33
-
34
- def permitted_device_attributes
35
- params.permit(*SpreeCmCommissioner::WaitingRoomSessionCreator::PERMITTED_DEVICE_ATTRIBUTES)
36
- end
37
30
  end
38
31
  end
39
32
  end
@@ -26,7 +26,7 @@ module Spree
26
26
  end
27
27
 
28
28
  def scope
29
- spree_current_user.orders.complete.exclude_vote_package
29
+ spree_current_user.orders.complete
30
30
  end
31
31
 
32
32
  def collection_serializer
@@ -16,10 +16,6 @@ module Spree
16
16
  set_current_tenant(@tenant)
17
17
  end
18
18
 
19
- def current_vendor
20
- @current_vendor ||= @tenant.active_vendor
21
- end
22
-
23
19
  def render_serialized_payload(status = 200)
24
20
  render json: yield, status: status, content_type: content_type
25
21
  end
@@ -30,25 +30,28 @@ module Spree
30
30
  def create
31
31
  spree_authorize! :update, spree_current_order, order_token
32
32
 
33
- result = SpreeCmCommissioner::Guests::Create.call(line_item: parent, guest_params: guest_params)
33
+ resource = scope.new(guest_params.except(:guest_dynamic_fields_attributes))
34
34
 
35
- if result.success?
36
- render_serialized_payload(201) { serialize_resource(result.value[:guest]) }
37
- else
38
- render_error_payload(result.error || result.value&.errors, 422)
35
+ ActiveRecord::Base.transaction do
36
+ resource.save!
37
+ run_dynamic_fields(resource)
38
+ resource.save_and_move_to_next_stage
39
39
  end
40
+
41
+ render_serialized_payload(201) { serialize_resource(resource) }
40
42
  end
41
43
 
42
44
  def update
43
45
  spree_authorize! :update, spree_current_order, order_token
44
46
 
45
- result = SpreeCmCommissioner::Guests::Update.call(guest: resource, guest_params: guest_params)
46
-
47
- if result.success?
48
- render_serialized_payload { serialize_resource(result.value[:guest]) }
49
- else
50
- render_error_payload(result.error || result.value&.errors, 422)
47
+ ActiveRecord::Base.transaction do
48
+ run_dynamic_fields(resource) if guest_params[:guest_dynamic_fields_attributes]
49
+ resource.assign_attributes(guest_params.except(:guest_dynamic_fields_attributes))
50
+ resource.save!
51
+ resource.save_and_move_to_next_stage
51
52
  end
53
+
54
+ render_serialized_payload { serialize_resource(resource) }
52
55
  end
53
56
 
54
57
  private
@@ -96,6 +99,13 @@ module Spree
96
99
  )
97
100
  end
98
101
 
102
+ def run_dynamic_fields(resource)
103
+ SpreeCmCommissioner::GuestDynamicFieldsManager.call(
104
+ resource: resource,
105
+ dynamic_fields_attributes: guest_params[:guest_dynamic_fields_attributes]
106
+ )
107
+ end
108
+
99
109
  def handle_record_invalid(exception)
100
110
  render_error_payload(exception.record.errors, 422)
101
111
  end
@@ -5,7 +5,6 @@ module Spree
5
5
  class HomepageSectionsController < BaseController
6
6
  def collection
7
7
  @collection ||= scope.filter_by_segment(params[:homepage_id] || :general)
8
- .where(preview: false)
9
8
  .active
10
9
  .order(position: :asc)
11
10
  end