spree_cm_commissioner 2.5.1.pre.pre5 → 2.5.1

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 (83) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test_and_build_gem.yml +2 -2
  3. data/Gemfile.lock +1 -1
  4. data/app/controllers/spree/api/v2/storefront/popular_route_places_controller.rb +2 -2
  5. data/app/controllers/spree/api/v2/storefront/transit/draft_orders_controller.rb +4 -4
  6. data/app/controllers/spree/transit/trips_controller.rb +3 -3
  7. data/app/finders/spree_cm_commissioner/places/find_with_route.rb +12 -12
  8. data/app/finders/spree_cm_commissioner/routes/find_popular.rb +35 -19
  9. data/app/interactors/spree_cm_commissioner/stock/permanent_inventory_items_generator.rb +4 -11
  10. data/app/interactors/spree_cm_commissioner/stock/stock_movement_creator.rb +1 -10
  11. data/app/{services/spree_cm_commissioner/transit_order/create.rb → interactors/spree_cm_commissioner/transit/draft_order_creator.rb} +16 -13
  12. data/app/interactors/spree_cm_commissioner/trip_clone_creator.rb +3 -4
  13. data/app/interactors/spree_cm_commissioner/trip_stops_creator.rb +2 -2
  14. data/app/jobs/spree_cm_commissioner/stock/permanent_inventory_items_generator_job.rb +2 -2
  15. data/app/jobs/spree_cm_commissioner/transit/route_fulfilled_order_count_incrementer_job.rb +10 -0
  16. data/app/jobs/spree_cm_commissioner/transit/route_order_count_incrementer_job.rb +10 -0
  17. data/app/jobs/spree_cm_commissioner/transit/route_previous_trip_count_decrementer_job.rb +13 -0
  18. data/app/jobs/spree_cm_commissioner/transit/route_trip_count_decrementer_job.rb +10 -0
  19. data/app/jobs/spree_cm_commissioner/transit/route_trip_count_incrementer_job.rb +10 -0
  20. data/app/models/concerns/spree_cm_commissioner/route_order_countable.rb +2 -2
  21. data/app/models/concerns/spree_cm_commissioner/route_trip_count_callbacks.rb +48 -0
  22. data/app/models/spree_cm_commissioner/place.rb +8 -5
  23. data/app/models/spree_cm_commissioner/product_decorator.rb +0 -1
  24. data/app/models/spree_cm_commissioner/route.rb +5 -45
  25. data/app/models/spree_cm_commissioner/trip.rb +33 -8
  26. data/app/models/spree_cm_commissioner/trip_connection.rb +36 -0
  27. data/app/models/spree_cm_commissioner/trip_stop.rb +2 -16
  28. data/app/models/spree_cm_commissioner/vendor_decorator.rb +1 -3
  29. data/app/models/spree_cm_commissioner/vendor_route.rb +9 -0
  30. data/app/queries/spree_cm_commissioner/trip_query.rb +2 -2
  31. data/app/serializers/spree_cm_commissioner/v2/storefront/route_serializer.rb +1 -2
  32. data/app/serializers/spree_cm_commissioner/v2/storefront/trip_stop_serializer.rb +1 -1
  33. data/app/services/spree_cm_commissioner/{route_metrics/update_route_metrics.rb → routes/base_update_order_metrics.rb} +16 -11
  34. data/app/services/spree_cm_commissioner/routes/decrement_previous_trip_count.rb +30 -0
  35. data/app/services/spree_cm_commissioner/routes/decrement_trip_count.rb +33 -0
  36. data/app/services/spree_cm_commissioner/{route_metrics/increase_fulfilled_order_count.rb → routes/increment_fulfilled_order_count.rb} +3 -3
  37. data/app/services/spree_cm_commissioner/{route_metrics/increase_order_count.rb → routes/increment_order_count.rb} +3 -3
  38. data/app/services/spree_cm_commissioner/routes/increment_trip_count.rb +33 -0
  39. data/app/views/spree/transit/trip_stops/index.html.erb +2 -4
  40. data/app/views/spree_cm_commissioner/guest_mailer/send_ticket_to_guest.html.erb +1 -0
  41. data/config/initializers/spree_permitted_attributes.rb +0 -11
  42. data/config/routes.rb +0 -6
  43. data/lib/spree_cm_commissioner/test_helper/factories/route_factory.rb +6 -7
  44. data/lib/spree_cm_commissioner/test_helper/factories/trip_connection_factory.rb +6 -0
  45. data/lib/spree_cm_commissioner/test_helper/factories/trip_factory.rb +1 -4
  46. data/lib/spree_cm_commissioner/test_helper/factories/trip_stop_factory.rb +1 -3
  47. data/lib/spree_cm_commissioner/test_helper/factories/vendor_factory.rb +0 -2
  48. data/lib/spree_cm_commissioner/test_helper/factories/vendor_place_factory.rb +0 -22
  49. data/lib/spree_cm_commissioner/version.rb +1 -1
  50. data/lib/spree_cm_commissioner.rb +0 -4
  51. metadata +19 -39
  52. data/app/controllers/spree/api/v2/tenant/popular_route_places_controller.rb +0 -60
  53. data/app/controllers/spree/api/v2/tenant/routes_controller.rb +0 -50
  54. data/app/controllers/spree/api/v2/tenant/transit/draft_orders_controller.rb +0 -46
  55. data/app/finders/spree_cm_commissioner/route_metrics/find_popular.rb +0 -44
  56. data/app/finders/spree_cm_commissioner/routes/find.rb +0 -94
  57. data/app/jobs/spree_cm_commissioner/route_metrics/decrease_trip_count_job.rb +0 -10
  58. data/app/jobs/spree_cm_commissioner/route_metrics/increase_fulfilled_order_count_job.rb +0 -10
  59. data/app/jobs/spree_cm_commissioner/route_metrics/increase_order_count_job.rb +0 -10
  60. data/app/jobs/spree_cm_commissioner/route_metrics/increase_trip_count_job.rb +0 -10
  61. data/app/models/spree_cm_commissioner/route_metric.rb +0 -21
  62. data/app/models/spree_cm_commissioner/route_photo.rb +0 -12
  63. data/app/serializers/spree/v2/tenant/transit_cart_serializer.rb +0 -11
  64. data/app/serializers/spree_cm_commissioner/v2/storefront/route_metric_serializer.rb +0 -13
  65. data/app/serializers/spree_cm_commissioner/v2/storefront/transit_line_item_serializer.rb +0 -17
  66. data/app/services/spree_cm_commissioner/route_metrics/decrease_trip_count.rb +0 -31
  67. data/app/services/spree_cm_commissioner/route_metrics/increase_trip_count.rb +0 -31
  68. data/app/services/spree_cm_commissioner/routes/create.rb +0 -51
  69. data/app/services/spree_cm_commissioner/routes/update.rb +0 -25
  70. data/app/services/spree_cm_commissioner/trips/create_single_leg.rb +0 -128
  71. data/app/services/spree_cm_commissioner/trips/service_calendars/create_or_update.rb +0 -54
  72. data/app/services/spree_cm_commissioner/trips/update_single_leg.rb +0 -88
  73. data/app/services/spree_cm_commissioner/trips/variants/create.rb +0 -103
  74. data/db/migrate/20251224033103_migrate_cm_routes_to_cm_route_metrics.rb +0 -17
  75. data/db/migrate/20251224033910_migrate_cm_vendor_routes_to_cm_routes.rb +0 -30
  76. data/db/migrate/20260105072450_migrate_cm_trip_stops_to_support_trip_connection.rb +0 -12
  77. data/db/migrate/20260108101406_add_allow_booking_to_cm_trips.rb +0 -5
  78. data/lib/spree_cm_commissioner/test_helper/factories/route_metric_factory.rb +0 -12
  79. data/lib/spree_cm_commissioner/test_helper/factories/route_photo_factory.rb +0 -5
  80. data/lib/spree_cm_commissioner/transit/route_stop.rb +0 -61
  81. data/lib/spree_cm_commissioner/transit/route_stop_collection.rb +0 -203
  82. data/lib/spree_cm_commissioner/transit/trip_form.rb +0 -105
  83. data/lib/spree_cm_commissioner/transit/trip_stop_form.rb +0 -67
metadata CHANGED
@@ -1,7 +1,7 @@
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.pre5
4
+ version: 2.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - You
@@ -1033,16 +1033,13 @@ files:
1033
1033
  - app/controllers/spree/api/v2/tenant/order_histories_controller.rb
1034
1034
  - app/controllers/spree/api/v2/tenant/pin_code_checkers_controller.rb
1035
1035
  - app/controllers/spree/api/v2/tenant/pin_code_generators_controller.rb
1036
- - app/controllers/spree/api/v2/tenant/popular_route_places_controller.rb
1037
1036
  - app/controllers/spree/api/v2/tenant/product_dynamic_fields_controller.rb
1038
1037
  - app/controllers/spree/api/v2/tenant/products_controller.rb
1039
1038
  - app/controllers/spree/api/v2/tenant/profile_images_controller.rb
1040
1039
  - app/controllers/spree/api/v2/tenant/reset_passwords_controller.rb
1041
- - app/controllers/spree/api/v2/tenant/routes_controller.rb
1042
1040
  - app/controllers/spree/api/v2/tenant/s3_signed_urls_controller.rb
1043
1041
  - app/controllers/spree/api/v2/tenant/taxons_controller.rb
1044
1042
  - app/controllers/spree/api/v2/tenant/tickets_controller.rb
1045
- - app/controllers/spree/api/v2/tenant/transit/draft_orders_controller.rb
1046
1043
  - app/controllers/spree/api/v2/tenant/trip_places_controller.rb
1047
1044
  - app/controllers/spree/api/v2/tenant/trip_search_controller.rb
1048
1045
  - app/controllers/spree/api/v2/tenant/trips_controller.rb
@@ -1150,8 +1147,6 @@ files:
1150
1147
  - app/finders/spree_cm_commissioner/payment_methods/group_by_bank.rb
1151
1148
  - app/finders/spree_cm_commissioner/places/find_with_route.rb
1152
1149
  - app/finders/spree_cm_commissioner/products/find_decorator.rb
1153
- - app/finders/spree_cm_commissioner/route_metrics/find_popular.rb
1154
- - app/finders/spree_cm_commissioner/routes/find.rb
1155
1150
  - app/finders/spree_cm_commissioner/routes/find_popular.rb
1156
1151
  - app/helpers/spree/admin/base_helper_decorator.rb
1157
1152
  - app/helpers/spree/admin/google_wallets_helper.rb
@@ -1278,6 +1273,7 @@ files:
1278
1273
  - app/interactors/spree_cm_commissioner/telegram_web_app_vendor_user_authorizer.rb
1279
1274
  - app/interactors/spree_cm_commissioner/telegram_web_app_vendor_user_checker.rb
1280
1275
  - app/interactors/spree_cm_commissioner/transactional_email_sender.rb
1276
+ - app/interactors/spree_cm_commissioner/transit/draft_order_creator.rb
1281
1277
  - app/interactors/spree_cm_commissioner/trip_clone_creator.rb
1282
1278
  - app/interactors/spree_cm_commissioner/trip_stops_creator.rb
1283
1279
  - app/interactors/spree_cm_commissioner/unique_device_token_cron_executor.rb
@@ -1346,10 +1342,6 @@ files:
1346
1342
  - app/jobs/spree_cm_commissioner/product_event_id_to_children_syncer_job.rb
1347
1343
  - app/jobs/spree_cm_commissioner/queue_order_webhooks_requests_job.rb
1348
1344
  - app/jobs/spree_cm_commissioner/reports_assigner_job.rb
1349
- - app/jobs/spree_cm_commissioner/route_metrics/decrease_trip_count_job.rb
1350
- - app/jobs/spree_cm_commissioner/route_metrics/increase_fulfilled_order_count_job.rb
1351
- - app/jobs/spree_cm_commissioner/route_metrics/increase_order_count_job.rb
1352
- - app/jobs/spree_cm_commissioner/route_metrics/increase_trip_count_job.rb
1353
1345
  - app/jobs/spree_cm_commissioner/seats/bulk_release_on_hold_blocks_job.rb
1354
1346
  - app/jobs/spree_cm_commissioner/seats/release_expired_blocks_job.rb
1355
1347
  - app/jobs/spree_cm_commissioner/sms_job.rb
@@ -1363,6 +1355,11 @@ files:
1363
1355
  - app/jobs/spree_cm_commissioner/telegram_debug_pin_code_sender_job.rb
1364
1356
  - app/jobs/spree_cm_commissioner/telegram_notification_sender_job.rb
1365
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
1366
1363
  - app/jobs/spree_cm_commissioner/unique_device_token_cron_job.rb
1367
1364
  - app/jobs/spree_cm_commissioner/variants_public_metadata_updater_job.rb
1368
1365
  - app/jobs/spree_cm_commissioner/vendor_creation_telegram_alert_sender_job.rb
@@ -1403,6 +1400,7 @@ files:
1403
1400
  - app/models/concerns/spree_cm_commissioner/product_delegation.rb
1404
1401
  - app/models/concerns/spree_cm_commissioner/product_type.rb
1405
1402
  - app/models/concerns/spree_cm_commissioner/route_order_countable.rb
1403
+ - app/models/concerns/spree_cm_commissioner/route_trip_count_callbacks.rb
1406
1404
  - app/models/concerns/spree_cm_commissioner/route_type.rb
1407
1405
  - app/models/concerns/spree_cm_commissioner/service_calendar_type.rb
1408
1406
  - app/models/concerns/spree_cm_commissioner/service_recommendations.rb
@@ -1565,8 +1563,6 @@ files:
1565
1563
  - app/models/spree_cm_commissioner/role_decorator.rb
1566
1564
  - app/models/spree_cm_commissioner/role_permission.rb
1567
1565
  - app/models/spree_cm_commissioner/route.rb
1568
- - app/models/spree_cm_commissioner/route_metric.rb
1569
- - app/models/spree_cm_commissioner/route_photo.rb
1570
1566
  - app/models/spree_cm_commissioner/s3_presigned_url.rb
1571
1567
  - app/models/spree_cm_commissioner/s3_presigned_url_builder.rb
1572
1568
  - app/models/spree_cm_commissioner/saved_guest.rb
@@ -1605,6 +1601,7 @@ files:
1605
1601
  - app/models/spree_cm_commissioner/tenant.rb
1606
1602
  - app/models/spree_cm_commissioner/transactional_email.rb
1607
1603
  - app/models/spree_cm_commissioner/trip.rb
1604
+ - app/models/spree_cm_commissioner/trip_connection.rb
1608
1605
  - app/models/spree_cm_commissioner/trip_stop.rb
1609
1606
  - app/models/spree_cm_commissioner/user_decorator.rb
1610
1607
  - app/models/spree_cm_commissioner/user_deletion_survey.rb
@@ -1630,6 +1627,7 @@ files:
1630
1627
  - app/models/spree_cm_commissioner/vendor_photo.rb
1631
1628
  - app/models/spree_cm_commissioner/vendor_place.rb
1632
1629
  - app/models/spree_cm_commissioner/vendor_promotion_rule.rb
1630
+ - app/models/spree_cm_commissioner/vendor_route.rb
1633
1631
  - app/models/spree_cm_commissioner/vendor_web_promotion_banner.rb
1634
1632
  - app/models/spree_cm_commissioner/video.rb
1635
1633
  - app/models/spree_cm_commissioner/video_on_demand.rb
@@ -1895,7 +1893,6 @@ files:
1895
1893
  - app/serializers/spree/v2/tenant/taxon_serializer.rb
1896
1894
  - app/serializers/spree/v2/tenant/taxonomy_serializer.rb
1897
1895
  - app/serializers/spree/v2/tenant/ticket_serializer.rb
1898
- - app/serializers/spree/v2/tenant/transit_cart_serializer.rb
1899
1896
  - app/serializers/spree/v2/tenant/trip_place_serializer.rb
1900
1897
  - app/serializers/spree/v2/tenant/trip_query_result_serializer.rb
1901
1898
  - app/serializers/spree/v2/tenant/trip_serializer.rb
@@ -1967,7 +1964,6 @@ files:
1967
1964
  - app/serializers/spree_cm_commissioner/v2/storefront/qr_url_serializer.rb
1968
1965
  - app/serializers/spree_cm_commissioner/v2/storefront/reserved_block_serializer.rb
1969
1966
  - app/serializers/spree_cm_commissioner/v2/storefront/reset_password_serializer.rb
1970
- - app/serializers/spree_cm_commissioner/v2/storefront/route_metric_serializer.rb
1971
1967
  - app/serializers/spree_cm_commissioner/v2/storefront/route_serializer.rb
1972
1968
  - app/serializers/spree_cm_commissioner/v2/storefront/saved_guest_serializer.rb
1973
1969
  - app/serializers/spree_cm_commissioner/v2/storefront/seat_layout_serializer.rb
@@ -1975,7 +1971,6 @@ files:
1975
1971
  - app/serializers/spree_cm_commissioner/v2/storefront/self_check_in_serializer.rb
1976
1972
  - app/serializers/spree_cm_commissioner/v2/storefront/stock_item_serializer.rb
1977
1973
  - app/serializers/spree_cm_commissioner/v2/storefront/taxon_include_product_serializer.rb
1978
- - app/serializers/spree_cm_commissioner/v2/storefront/transit_line_item_serializer.rb
1979
1974
  - app/serializers/spree_cm_commissioner/v2/storefront/trip_place_serializer.rb
1980
1975
  - app/serializers/spree_cm_commissioner/v2/storefront/trip_query_result_serializer.rb
1981
1976
  - app/serializers/spree_cm_commissioner/v2/storefront/trip_result_serializer.rb
@@ -2070,13 +2065,12 @@ files:
2070
2065
  - app/services/spree_cm_commissioner/pricing_rules/update.rb
2071
2066
  - app/services/spree_cm_commissioner/role_permissions_constructor.rb
2072
2067
  - app/services/spree_cm_commissioner/role_permissions_loader.rb
2073
- - app/services/spree_cm_commissioner/route_metrics/decrease_trip_count.rb
2074
- - app/services/spree_cm_commissioner/route_metrics/increase_fulfilled_order_count.rb
2075
- - app/services/spree_cm_commissioner/route_metrics/increase_order_count.rb
2076
- - app/services/spree_cm_commissioner/route_metrics/increase_trip_count.rb
2077
- - app/services/spree_cm_commissioner/route_metrics/update_route_metrics.rb
2078
- - app/services/spree_cm_commissioner/routes/create.rb
2079
- - 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
2080
2074
  - app/services/spree_cm_commissioner/rsa_service.rb
2081
2075
  - app/services/spree_cm_commissioner/seats/bulk_release_on_hold_blocks.rb
2082
2076
  - app/services/spree_cm_commissioner/seats/release_expired_blocks.rb
@@ -2087,12 +2081,7 @@ files:
2087
2081
  - app/services/spree_cm_commissioner/telegram_alerts/integration_sync_failure.rb
2088
2082
  - app/services/spree_cm_commissioner/transit/export_order.rb
2089
2083
  - app/services/spree_cm_commissioner/transit/legs_builder_service.rb
2090
- - app/services/spree_cm_commissioner/transit_order/create.rb
2091
- - app/services/spree_cm_commissioner/trips/create_single_leg.rb
2092
2084
  - app/services/spree_cm_commissioner/trips/search.rb
2093
- - app/services/spree_cm_commissioner/trips/service_calendars/create_or_update.rb
2094
- - app/services/spree_cm_commissioner/trips/update_single_leg.rb
2095
- - app/services/spree_cm_commissioner/trips/variants/create.rb
2096
2085
  - app/services/spree_cm_commissioner/update_guest_service.rb
2097
2086
  - app/services/spree_cm_commissioner/user_authenticator.rb
2098
2087
  - app/services/spree_cm_commissioner/user_roles_assigner.rb
@@ -3009,14 +2998,10 @@ files:
3009
2998
  - db/migrate/20251127074809_change_guest_dynamic_fields_value_from_jsonb_to_text.rb
3010
2999
  - db/migrate/20251209022924_add_contact_fields_to_cm_tenants.rb
3011
3000
  - db/migrate/20251219035243_add_migrations_to_support_vehicle_types.rb
3012
- - db/migrate/20251224033103_migrate_cm_routes_to_cm_route_metrics.rb
3013
- - db/migrate/20251224033910_migrate_cm_vendor_routes_to_cm_routes.rb
3014
3001
  - db/migrate/20251225100000_add_age_group_to_cm_guests.rb
3015
3002
  - db/migrate/20260105024742_add_type_to_cm_pricing_actions.rb
3016
3003
  - db/migrate/20260105072146_add_nationality_group_and_age_group_to_cm_saved_guests.rb
3017
- - db/migrate/20260105072450_migrate_cm_trip_stops_to_support_trip_connection.rb
3018
3004
  - db/migrate/20260106093359_add_contact_phone_to_cm_vendor_places.rb
3019
- - db/migrate/20260108101406_add_allow_booking_to_cm_trips.rb
3020
3005
  - db/migrate/20260121024645_add_nationality_group_to_cm_guests.rb
3021
3006
  - db/migrate/20260126110528_seed_user_initial_usernames.rb
3022
3007
  - docker-compose.yml
@@ -3112,8 +3097,6 @@ files:
3112
3097
  - lib/spree_cm_commissioner/test_helper/factories/role.rb
3113
3098
  - lib/spree_cm_commissioner/test_helper/factories/role_permission_factory.rb
3114
3099
  - lib/spree_cm_commissioner/test_helper/factories/route_factory.rb
3115
- - lib/spree_cm_commissioner/test_helper/factories/route_metric_factory.rb
3116
- - lib/spree_cm_commissioner/test_helper/factories/route_photo_factory.rb
3117
3100
  - lib/spree_cm_commissioner/test_helper/factories/saved_guest_factory.rb
3118
3101
  - lib/spree_cm_commissioner/test_helper/factories/seat_layout_factory.rb
3119
3102
  - lib/spree_cm_commissioner/test_helper/factories/seat_section_factory.rb
@@ -3130,6 +3113,7 @@ files:
3130
3113
  - lib/spree_cm_commissioner/test_helper/factories/telegram_bot_factory.rb
3131
3114
  - lib/spree_cm_commissioner/test_helper/factories/tenant_factory.rb
3132
3115
  - lib/spree_cm_commissioner/test_helper/factories/transactional_email_factory.rb
3116
+ - lib/spree_cm_commissioner/test_helper/factories/trip_connection_factory.rb
3133
3117
  - lib/spree_cm_commissioner/test_helper/factories/trip_factory.rb
3134
3118
  - lib/spree_cm_commissioner/test_helper/factories/trip_stop_factory.rb
3135
3119
  - lib/spree_cm_commissioner/test_helper/factories/user_deletion_reasons_factory.rb
@@ -3147,11 +3131,7 @@ files:
3147
3131
  - lib/spree_cm_commissioner/test_helper/factories/webhook_subscriber_factory.rb
3148
3132
  - lib/spree_cm_commissioner/test_helper/factories/webhook_subscriber_rule_factory.rb
3149
3133
  - lib/spree_cm_commissioner/transit/leg.rb
3150
- - lib/spree_cm_commissioner/transit/route_stop.rb
3151
- - lib/spree_cm_commissioner/transit/route_stop_collection.rb
3152
3134
  - lib/spree_cm_commissioner/transit/seat_selection.rb
3153
- - lib/spree_cm_commissioner/transit/trip_form.rb
3154
- - lib/spree_cm_commissioner/transit/trip_stop_form.rb
3155
3135
  - lib/spree_cm_commissioner/trip_query_result.rb
3156
3136
  - lib/spree_cm_commissioner/trip_result.rb
3157
3137
  - lib/spree_cm_commissioner/user_session_jwt_token.rb
@@ -3200,9 +3180,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
3200
3180
  version: '2.7'
3201
3181
  required_rubygems_version: !ruby/object:Gem::Requirement
3202
3182
  requirements:
3203
- - - ">"
3183
+ - - ">="
3204
3184
  - !ruby/object:Gem::Version
3205
- version: 1.3.1
3185
+ version: '0'
3206
3186
  requirements:
3207
3187
  - none
3208
3188
  rubygems_version: 3.4.1
@@ -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,13 +0,0 @@
1
- module SpreeCmCommissioner
2
- module V2
3
- module Storefront
4
- class RouteMetricSerializer < BaseSerializer
5
- set_type :route
6
- attributes :route_name
7
-
8
- has_one :origin_place, serializer: ::Spree::V2::Storefront::PlaceSerializer
9
- has_one :destination_place, serializer: ::Spree::V2::Storefront::PlaceSerializer
10
- end
11
- end
12
- end
13
- 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
@@ -1,31 +0,0 @@
1
- module SpreeCmCommissioner
2
- module RouteMetrics
3
- class DecreaseTripCount
4
- prepend ::Spree::ServiceModule::Base
5
-
6
- def call(trip:)
7
- return failure(nil, 'Trip not found') unless trip
8
-
9
- route_metric = find_or_create_route_metric(trip)
10
-
11
- route_metric.with_lock do
12
- route_metric.update!(trip_count: [route_metric.trip_count - 1, 0].max)
13
- end
14
-
15
- success(trip: trip)
16
- rescue StandardError => e
17
- failure(nil, e.message)
18
- end
19
-
20
- private
21
-
22
- def find_or_create_route_metric(trip)
23
- SpreeCmCommissioner::RouteMetric.find_or_create_by!(
24
- origin_place_id: trip.origin_place_id,
25
- destination_place_id: trip.destination_place_id,
26
- route_type: trip.route_type
27
- )
28
- end
29
- end
30
- end
31
- end