spree_cm_commissioner 2.5.1.pre.pre2 → 2.5.1.pre.pre3

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 (104) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/app/controllers/spree/api/chatrace/guests_controller.rb +37 -20
  4. data/app/controllers/spree/api/v2/operator/check_in_bulks_controller.rb +9 -0
  5. data/app/controllers/spree/api/v2/storefront/account/qr_data_controller.rb +30 -0
  6. data/app/controllers/spree/api/v2/storefront/popular_route_places_controller.rb +1 -1
  7. data/app/controllers/spree/api/v2/storefront/transit/draft_orders_controller.rb +4 -4
  8. data/app/controllers/spree/transit/trips_controller.rb +3 -3
  9. data/app/finders/spree_cm_commissioner/places/find_with_route.rb +12 -12
  10. data/app/finders/spree_cm_commissioner/routes/find_popular.rb +35 -20
  11. data/app/interactors/spree_cm_commissioner/stock/permanent_inventory_items_generator.rb +4 -11
  12. data/app/interactors/spree_cm_commissioner/stock/stock_movement_creator.rb +1 -10
  13. data/app/{services/spree_cm_commissioner/transit_order/create.rb → interactors/spree_cm_commissioner/transit/draft_order_creator.rb} +16 -13
  14. data/app/interactors/spree_cm_commissioner/trip_clone_creator.rb +3 -4
  15. data/app/interactors/spree_cm_commissioner/trip_stops_creator.rb +2 -2
  16. data/app/jobs/spree_cm_commissioner/stock/permanent_inventory_items_generator_job.rb +2 -2
  17. data/app/jobs/spree_cm_commissioner/transit/route_fulfilled_order_count_incrementer_job.rb +10 -0
  18. data/app/jobs/spree_cm_commissioner/transit/route_order_count_incrementer_job.rb +10 -0
  19. data/app/jobs/spree_cm_commissioner/transit/route_previous_trip_count_decrementer_job.rb +13 -0
  20. data/app/jobs/spree_cm_commissioner/transit/route_trip_count_decrementer_job.rb +10 -0
  21. data/app/jobs/spree_cm_commissioner/transit/route_trip_count_incrementer_job.rb +10 -0
  22. data/app/models/concerns/spree_cm_commissioner/order_state_machine.rb +16 -11
  23. data/app/models/concerns/spree_cm_commissioner/route_order_countable.rb +2 -2
  24. data/app/models/concerns/spree_cm_commissioner/route_trip_count_callbacks.rb +48 -0
  25. data/app/models/concerns/spree_cm_commissioner/user_identity.rb +0 -6
  26. data/app/models/concerns/spree_cm_commissioner/variant_options_concern.rb +4 -0
  27. data/app/models/spree_cm_commissioner/guest.rb +4 -4
  28. data/app/models/spree_cm_commissioner/place.rb +8 -5
  29. data/app/models/spree_cm_commissioner/product_decorator.rb +0 -1
  30. data/app/models/spree_cm_commissioner/route.rb +5 -46
  31. data/app/models/spree_cm_commissioner/trip.rb +33 -8
  32. data/app/models/spree_cm_commissioner/trip_connection.rb +36 -0
  33. data/app/models/spree_cm_commissioner/trip_stop.rb +2 -16
  34. data/app/models/spree_cm_commissioner/user_decorator.rb +30 -18
  35. data/app/models/spree_cm_commissioner/vendor_decorator.rb +1 -3
  36. data/app/models/spree_cm_commissioner/vendor_route.rb +9 -0
  37. data/app/queries/spree_cm_commissioner/guest_searcher_query.rb +25 -2
  38. data/app/queries/spree_cm_commissioner/trip_query.rb +2 -2
  39. data/app/serializers/spree/v2/storefront/user_serializer_decorator.rb +2 -1
  40. data/app/serializers/spree_cm_commissioner/v2/operator/guest_serializer.rb +1 -0
  41. data/app/serializers/spree_cm_commissioner/v2/operator/line_item_serializer.rb +2 -2
  42. data/app/serializers/spree_cm_commissioner/v2/operator/{line_item_order_serializer.rb → order_serializer.rb} +1 -2
  43. data/app/serializers/spree_cm_commissioner/v2/operator/user_serializer.rb +11 -0
  44. data/app/serializers/spree_cm_commissioner/v2/operator/variant_serializer.rb +9 -0
  45. data/app/serializers/spree_cm_commissioner/v2/storefront/route_serializer.rb +1 -3
  46. data/app/serializers/spree_cm_commissioner/v2/storefront/trip_stop_serializer.rb +1 -1
  47. data/app/services/spree_cm_commissioner/{route_metrics/update_route_metrics.rb → routes/base_update_order_metrics.rb} +16 -11
  48. data/app/services/spree_cm_commissioner/routes/decrement_previous_trip_count.rb +30 -0
  49. data/app/services/spree_cm_commissioner/routes/decrement_trip_count.rb +33 -0
  50. data/app/services/spree_cm_commissioner/{route_metrics/increase_fulfilled_order_count.rb → routes/increment_fulfilled_order_count.rb} +3 -3
  51. data/app/services/spree_cm_commissioner/{route_metrics/increase_order_count.rb → routes/increment_order_count.rb} +3 -3
  52. data/app/services/spree_cm_commissioner/routes/increment_trip_count.rb +33 -0
  53. data/app/services/spree_cm_commissioner/seeds/user_usernames.rb +86 -0
  54. data/app/services/spree_cm_commissioner/users/qr_data/extract_login.rb +18 -0
  55. data/app/services/spree_cm_commissioner/users/qr_data/generate.rb +14 -0
  56. data/app/services/spree_cm_commissioner/users/qr_data/invalidate.rb +19 -0
  57. data/app/services/spree_cm_commissioner/users/qr_data/verify.rb +33 -0
  58. data/app/services/spree_cm_commissioner/users/username/generate.rb +68 -0
  59. data/app/views/spree/transit/trip_stops/index.html.erb +2 -4
  60. data/app/views/spree_cm_commissioner/guest_mailer/send_ticket_to_guest.html.erb +1 -0
  61. data/config/initializers/spree_permitted_attributes.rb +1 -11
  62. data/config/routes.rb +2 -6
  63. data/db/migrate/20260126110528_seed_user_initial_usernames.rb +5 -0
  64. data/lib/spree_cm_commissioner/test_helper/factories/route_factory.rb +6 -7
  65. data/lib/spree_cm_commissioner/test_helper/factories/trip_connection_factory.rb +6 -0
  66. data/lib/spree_cm_commissioner/test_helper/factories/trip_factory.rb +1 -4
  67. data/lib/spree_cm_commissioner/test_helper/factories/trip_stop_factory.rb +1 -3
  68. data/lib/spree_cm_commissioner/test_helper/factories/vehicle_type_factory.rb +1 -1
  69. data/lib/spree_cm_commissioner/test_helper/factories/vendor_factory.rb +1 -2
  70. data/lib/spree_cm_commissioner/test_helper/factories/vendor_place_factory.rb +0 -22
  71. data/lib/spree_cm_commissioner/version.rb +1 -1
  72. data/lib/spree_cm_commissioner.rb +0 -4
  73. metadata +29 -38
  74. data/app/controllers/spree/api/v2/tenant/popular_route_places_controller.rb +0 -60
  75. data/app/controllers/spree/api/v2/tenant/routes_controller.rb +0 -50
  76. data/app/controllers/spree/api/v2/tenant/transit/draft_orders_controller.rb +0 -46
  77. data/app/finders/spree_cm_commissioner/route_metrics/find_popular.rb +0 -44
  78. data/app/finders/spree_cm_commissioner/routes/find.rb +0 -94
  79. data/app/jobs/spree_cm_commissioner/route_metrics/decrease_trip_count_job.rb +0 -10
  80. data/app/jobs/spree_cm_commissioner/route_metrics/increase_fulfilled_order_count_job.rb +0 -10
  81. data/app/jobs/spree_cm_commissioner/route_metrics/increase_order_count_job.rb +0 -10
  82. data/app/jobs/spree_cm_commissioner/route_metrics/increase_trip_count_job.rb +0 -10
  83. data/app/models/spree_cm_commissioner/route_metric.rb +0 -21
  84. data/app/models/spree_cm_commissioner/route_photo.rb +0 -12
  85. data/app/serializers/spree/v2/tenant/transit_cart_serializer.rb +0 -11
  86. data/app/serializers/spree_cm_commissioner/v2/storefront/transit_line_item_serializer.rb +0 -17
  87. data/app/services/spree_cm_commissioner/route_metrics/decrease_trip_count.rb +0 -31
  88. data/app/services/spree_cm_commissioner/route_metrics/increase_trip_count.rb +0 -31
  89. data/app/services/spree_cm_commissioner/routes/create.rb +0 -51
  90. data/app/services/spree_cm_commissioner/routes/update.rb +0 -25
  91. data/app/services/spree_cm_commissioner/trips/create_single_leg.rb +0 -123
  92. data/app/services/spree_cm_commissioner/trips/service_calendars/create_or_update.rb +0 -54
  93. data/app/services/spree_cm_commissioner/trips/update_single_leg.rb +0 -88
  94. data/app/services/spree_cm_commissioner/trips/variants/create.rb +0 -103
  95. data/db/migrate/20251224033103_migrate_cm_routes_to_cm_route_metrics.rb +0 -17
  96. data/db/migrate/20251224033910_migrate_cm_vendor_routes_to_cm_routes.rb +0 -30
  97. data/db/migrate/20260105072450_migrate_cm_trip_stops_to_support_trip_connection.rb +0 -12
  98. data/db/migrate/20260108101406_add_allow_booking_to_cm_trips.rb +0 -5
  99. data/lib/spree_cm_commissioner/test_helper/factories/route_metric_factory.rb +0 -12
  100. data/lib/spree_cm_commissioner/test_helper/factories/route_photo_factory.rb +0 -5
  101. data/lib/spree_cm_commissioner/transit/route_stop.rb +0 -61
  102. data/lib/spree_cm_commissioner/transit/route_stop_collection.rb +0 -175
  103. data/lib/spree_cm_commissioner/transit/trip_form.rb +0 -81
  104. data/lib/spree_cm_commissioner/transit/trip_stop_form.rb +0 -61
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_cm_commissioner
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.1.pre.pre2
4
+ version: 2.5.1.pre.pre3
5
5
  platform: ruby
6
6
  authors:
7
7
  - You
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-01-26 00:00:00.000000000 Z
11
+ date: 2026-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: spree
@@ -937,6 +937,7 @@ files:
937
937
  - app/controllers/spree/api/v2/storefront/account/mark_guest_info_complete_controller.rb
938
938
  - app/controllers/spree/api/v2/storefront/account/orders_controller_decorator.rb
939
939
  - app/controllers/spree/api/v2/storefront/account/preferred_payment_method_controller.rb
940
+ - app/controllers/spree/api/v2/storefront/account/qr_data_controller.rb
940
941
  - app/controllers/spree/api/v2/storefront/account_checker_controller.rb
941
942
  - app/controllers/spree/api/v2/storefront/account_deletions_controller.rb
942
943
  - app/controllers/spree/api/v2/storefront/account_recovers_controller.rb
@@ -1032,16 +1033,13 @@ files:
1032
1033
  - app/controllers/spree/api/v2/tenant/order_histories_controller.rb
1033
1034
  - app/controllers/spree/api/v2/tenant/pin_code_checkers_controller.rb
1034
1035
  - app/controllers/spree/api/v2/tenant/pin_code_generators_controller.rb
1035
- - app/controllers/spree/api/v2/tenant/popular_route_places_controller.rb
1036
1036
  - app/controllers/spree/api/v2/tenant/product_dynamic_fields_controller.rb
1037
1037
  - app/controllers/spree/api/v2/tenant/products_controller.rb
1038
1038
  - app/controllers/spree/api/v2/tenant/profile_images_controller.rb
1039
1039
  - app/controllers/spree/api/v2/tenant/reset_passwords_controller.rb
1040
- - app/controllers/spree/api/v2/tenant/routes_controller.rb
1041
1040
  - app/controllers/spree/api/v2/tenant/s3_signed_urls_controller.rb
1042
1041
  - app/controllers/spree/api/v2/tenant/taxons_controller.rb
1043
1042
  - app/controllers/spree/api/v2/tenant/tickets_controller.rb
1044
- - app/controllers/spree/api/v2/tenant/transit/draft_orders_controller.rb
1045
1043
  - app/controllers/spree/api/v2/tenant/trip_places_controller.rb
1046
1044
  - app/controllers/spree/api/v2/tenant/trip_search_controller.rb
1047
1045
  - app/controllers/spree/api/v2/tenant/trips_controller.rb
@@ -1149,8 +1147,6 @@ files:
1149
1147
  - app/finders/spree_cm_commissioner/payment_methods/group_by_bank.rb
1150
1148
  - app/finders/spree_cm_commissioner/places/find_with_route.rb
1151
1149
  - app/finders/spree_cm_commissioner/products/find_decorator.rb
1152
- - app/finders/spree_cm_commissioner/route_metrics/find_popular.rb
1153
- - app/finders/spree_cm_commissioner/routes/find.rb
1154
1150
  - app/finders/spree_cm_commissioner/routes/find_popular.rb
1155
1151
  - app/helpers/spree/admin/base_helper_decorator.rb
1156
1152
  - app/helpers/spree/admin/google_wallets_helper.rb
@@ -1277,6 +1273,7 @@ files:
1277
1273
  - app/interactors/spree_cm_commissioner/telegram_web_app_vendor_user_authorizer.rb
1278
1274
  - app/interactors/spree_cm_commissioner/telegram_web_app_vendor_user_checker.rb
1279
1275
  - app/interactors/spree_cm_commissioner/transactional_email_sender.rb
1276
+ - app/interactors/spree_cm_commissioner/transit/draft_order_creator.rb
1280
1277
  - app/interactors/spree_cm_commissioner/trip_clone_creator.rb
1281
1278
  - app/interactors/spree_cm_commissioner/trip_stops_creator.rb
1282
1279
  - app/interactors/spree_cm_commissioner/unique_device_token_cron_executor.rb
@@ -1345,10 +1342,6 @@ files:
1345
1342
  - app/jobs/spree_cm_commissioner/product_event_id_to_children_syncer_job.rb
1346
1343
  - app/jobs/spree_cm_commissioner/queue_order_webhooks_requests_job.rb
1347
1344
  - app/jobs/spree_cm_commissioner/reports_assigner_job.rb
1348
- - app/jobs/spree_cm_commissioner/route_metrics/decrease_trip_count_job.rb
1349
- - app/jobs/spree_cm_commissioner/route_metrics/increase_fulfilled_order_count_job.rb
1350
- - app/jobs/spree_cm_commissioner/route_metrics/increase_order_count_job.rb
1351
- - app/jobs/spree_cm_commissioner/route_metrics/increase_trip_count_job.rb
1352
1345
  - app/jobs/spree_cm_commissioner/seats/bulk_release_on_hold_blocks_job.rb
1353
1346
  - app/jobs/spree_cm_commissioner/seats/release_expired_blocks_job.rb
1354
1347
  - app/jobs/spree_cm_commissioner/sms_job.rb
@@ -1362,6 +1355,11 @@ files:
1362
1355
  - app/jobs/spree_cm_commissioner/telegram_debug_pin_code_sender_job.rb
1363
1356
  - app/jobs/spree_cm_commissioner/telegram_notification_sender_job.rb
1364
1357
  - app/jobs/spree_cm_commissioner/telegram_start_message_sender_job.rb
1358
+ - app/jobs/spree_cm_commissioner/transit/route_fulfilled_order_count_incrementer_job.rb
1359
+ - app/jobs/spree_cm_commissioner/transit/route_order_count_incrementer_job.rb
1360
+ - app/jobs/spree_cm_commissioner/transit/route_previous_trip_count_decrementer_job.rb
1361
+ - app/jobs/spree_cm_commissioner/transit/route_trip_count_decrementer_job.rb
1362
+ - app/jobs/spree_cm_commissioner/transit/route_trip_count_incrementer_job.rb
1365
1363
  - app/jobs/spree_cm_commissioner/unique_device_token_cron_job.rb
1366
1364
  - app/jobs/spree_cm_commissioner/variants_public_metadata_updater_job.rb
1367
1365
  - app/jobs/spree_cm_commissioner/vendor_creation_telegram_alert_sender_job.rb
@@ -1402,6 +1400,7 @@ files:
1402
1400
  - app/models/concerns/spree_cm_commissioner/product_delegation.rb
1403
1401
  - app/models/concerns/spree_cm_commissioner/product_type.rb
1404
1402
  - app/models/concerns/spree_cm_commissioner/route_order_countable.rb
1403
+ - app/models/concerns/spree_cm_commissioner/route_trip_count_callbacks.rb
1405
1404
  - app/models/concerns/spree_cm_commissioner/route_type.rb
1406
1405
  - app/models/concerns/spree_cm_commissioner/service_calendar_type.rb
1407
1406
  - app/models/concerns/spree_cm_commissioner/service_recommendations.rb
@@ -1564,8 +1563,6 @@ files:
1564
1563
  - app/models/spree_cm_commissioner/role_decorator.rb
1565
1564
  - app/models/spree_cm_commissioner/role_permission.rb
1566
1565
  - app/models/spree_cm_commissioner/route.rb
1567
- - app/models/spree_cm_commissioner/route_metric.rb
1568
- - app/models/spree_cm_commissioner/route_photo.rb
1569
1566
  - app/models/spree_cm_commissioner/s3_presigned_url.rb
1570
1567
  - app/models/spree_cm_commissioner/s3_presigned_url_builder.rb
1571
1568
  - app/models/spree_cm_commissioner/saved_guest.rb
@@ -1604,6 +1601,7 @@ files:
1604
1601
  - app/models/spree_cm_commissioner/tenant.rb
1605
1602
  - app/models/spree_cm_commissioner/transactional_email.rb
1606
1603
  - app/models/spree_cm_commissioner/trip.rb
1604
+ - app/models/spree_cm_commissioner/trip_connection.rb
1607
1605
  - app/models/spree_cm_commissioner/trip_stop.rb
1608
1606
  - app/models/spree_cm_commissioner/user_decorator.rb
1609
1607
  - app/models/spree_cm_commissioner/user_deletion_survey.rb
@@ -1629,6 +1627,7 @@ files:
1629
1627
  - app/models/spree_cm_commissioner/vendor_photo.rb
1630
1628
  - app/models/spree_cm_commissioner/vendor_place.rb
1631
1629
  - app/models/spree_cm_commissioner/vendor_promotion_rule.rb
1630
+ - app/models/spree_cm_commissioner/vendor_route.rb
1632
1631
  - app/models/spree_cm_commissioner/vendor_web_promotion_banner.rb
1633
1632
  - app/models/spree_cm_commissioner/video.rb
1634
1633
  - app/models/spree_cm_commissioner/video_on_demand.rb
@@ -1894,7 +1893,6 @@ files:
1894
1893
  - app/serializers/spree/v2/tenant/taxon_serializer.rb
1895
1894
  - app/serializers/spree/v2/tenant/taxonomy_serializer.rb
1896
1895
  - app/serializers/spree/v2/tenant/ticket_serializer.rb
1897
- - app/serializers/spree/v2/tenant/transit_cart_serializer.rb
1898
1896
  - app/serializers/spree/v2/tenant/trip_place_serializer.rb
1899
1897
  - app/serializers/spree/v2/tenant/trip_query_result_serializer.rb
1900
1898
  - app/serializers/spree/v2/tenant/trip_serializer.rb
@@ -1922,11 +1920,13 @@ files:
1922
1920
  - app/serializers/spree_cm_commissioner/v2/operator/event_qr_serializer.rb
1923
1921
  - app/serializers/spree_cm_commissioner/v2/operator/event_ticket_aggregator_serializer.rb
1924
1922
  - app/serializers/spree_cm_commissioner/v2/operator/guest_serializer.rb
1925
- - app/serializers/spree_cm_commissioner/v2/operator/line_item_order_serializer.rb
1926
1923
  - app/serializers/spree_cm_commissioner/v2/operator/line_item_serializer.rb
1924
+ - app/serializers/spree_cm_commissioner/v2/operator/order_serializer.rb
1927
1925
  - app/serializers/spree_cm_commissioner/v2/operator/pie_chart_event_aggregator_serializer.rb
1928
1926
  - app/serializers/spree_cm_commissioner/v2/operator/product_serializer.rb
1929
1927
  - app/serializers/spree_cm_commissioner/v2/operator/taxon_serializer.rb
1928
+ - app/serializers/spree_cm_commissioner/v2/operator/user_serializer.rb
1929
+ - app/serializers/spree_cm_commissioner/v2/operator/variant_serializer.rb
1930
1930
  - app/serializers/spree_cm_commissioner/v2/storefront/amenity_serializer.rb
1931
1931
  - app/serializers/spree_cm_commissioner/v2/storefront/asset_serializer.rb
1932
1932
  - app/serializers/spree_cm_commissioner/v2/storefront/base_serializer.rb
@@ -1971,7 +1971,6 @@ files:
1971
1971
  - app/serializers/spree_cm_commissioner/v2/storefront/self_check_in_serializer.rb
1972
1972
  - app/serializers/spree_cm_commissioner/v2/storefront/stock_item_serializer.rb
1973
1973
  - app/serializers/spree_cm_commissioner/v2/storefront/taxon_include_product_serializer.rb
1974
- - app/serializers/spree_cm_commissioner/v2/storefront/transit_line_item_serializer.rb
1975
1974
  - app/serializers/spree_cm_commissioner/v2/storefront/trip_place_serializer.rb
1976
1975
  - app/serializers/spree_cm_commissioner/v2/storefront/trip_query_result_serializer.rb
1977
1976
  - app/serializers/spree_cm_commissioner/v2/storefront/trip_result_serializer.rb
@@ -2066,32 +2065,32 @@ files:
2066
2065
  - app/services/spree_cm_commissioner/pricing_rules/update.rb
2067
2066
  - app/services/spree_cm_commissioner/role_permissions_constructor.rb
2068
2067
  - app/services/spree_cm_commissioner/role_permissions_loader.rb
2069
- - app/services/spree_cm_commissioner/route_metrics/decrease_trip_count.rb
2070
- - app/services/spree_cm_commissioner/route_metrics/increase_fulfilled_order_count.rb
2071
- - app/services/spree_cm_commissioner/route_metrics/increase_order_count.rb
2072
- - app/services/spree_cm_commissioner/route_metrics/increase_trip_count.rb
2073
- - app/services/spree_cm_commissioner/route_metrics/update_route_metrics.rb
2074
- - app/services/spree_cm_commissioner/routes/create.rb
2075
- - app/services/spree_cm_commissioner/routes/update.rb
2068
+ - app/services/spree_cm_commissioner/routes/base_update_order_metrics.rb
2069
+ - app/services/spree_cm_commissioner/routes/decrement_previous_trip_count.rb
2070
+ - app/services/spree_cm_commissioner/routes/decrement_trip_count.rb
2071
+ - app/services/spree_cm_commissioner/routes/increment_fulfilled_order_count.rb
2072
+ - app/services/spree_cm_commissioner/routes/increment_order_count.rb
2073
+ - app/services/spree_cm_commissioner/routes/increment_trip_count.rb
2076
2074
  - app/services/spree_cm_commissioner/rsa_service.rb
2077
2075
  - app/services/spree_cm_commissioner/seats/bulk_release_on_hold_blocks.rb
2078
2076
  - app/services/spree_cm_commissioner/seats/release_expired_blocks.rb
2079
2077
  - app/services/spree_cm_commissioner/seeds/roles_decorator.rb
2078
+ - app/services/spree_cm_commissioner/seeds/user_usernames.rb
2080
2079
  - app/services/spree_cm_commissioner/signing/sign_data.rb
2081
2080
  - app/services/spree_cm_commissioner/signing/verify_signature.rb
2082
2081
  - app/services/spree_cm_commissioner/telegram_alerts/integration_sync_failure.rb
2083
2082
  - app/services/spree_cm_commissioner/transit/export_order.rb
2084
2083
  - app/services/spree_cm_commissioner/transit/legs_builder_service.rb
2085
- - app/services/spree_cm_commissioner/transit_order/create.rb
2086
- - app/services/spree_cm_commissioner/trips/create_single_leg.rb
2087
2084
  - app/services/spree_cm_commissioner/trips/search.rb
2088
- - app/services/spree_cm_commissioner/trips/service_calendars/create_or_update.rb
2089
- - app/services/spree_cm_commissioner/trips/update_single_leg.rb
2090
- - app/services/spree_cm_commissioner/trips/variants/create.rb
2091
2085
  - app/services/spree_cm_commissioner/update_guest_service.rb
2092
2086
  - app/services/spree_cm_commissioner/user_authenticator.rb
2093
2087
  - app/services/spree_cm_commissioner/user_roles_assigner.rb
2094
2088
  - app/services/spree_cm_commissioner/users/incomplete_guest_checker_service.rb
2089
+ - app/services/spree_cm_commissioner/users/qr_data/extract_login.rb
2090
+ - app/services/spree_cm_commissioner/users/qr_data/generate.rb
2091
+ - app/services/spree_cm_commissioner/users/qr_data/invalidate.rb
2092
+ - app/services/spree_cm_commissioner/users/qr_data/verify.rb
2093
+ - app/services/spree_cm_commissioner/users/username/generate.rb
2095
2094
  - app/services/spree_cm_commissioner/vendor_places/base.rb
2096
2095
  - app/services/spree_cm_commissioner/vendor_places/bulk_create.rb
2097
2096
  - app/services/spree_cm_commissioner/vendor_places/create_with_google_map_data.rb
@@ -2999,15 +2998,12 @@ files:
2999
2998
  - db/migrate/20251127074809_change_guest_dynamic_fields_value_from_jsonb_to_text.rb
3000
2999
  - db/migrate/20251209022924_add_contact_fields_to_cm_tenants.rb
3001
3000
  - db/migrate/20251219035243_add_migrations_to_support_vehicle_types.rb
3002
- - db/migrate/20251224033103_migrate_cm_routes_to_cm_route_metrics.rb
3003
- - db/migrate/20251224033910_migrate_cm_vendor_routes_to_cm_routes.rb
3004
3001
  - db/migrate/20251225100000_add_age_group_to_cm_guests.rb
3005
3002
  - db/migrate/20260105024742_add_type_to_cm_pricing_actions.rb
3006
3003
  - db/migrate/20260105072146_add_nationality_group_and_age_group_to_cm_saved_guests.rb
3007
- - db/migrate/20260105072450_migrate_cm_trip_stops_to_support_trip_connection.rb
3008
3004
  - db/migrate/20260106093359_add_contact_phone_to_cm_vendor_places.rb
3009
- - db/migrate/20260108101406_add_allow_booking_to_cm_trips.rb
3010
3005
  - db/migrate/20260121024645_add_nationality_group_to_cm_guests.rb
3006
+ - db/migrate/20260126110528_seed_user_initial_usernames.rb
3011
3007
  - docker-compose.yml
3012
3008
  - docs/api/scoped-access-token-endpoints.md
3013
3009
  - docs/option_types/attr_types.md
@@ -3101,8 +3097,6 @@ files:
3101
3097
  - lib/spree_cm_commissioner/test_helper/factories/role.rb
3102
3098
  - lib/spree_cm_commissioner/test_helper/factories/role_permission_factory.rb
3103
3099
  - lib/spree_cm_commissioner/test_helper/factories/route_factory.rb
3104
- - lib/spree_cm_commissioner/test_helper/factories/route_metric_factory.rb
3105
- - lib/spree_cm_commissioner/test_helper/factories/route_photo_factory.rb
3106
3100
  - lib/spree_cm_commissioner/test_helper/factories/saved_guest_factory.rb
3107
3101
  - lib/spree_cm_commissioner/test_helper/factories/seat_layout_factory.rb
3108
3102
  - lib/spree_cm_commissioner/test_helper/factories/seat_section_factory.rb
@@ -3119,6 +3113,7 @@ files:
3119
3113
  - lib/spree_cm_commissioner/test_helper/factories/telegram_bot_factory.rb
3120
3114
  - lib/spree_cm_commissioner/test_helper/factories/tenant_factory.rb
3121
3115
  - lib/spree_cm_commissioner/test_helper/factories/transactional_email_factory.rb
3116
+ - lib/spree_cm_commissioner/test_helper/factories/trip_connection_factory.rb
3122
3117
  - lib/spree_cm_commissioner/test_helper/factories/trip_factory.rb
3123
3118
  - lib/spree_cm_commissioner/test_helper/factories/trip_stop_factory.rb
3124
3119
  - lib/spree_cm_commissioner/test_helper/factories/user_deletion_reasons_factory.rb
@@ -3136,11 +3131,7 @@ files:
3136
3131
  - lib/spree_cm_commissioner/test_helper/factories/webhook_subscriber_factory.rb
3137
3132
  - lib/spree_cm_commissioner/test_helper/factories/webhook_subscriber_rule_factory.rb
3138
3133
  - lib/spree_cm_commissioner/transit/leg.rb
3139
- - lib/spree_cm_commissioner/transit/route_stop.rb
3140
- - lib/spree_cm_commissioner/transit/route_stop_collection.rb
3141
3134
  - lib/spree_cm_commissioner/transit/seat_selection.rb
3142
- - lib/spree_cm_commissioner/transit/trip_form.rb
3143
- - lib/spree_cm_commissioner/transit/trip_stop_form.rb
3144
3135
  - lib/spree_cm_commissioner/trip_query_result.rb
3145
3136
  - lib/spree_cm_commissioner/trip_result.rb
3146
3137
  - lib/spree_cm_commissioner/user_session_jwt_token.rb
@@ -1,60 +0,0 @@
1
- module Spree
2
- module Api
3
- module V2
4
- module Tenant
5
- class PopularRoutePlacesController < BaseController
6
- private
7
-
8
- # override
9
- def collection
10
- @collection ||= collection_finder.new(
11
- tenant: @tenant,
12
- route_type: params[:route_type]
13
- ).execute
14
- end
15
-
16
- # override
17
- def default_resource_includes
18
- %w[origin_place destination_place]
19
- end
20
-
21
- # override
22
- def collection_finder
23
- SpreeCmCommissioner::Routes::FindPopular
24
- end
25
-
26
- # override
27
- def collection_serializer
28
- resource_serializer
29
- end
30
-
31
- # override
32
- def resource_serializer
33
- SpreeCmCommissioner::V2::Storefront::RouteSerializer
34
- end
35
-
36
- # override
37
- def serializer_params
38
- super.merge(
39
- include_vendors: include_vendors?,
40
- include_nearby_places: include_nearby_places?
41
- )
42
- end
43
-
44
- # override
45
- def required_schema
46
- SpreeCmCommissioner::PopularRoutePlacesRequestSchema
47
- end
48
-
49
- def include_vendors?
50
- resource_includes.include?(:vendors) || false
51
- end
52
-
53
- def include_nearby_places?
54
- resource_includes.include?(:nearby_places) || false
55
- end
56
- end
57
- end
58
- end
59
- end
60
- end
@@ -1,50 +0,0 @@
1
- module Spree
2
- module Api
3
- module V2
4
- module Tenant
5
- class RoutesController < BaseController
6
- private
7
-
8
- # override
9
- def collection
10
- @collection ||= collection_finder.new(
11
- tenant: @tenant,
12
- params: params
13
- ).execute
14
- end
15
-
16
- # override
17
- def collection_finder
18
- SpreeCmCommissioner::Routes::Find
19
- end
20
-
21
- # override
22
- def collection_serializer
23
- SpreeCmCommissioner::V2::Storefront::RouteSerializer
24
- end
25
-
26
- # override
27
- def serializer_params
28
- super.merge(
29
- include_vendors: include_vendors?,
30
- include_nearby_places: include_nearby_places?
31
- )
32
- end
33
-
34
- # override
35
- def required_schema
36
- SpreeCmCommissioner::PopularRoutePlacesRequestSchema
37
- end
38
-
39
- def include_vendors?
40
- resource_includes.include?(:vendors) || false
41
- end
42
-
43
- def include_nearby_places?
44
- resource_includes.include?(:nearby_places) || false
45
- end
46
- end
47
- end
48
- end
49
- end
50
- end
@@ -1,46 +0,0 @@
1
- module Spree
2
- module Api
3
- module V2
4
- module Tenant
5
- module Transit
6
- class DraftOrdersController < BaseController
7
- # Creates a draft transit order for tenant.
8
- # Endpoint: POST /api/v2/tenant/transit/draft_orders
9
- # Params:
10
- # - outbound_date: Date of outbound transit (optional)
11
- # - inbound_date: Date of inbound transit (optional)
12
- # - outbound_legs: Array of outbound leg details (required)
13
- # - inbound_legs: Array of inbound leg details (optional)
14
- def create
15
- @outbound_legs = params[:outbound_legs].is_a?(Array) && params[:outbound_legs].any? ? build_legs(:outbound, params[:outbound_legs]) : []
16
- @inbound_legs = params[:inbound_legs].is_a?(Array) && params[:inbound_legs].any? ? build_legs(:inbound, params[:inbound_legs]) : []
17
-
18
- result = SpreeCmCommissioner::TransitOrder::Create.call(
19
- outbound_date: params[:outbound_date]&.to_date,
20
- inbound_date: params[:inbound_date]&.to_date,
21
- outbound_legs: @outbound_legs,
22
- inbound_legs: @inbound_legs,
23
- user: spree_current_user
24
- )
25
-
26
- if result.success?
27
- render_serialized_payload { serialize_resource(result.value[:order]) }
28
- else
29
- render_error_payload(result.error)
30
- end
31
- end
32
-
33
- def build_legs(direction, legs_params)
34
- SpreeCmCommissioner::Transit::LegsBuilderService.new(direction: direction, legs_params: legs_params).call
35
- end
36
-
37
- # override
38
- def resource_serializer
39
- Spree::V2::Tenant::TransitCartSerializer
40
- end
41
- end
42
- end
43
- end
44
- end
45
- end
46
- end
@@ -1,44 +0,0 @@
1
- # Finds route metrics ordered by popularity based on order metrics.
2
- #
3
- # Route metrics are sorted by:
4
- # 1. fulfilled_order_count (completed orders) - DESC
5
- # 2. order_count (total orders including incomplete) - DESC
6
- #
7
- # @param route_type [Symbol, String] Optional. Filter by route type (e.g., :ferry, :bus)
8
- #
9
- # @return [ActiveRecord::Relation<SpreeCmCommissioner::RouteMetric>] Route metrics with origin and destination places loaded,
10
- # ordered from most to least popular
11
- #
12
- # @example Get all popular route metrics
13
- # finder = SpreeCmCommissioner::RouteMetrics::FindPopular.new
14
- # finder.execute # => Returns all route metrics sorted by fulfillment and order counts
15
- #
16
- # @example Get popular ferry route metrics
17
- # finder = SpreeCmCommissioner::RouteMetrics::FindPopular.new
18
- # finder.execute(route_type: :ferry) # => Returns ferry route metrics sorted by popularity
19
- #
20
- # @example Get popular bus route metrics
21
- # finder = SpreeCmCommissioner::RouteMetrics::FindPopular.new
22
- # finder.execute(route_type: :bus) # => Returns bus route metrics sorted by popularity
23
-
24
- module SpreeCmCommissioner
25
- module RouteMetrics
26
- class FindPopular
27
- def execute(route_type: nil, query: nil)
28
- scope(route_type: route_type, query: query)
29
- end
30
-
31
- private
32
-
33
- def scope(route_type:, query:)
34
- result = SpreeCmCommissioner::RouteMetric.all
35
-
36
- result = result.where(route_type: route_type.to_sym) if route_type.present?
37
- result = result.where('cm_route_metrics.route_name ILIKE ?', "%#{query}%") if query.present?
38
-
39
- result.includes(:origin_place, :destination_place)
40
- .order(fulfilled_order_count: :desc, order_count: :desc)
41
- end
42
- end
43
- end
44
- end
@@ -1,94 +0,0 @@
1
- # Finder for Route records with common filtering options.
2
- # Usage:
3
- # finder = SpreeCmCommissioner::Routes::Find.new(vendor: vendor, params: params)
4
- # finder = SpreeCmCommissioner::Routes::Find.new(tenant: tenant, params: params)
5
- # finder.execute
6
- # returns ActiveRecord::Relation of SpreeCmCommissioner::Route
7
-
8
- module SpreeCmCommissioner
9
- module Routes
10
- class Find
11
- def initialize(vendor: nil, tenant: nil, params: {})
12
- @vendor = vendor
13
- @tenant = tenant
14
- @params = params || {}
15
-
16
- @ids = Array(@params[:ids]).map(&:to_s)
17
- @name = @params.dig(:filter, :name) || @params[:name]
18
- @route_type = @params.dig(:filter, :route_type) || @params[:route_type]
19
- @origin_place_id = @params.dig(:filter, :origin_place_id)
20
- @destination_place_id = @params.dig(:filter, :destination_place_id)
21
- @query = @params.dig(:filter, :query) || @params[:query]
22
- @limit = (@params[:limit] || @params.dig(:page, :limit) || 50).to_i
23
- @order = @params[:order] || 'created_at DESC'
24
- end
25
-
26
- def execute
27
- results = base_scope
28
- results = by_ids(results) if ids?
29
- results = by_name(results) if name?
30
- results = by_route_type(results) if route_type?
31
- results = by_origin_place(results) if origin_place_id.present?
32
- results = by_destination_place(results) if destination_place_id.present?
33
- results = by_query(results) if query?
34
-
35
- results.order(order_clause).limit(limit)
36
- end
37
-
38
- private
39
-
40
- attr_reader :vendor, :tenant, :params, :ids, :name, :route_type, :origin_place_id, :destination_place_id, :query, :limit, :order
41
-
42
- def base_scope
43
- scope = SpreeCmCommissioner::Route.includes(:origin_place, :destination_place, :route_photos)
44
- scope = scope.where(vendor_id: vendor.id) if vendor.present?
45
- scope = scope.where(tenant_id: tenant.id) if tenant.present?
46
- scope
47
- end
48
-
49
- def ids?
50
- ids.present?
51
- end
52
-
53
- def name?
54
- name.present?
55
- end
56
-
57
- def route_type?
58
- route_type.present?
59
- end
60
-
61
- def query?
62
- query.present?
63
- end
64
-
65
- def by_ids(scope)
66
- scope.where(id: ids)
67
- end
68
-
69
- def by_name(scope)
70
- scope.where('cm_routes.route_name ILIKE ?', "%#{name}%")
71
- end
72
-
73
- def by_route_type(scope)
74
- scope.where(route_type: route_type.to_s)
75
- end
76
-
77
- def by_origin_place(scope)
78
- scope.where(origin_place_id: origin_place_id)
79
- end
80
-
81
- def by_destination_place(scope)
82
- scope.where(destination_place_id: destination_place_id)
83
- end
84
-
85
- def by_query(scope)
86
- scope.where('cm_routes.route_name ILIKE :q OR cm_routes.short_name ILIKE :q', q: "%#{query}%")
87
- end
88
-
89
- def order_clause
90
- order
91
- end
92
- end
93
- end
94
- end
@@ -1,10 +0,0 @@
1
- module SpreeCmCommissioner
2
- module RouteMetrics
3
- class DecreaseTripCountJob < ApplicationUniqueJob
4
- def perform(options = {})
5
- trip = SpreeCmCommissioner::Trip.find(options[:trip_id])
6
- SpreeCmCommissioner::RouteMetrics::DecreaseTripCount.call(trip: trip)
7
- end
8
- end
9
- end
10
- end
@@ -1,10 +0,0 @@
1
- module SpreeCmCommissioner
2
- module RouteMetrics
3
- class IncreaseFulfilledOrderCountJob < ApplicationUniqueJob
4
- def perform(options = {})
5
- order = Spree::Order.find(options[:order_id])
6
- SpreeCmCommissioner::RouteMetrics::IncreaseFulfilledOrderCount.call(order: order)
7
- end
8
- end
9
- end
10
- end
@@ -1,10 +0,0 @@
1
- module SpreeCmCommissioner
2
- module RouteMetrics
3
- class IncreaseOrderCountJob < ApplicationUniqueJob
4
- def perform(options = {})
5
- order = Spree::Order.find(options[:order_id])
6
- SpreeCmCommissioner::RouteMetrics::IncreaseOrderCount.call(order: order)
7
- end
8
- end
9
- end
10
- end
@@ -1,10 +0,0 @@
1
- module SpreeCmCommissioner
2
- module RouteMetrics
3
- class IncreaseTripCountJob < ApplicationUniqueJob
4
- def perform(options = {})
5
- trip = SpreeCmCommissioner::Trip.find(options[:trip_id])
6
- SpreeCmCommissioner::RouteMetrics::IncreaseTripCount.call(trip: trip)
7
- end
8
- end
9
- end
10
- end
@@ -1,21 +0,0 @@
1
- module SpreeCmCommissioner
2
- class RouteMetric < Base
3
- include SpreeCmCommissioner::RouteType
4
-
5
- belongs_to :origin_place, class_name: 'SpreeCmCommissioner::Place', optional: false
6
- belongs_to :destination_place, class_name: 'SpreeCmCommissioner::Place', optional: false
7
-
8
- validates :route_type, presence: true
9
- validates :route_type, uniqueness: { scope: %i[origin_place_id destination_place_id] }
10
-
11
- validate :origin_and_destination_cannot_be_the_same
12
-
13
- private
14
-
15
- def origin_and_destination_cannot_be_the_same
16
- return unless origin_place_id == destination_place_id
17
-
18
- errors.add(:base, 'Origin and destination cannot be the same')
19
- end
20
- end
21
- end
@@ -1,12 +0,0 @@
1
- module SpreeCmCommissioner
2
- class RoutePhoto < Asset
3
- # 16x9
4
- def asset_styles
5
- {
6
- mini: '160x90>',
7
- small: '480x270>',
8
- medium: '960x540>'
9
- }
10
- end
11
- end
12
- end
@@ -1,11 +0,0 @@
1
- module Spree
2
- module V2
3
- module Tenant
4
- class TransitCartSerializer < CartSerializer
5
- has_many :line_items, serializer: SpreeCmCommissioner::V2::Storefront::TransitLineItemSerializer
6
-
7
- cache_options store: nil
8
- end
9
- end
10
- end
11
- end
@@ -1,17 +0,0 @@
1
- module SpreeCmCommissioner
2
- module V2
3
- module Storefront
4
- class TransitLineItemSerializer < BaseSerializer
5
- # Nested-only API shape
6
- attributes :from_date,
7
- :to_date,
8
- :trip_id,
9
- :direction,
10
- :boarding_trip_stop_id,
11
- :drop_off_trip_stop_id
12
-
13
- cache_options store: nil
14
- end
15
- end
16
- end
17
- end