spree_cm_commissioner 1.8.9 → 1.9.0

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 (58) hide show
  1. checksums.yaml +4 -4
  2. data/.env.example +4 -0
  3. data/Gemfile.lock +25 -1
  4. data/app/controllers/spree/admin/user_events_controller.rb +9 -7
  5. data/app/controllers/spree/api/v2/storefront/order_histories_controller.rb +1 -1
  6. data/app/controllers/spree/api/v2/storefront/vattanac_banks_controller.rb +25 -0
  7. data/app/controllers/spree/api/v2/tenant/change_passwords_controller.rb +32 -0
  8. data/app/controllers/spree/api/v2/tenant/id_cards_controller.rb +63 -0
  9. data/app/controllers/spree/api/v2/tenant/reset_passwords_controller.rb +35 -0
  10. data/app/controllers/spree/api/v2/tenant/tickets_controller.rb +25 -0
  11. data/app/controllers/spree/api/v2/tenant/user_contacts_controller.rb +33 -0
  12. data/app/controllers/spree_cm_commissioner/admin/roles_controller_decorator.rb +13 -0
  13. data/app/interactors/spree_cm_commissioner/firebase_email_fetcher.rb +25 -0
  14. data/app/interactors/spree_cm_commissioner/firebase_id_token_provider.rb +12 -1
  15. data/app/interactors/spree_cm_commissioner/user_id_token_authenticator.rb +11 -0
  16. data/app/interactors/spree_cm_commissioner/user_registration_with_id_token.rb +3 -3
  17. data/app/interactors/spree_cm_commissioner/user_vattanac_bank_web_app_authenticator.rb +30 -0
  18. data/app/interactors/spree_cm_commissioner/vattanac_bank_initiator.rb +116 -0
  19. data/app/models/spree_cm_commissioner/order_decorator.rb +2 -2
  20. data/app/models/spree_cm_commissioner/role_decorator.rb +9 -3
  21. data/app/models/spree_cm_commissioner/taxon_decorator.rb +0 -1
  22. data/app/models/spree_cm_commissioner/trip.rb +7 -0
  23. data/app/models/spree_cm_commissioner/trip_connection.rb +10 -5
  24. data/app/models/spree_cm_commissioner/user_identity_provider.rb +1 -1
  25. data/app/models/spree_cm_commissioner/variant_decorator.rb +19 -2
  26. data/app/models/spree_cm_commissioner/variant_options.rb +14 -0
  27. data/app/overrides/spree/admin/taxons/_form/vendor.html.erb.deface +1 -1
  28. data/app/overrides/spree/admin/users/_form/roles_fields.html.erb.deface +2 -0
  29. data/app/queries/spree_cm_commissioner/tickets_searcher_query.rb +21 -0
  30. data/app/queries/spree_cm_commissioner/trip_query.rb +145 -0
  31. data/app/serializers/spree/v2/tenant/id_card_serializer.rb +12 -0
  32. data/app/serializers/spree/v2/tenant/reset_password_serializer.rb +8 -0
  33. data/app/serializers/spree/v2/tenant/ticket_serializer.rb +27 -0
  34. data/app/serializers/spree/v2/tenant/user_contact_serializer.rb +11 -0
  35. data/app/services/spree_cm_commissioner/aes_encryption_service.rb +52 -0
  36. data/app/services/spree_cm_commissioner/role_permissions_constructor.rb +42 -0
  37. data/app/services/spree_cm_commissioner/role_permissions_loader.rb +57 -0
  38. data/app/services/spree_cm_commissioner/rsa_service.rb +27 -0
  39. data/app/services/spree_cm_commissioner/user_authenticator.rb +4 -0
  40. data/app/views/spree/admin/user_events/_events.html.erb +1 -1
  41. data/app/views/spree/admin/user_events/index.html.erb +7 -3
  42. data/config/routes.rb +9 -2
  43. data/db/migrate/20250328072717_add_description_to_spree_roles.rb +1 -1
  44. data/db/migrate/20250328072841_add_vendor_id_to_spree_roles.rb +1 -1
  45. data/db/migrate/20250403025619_add_presentation_to_spree_role.rb +5 -0
  46. data/db/migrate/20250403042255_add_unique_constraint_to_name_in_spree_roles.rb +7 -0
  47. data/db/migrate/20250404050117_add_archived_at_to_spree_orders.rb +1 -1
  48. data/db/migrate/20250407092556_add_variant_id_to_cm_trips.rb +7 -0
  49. data/lib/spree_cm_commissioner/test_helper/factories/product_factory.rb +9 -0
  50. data/lib/spree_cm_commissioner/test_helper/factories/role_permission_factory.rb +11 -0
  51. data/lib/spree_cm_commissioner/test_helper/factories/trip_factory.rb +6 -0
  52. data/lib/spree_cm_commissioner/test_helper/factories/user_identity_provider_factory.rb +4 -0
  53. data/lib/spree_cm_commissioner/trip_query_result.rb +14 -0
  54. data/lib/spree_cm_commissioner/user_session_jwt_token.rb +5 -0
  55. data/lib/spree_cm_commissioner/version.rb +1 -1
  56. data/lib/spree_cm_commissioner.rb +2 -0
  57. data/spree_cm_commissioner.gemspec +1 -0
  58. metadata +44 -2
@@ -50,6 +50,15 @@ FactoryBot.define do
50
50
  trip.permanent_stock = 10
51
51
  trip.stock_items = [create(:stock_item, variant: trip, stock_location: route.vendor.stock_locations.first)]
52
52
  trip.stock_items.first.adjust_count_on_hand(10)
53
+
54
+ # option types
55
+ route.option_types << create(:cm_option_type, :origin)
56
+ route.option_types << create(:cm_option_type, :destination)
57
+ route.option_types << create(:cm_option_type, :departure_time)
58
+ route.option_types << create(:cm_option_type, :duration_in_hours)
59
+ route.option_types << create(:cm_option_type, :duration_in_minutes)
60
+ route.option_types << create(:cm_option_type, :allow_seat_selection)
61
+ route.option_types << create(:cm_option_type, :vehicle)
53
62
  end
54
63
  end
55
64
 
@@ -0,0 +1,11 @@
1
+ FactoryBot.define do
2
+ factory :permission, class: 'SpreeCmCommissioner::Permission' do
3
+ entry { 'organizer/events' }
4
+ action { 'view_events' }
5
+ end
6
+
7
+ factory :role_permission, class: 'SpreeCmCommissioner::RolePermission' do
8
+ association :role, factory: :role
9
+ association :permission, factory: :permission
10
+ end
11
+ end
@@ -0,0 +1,6 @@
1
+ FactoryBot.define do
2
+ factory :trip_connection, class: 'SpreeCmCommissioner::TripConnection' do
3
+ association :from_trip, factory: :variant
4
+ association :to_trip, factory: :variant
5
+ end
6
+ end
@@ -8,5 +8,9 @@ FactoryBot.define do
8
8
  trait :telegram do
9
9
  identity_type { SpreeCmCommissioner::UserIdentityProvider.identity_types[:telegram] }
10
10
  end
11
+
12
+ trait :vattanac_bank do
13
+ identity_type { SpreeCmCommissioner::UserIdentityProvider.identity_types[:vattanac_bank] }
14
+ end
11
15
  end
12
16
  end
@@ -0,0 +1,14 @@
1
+ module SpreeCmCommissioner
2
+ class TripQueryResult
3
+ attr_reader :trips, :connection_id
4
+
5
+ def initialize(trips, connection_id: nil)
6
+ @trips = Array(trips)
7
+ @connection_id = connection_id
8
+ end
9
+
10
+ def direct?
11
+ @trips.size == 1
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ module SpreeCmCommissioner
2
+ class UserSessionJwtToken
3
+ extend JwtToken
4
+ end
5
+ end
@@ -1,5 +1,5 @@
1
1
  module SpreeCmCommissioner
2
- VERSION = '1.8.9'.freeze
2
+ VERSION = '1.9.0'.freeze
3
3
 
4
4
  module_function
5
5
 
@@ -15,7 +15,9 @@ require 'spree_cm_commissioner/s3_url_generator'
15
15
  require 'spree_cm_commissioner/jwt_token'
16
16
  require 'spree_cm_commissioner/line_item_jwt_token'
17
17
  require 'spree_cm_commissioner/order_jwt_token'
18
+ require 'spree_cm_commissioner/user_session_jwt_token'
18
19
  require 'spree_cm_commissioner/trip_result'
20
+ require 'spree_cm_commissioner/trip_query_result'
19
21
  require 'spree_cm_commissioner/trip_seat_layout_result'
20
22
 
21
23
  require 'activerecord_multi_tenant'
@@ -33,6 +33,7 @@ Gem::Specification.new do |s|
33
33
  s.add_dependency 'aws-sdk-ecs'
34
34
  s.add_dependency 'google-cloud-firestore'
35
35
  s.add_dependency 'google-cloud-recaptcha_enterprise'
36
+ s.add_dependency 'firebase-admin-sdk', '~> 0.3.1'
36
37
  s.add_dependency 'jwt', '>= 2.5.0'
37
38
  s.add_dependency 'elasticsearch', '~> 8.5'
38
39
  s.add_dependency 'interactor', '~> 3.1'
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: 1.8.9
4
+ version: 1.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - You
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-04-07 00:00:00.000000000 Z
11
+ date: 2025-04-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: spree
@@ -164,6 +164,20 @@ dependencies:
164
164
  - - ">="
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: firebase-admin-sdk
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: 0.3.1
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: 0.3.1
167
181
  - !ruby/object:Gem::Dependency
168
182
  name: jwt
169
183
  requirement: !ruby/object:Gem::Requirement
@@ -827,6 +841,7 @@ files:
827
841
  - app/controllers/spree/api/v2/storefront/user_profiles_controller.rb
828
842
  - app/controllers/spree/api/v2/storefront/user_promotion_controller.rb
829
843
  - app/controllers/spree/api/v2/storefront/user_registration_with_pin_codes_controller.rb
844
+ - app/controllers/spree/api/v2/storefront/vattanac_banks_controller.rb
830
845
  - app/controllers/spree/api/v2/storefront/vendor_photos_controller.rb
831
846
  - app/controllers/spree/api/v2/storefront/waiting_room_sessions_controller.rb
832
847
  - app/controllers/spree/api/v2/storefront/wished_items_controller.rb
@@ -840,19 +855,24 @@ files:
840
855
  - app/controllers/spree/api/v2/tenant/cart_controller.rb
841
856
  - app/controllers/spree/api/v2/tenant/cart_guests_controller.rb
842
857
  - app/controllers/spree/api/v2/tenant/cart_payment_method_groups_controller.rb
858
+ - app/controllers/spree/api/v2/tenant/change_passwords_controller.rb
843
859
  - app/controllers/spree/api/v2/tenant/checkout_controller.rb
844
860
  - app/controllers/spree/api/v2/tenant/customer_notifications_controller.rb
845
861
  - app/controllers/spree/api/v2/tenant/guests_controller.rb
846
862
  - app/controllers/spree/api/v2/tenant/homepage_sections_controller.rb
863
+ - app/controllers/spree/api/v2/tenant/id_cards_controller.rb
847
864
  - app/controllers/spree/api/v2/tenant/line_items_controller.rb
848
865
  - app/controllers/spree/api/v2/tenant/notifications_controller.rb
849
866
  - app/controllers/spree/api/v2/tenant/pin_code_checkers_controller.rb
850
867
  - app/controllers/spree/api/v2/tenant/pin_code_generators_controller.rb
851
868
  - app/controllers/spree/api/v2/tenant/products_controller.rb
852
869
  - app/controllers/spree/api/v2/tenant/profile_images_controller.rb
870
+ - app/controllers/spree/api/v2/tenant/reset_passwords_controller.rb
853
871
  - app/controllers/spree/api/v2/tenant/s3_signed_urls_controller.rb
854
872
  - app/controllers/spree/api/v2/tenant/taxons_controller.rb
873
+ - app/controllers/spree/api/v2/tenant/tickets_controller.rb
855
874
  - app/controllers/spree/api/v2/tenant/user_account_linkages_controller.rb
875
+ - app/controllers/spree/api/v2/tenant/user_contacts_controller.rb
856
876
  - app/controllers/spree/api/v2/tenant/user_device_tokens_controller.rb
857
877
  - app/controllers/spree/api/v2/tenant/user_registration_with_pin_codes_controller.rb
858
878
  - app/controllers/spree/api/v2/tenant/vendors_controller.rb
@@ -915,6 +935,7 @@ files:
915
935
  - app/controllers/spree_cm_commissioner/admin/orders_controller_decorator.rb
916
936
  - app/controllers/spree_cm_commissioner/admin/payments_controller_decorator.rb
917
937
  - app/controllers/spree_cm_commissioner/admin/products_controller_decorator.rb
938
+ - app/controllers/spree_cm_commissioner/admin/roles_controller_decorator.rb
918
939
  - app/controllers/spree_cm_commissioner/admin/user_sessions_controller_decorator.rb
919
940
  - app/controllers/spree_cm_commissioner/admin/variants_controller_decorator.rb
920
941
  - app/controllers/spree_cm_commissioner/api/v2/storefront/cart_controller_decorator.rb
@@ -980,6 +1001,7 @@ files:
980
1001
  - app/interactors/spree_cm_commissioner/enqueue_cart/add_item_status_marker.rb
981
1002
  - app/interactors/spree_cm_commissioner/event_qr_generator.rb
982
1003
  - app/interactors/spree_cm_commissioner/existing_account_checker.rb
1004
+ - app/interactors/spree_cm_commissioner/firebase_email_fetcher.rb
983
1005
  - app/interactors/spree_cm_commissioner/firebase_id_token_provider.rb
984
1006
  - app/interactors/spree_cm_commissioner/google_places_fetcher.rb
985
1007
  - app/interactors/spree_cm_commissioner/guest_id_card_manager.rb
@@ -1043,6 +1065,8 @@ files:
1043
1065
  - app/interactors/spree_cm_commissioner/user_registration_with_id_token.rb
1044
1066
  - app/interactors/spree_cm_commissioner/user_roles_assigner.rb
1045
1067
  - app/interactors/spree_cm_commissioner/user_telegram_web_app_authenticator.rb
1068
+ - app/interactors/spree_cm_commissioner/user_vattanac_bank_web_app_authenticator.rb
1069
+ - app/interactors/spree_cm_commissioner/vattanac_bank_initiator.rb
1046
1070
  - app/interactors/spree_cm_commissioner/vendor_nearby_place_builder.rb
1047
1071
  - app/interactors/spree_cm_commissioner/vendor_updater.rb
1048
1072
  - app/interactors/spree_cm_commissioner/video_on_demand_creator.rb
@@ -1386,6 +1410,7 @@ files:
1386
1410
  - app/overrides/spree/admin/taxons/edit/title.html.erb.deface
1387
1411
  - app/overrides/spree/admin/users/_form/fields.html.erb.deface
1388
1412
  - app/overrides/spree/admin/users/_form/profile_pic.html.erb.deface
1413
+ - app/overrides/spree/admin/users/_form/roles_fields.html.erb.deface
1389
1414
  - app/overrides/spree/admin/users/_tabs/tabs.html.erb.deface
1390
1415
  - app/overrides/spree/admin/users/index/body.html.erb.deface
1391
1416
  - app/overrides/spree/admin/users/index/headers.html.erb.deface
@@ -1422,6 +1447,8 @@ files:
1422
1447
  - app/queries/spree_cm_commissioner/pie_chart_event_aggregator_queries.rb
1423
1448
  - app/queries/spree_cm_commissioner/subscription_orders_query.rb
1424
1449
  - app/queries/spree_cm_commissioner/subscription_revenue_overview_query.rb
1450
+ - app/queries/spree_cm_commissioner/tickets_searcher_query.rb
1451
+ - app/queries/spree_cm_commissioner/trip_query.rb
1425
1452
  - app/queries/spree_cm_commissioner/trip_search_query.rb
1426
1453
  - app/queries/spree_cm_commissioner/trip_seat_layout_query.rb
1427
1454
  - app/queries/spree_cm_commissioner/users_by_event_fetcher_query.rb
@@ -1485,6 +1512,7 @@ files:
1485
1512
  - app/serializers/spree/v2/tenant/guest_serializer.rb
1486
1513
  - app/serializers/spree/v2/tenant/homepage_section_relatable_serializer.rb
1487
1514
  - app/serializers/spree/v2/tenant/homepage_section_serializer.rb
1515
+ - app/serializers/spree/v2/tenant/id_card_serializer.rb
1488
1516
  - app/serializers/spree/v2/tenant/image_serializer.rb
1489
1517
  - app/serializers/spree/v2/tenant/line_item_serializer.rb
1490
1518
  - app/serializers/spree/v2/tenant/notification_serializer.rb
@@ -1493,12 +1521,15 @@ files:
1493
1521
  - app/serializers/spree/v2/tenant/order_serializer.rb
1494
1522
  - app/serializers/spree/v2/tenant/payment_method_group_serializer.rb
1495
1523
  - app/serializers/spree/v2/tenant/payment_method_serializer.rb
1524
+ - app/serializers/spree/v2/tenant/reset_password_serializer.rb
1496
1525
  - app/serializers/spree/v2/tenant/role_serializer.rb
1497
1526
  - app/serializers/spree/v2/tenant/s3_signed_url_serializer.rb
1498
1527
  - app/serializers/spree/v2/tenant/stock_item_serializer.rb
1499
1528
  - app/serializers/spree/v2/tenant/stock_location_serializer.rb
1500
1529
  - app/serializers/spree/v2/tenant/taxon_serializer.rb
1501
1530
  - app/serializers/spree/v2/tenant/taxonomy_serializer.rb
1531
+ - app/serializers/spree/v2/tenant/ticket_serializer.rb
1532
+ - app/serializers/spree/v2/tenant/user_contact_serializer.rb
1502
1533
  - app/serializers/spree/v2/tenant/user_device_token_serializer.rb
1503
1534
  - app/serializers/spree/v2/tenant/user_identity_provider_serializer.rb
1504
1535
  - app/serializers/spree/v2/tenant/user_profile_serializer.rb
@@ -1563,6 +1594,7 @@ files:
1563
1594
  - app/services/sms_adapter/base.rb
1564
1595
  - app/services/sms_adapter/plasgate.rb
1565
1596
  - app/services/sms_adapter/twillio.rb
1597
+ - app/services/spree_cm_commissioner/aes_encryption_service.rb
1566
1598
  - app/services/spree_cm_commissioner/cart/add_guest.rb
1567
1599
  - app/services/spree_cm_commissioner/cart/destroy_decorator.rb
1568
1600
  - app/services/spree_cm_commissioner/cart/recalculate_decorator.rb
@@ -1595,6 +1627,9 @@ files:
1595
1627
  - app/services/spree_cm_commissioner/orders/generate_commissions_decorator.rb
1596
1628
  - app/services/spree_cm_commissioner/organizer/export_guest_csv_service.rb
1597
1629
  - app/services/spree_cm_commissioner/penalty_calculator.rb
1630
+ - app/services/spree_cm_commissioner/role_permissions_constructor.rb
1631
+ - app/services/spree_cm_commissioner/role_permissions_loader.rb
1632
+ - app/services/spree_cm_commissioner/rsa_service.rb
1598
1633
  - app/services/spree_cm_commissioner/seeds/roles_decorator.rb
1599
1634
  - app/services/spree_cm_commissioner/user_authenticator.rb
1600
1635
  - app/services/spree_cm_commissioner/vehicle_option_value_creator.rb
@@ -2318,9 +2353,12 @@ files:
2318
2353
  - db/migrate/20250328072717_add_description_to_spree_roles.rb
2319
2354
  - db/migrate/20250328072841_add_vendor_id_to_spree_roles.rb
2320
2355
  - db/migrate/20250328072947_remove_unique_constraint_from_name_in_spree_roles.rb
2356
+ - db/migrate/20250403025619_add_presentation_to_spree_role.rb
2321
2357
  - db/migrate/20250403040036_install_blazer.rb
2358
+ - db/migrate/20250403042255_add_unique_constraint_to_name_in_spree_roles.rb
2322
2359
  - db/migrate/20250403083001_create_spree_cm_commissioner_taxon_blazer_query.rb
2323
2360
  - db/migrate/20250404050117_add_archived_at_to_spree_orders.rb
2361
+ - db/migrate/20250407092556_add_variant_id_to_cm_trips.rb
2324
2362
  - docker-compose.yml
2325
2363
  - docs/option_types/attr_types.md
2326
2364
  - docs/private_key.pem
@@ -2393,6 +2431,7 @@ files:
2393
2431
  - lib/spree_cm_commissioner/test_helper/factories/product_factory.rb
2394
2432
  - lib/spree_cm_commissioner/test_helper/factories/products_taxons_factory.rb
2395
2433
  - lib/spree_cm_commissioner/test_helper/factories/promotion_factory.rb
2434
+ - lib/spree_cm_commissioner/test_helper/factories/role_permission_factory.rb
2396
2435
  - lib/spree_cm_commissioner/test_helper/factories/service_calendar_factory.rb
2397
2436
  - lib/spree_cm_commissioner/test_helper/factories/sms_logs.rb
2398
2437
  - lib/spree_cm_commissioner/test_helper/factories/state_factory.rb
@@ -2406,6 +2445,7 @@ files:
2406
2445
  - lib/spree_cm_commissioner/test_helper/factories/telegram_bot_factory.rb
2407
2446
  - lib/spree_cm_commissioner/test_helper/factories/tenant_factory.rb
2408
2447
  - lib/spree_cm_commissioner/test_helper/factories/transit_place_factory.rb
2448
+ - lib/spree_cm_commissioner/test_helper/factories/trip_factory.rb
2409
2449
  - lib/spree_cm_commissioner/test_helper/factories/user_deletion_reasons_factory.rb
2410
2450
  - lib/spree_cm_commissioner/test_helper/factories/user_event_factory.rb
2411
2451
  - lib/spree_cm_commissioner/test_helper/factories/user_factory.rb
@@ -2421,8 +2461,10 @@ files:
2421
2461
  - lib/spree_cm_commissioner/test_helper/factories/video_on_demand_factory.rb
2422
2462
  - lib/spree_cm_commissioner/test_helper/factories/webhook_subscriber_factory.rb
2423
2463
  - lib/spree_cm_commissioner/test_helper/factories/webhook_subscriber_rule_factory.rb
2464
+ - lib/spree_cm_commissioner/trip_query_result.rb
2424
2465
  - lib/spree_cm_commissioner/trip_result.rb
2425
2466
  - lib/spree_cm_commissioner/trip_seat_layout_result.rb
2467
+ - lib/spree_cm_commissioner/user_session_jwt_token.rb
2426
2468
  - lib/spree_cm_commissioner/version.rb
2427
2469
  - lib/tasks/customer_notification_cron_scheduler.rake
2428
2470
  - lib/tasks/ensure_event_for_guests.rake