Skip to content

Commit 0abebe5

Browse files
albanpeignierLuc Donnet
authored andcommitted
Merged in CHOUETTE-3087-improve-migration-time (pull request #1540)
CHOUETTE-3087 Migration Stop Area fare_code into Fare Zone by Workgroup Approved-by: Luc Donnet
2 parents 37e8d96 + 8edbf9a commit 0abebe5

File tree

1 file changed

+25
-11
lines changed

1 file changed

+25
-11
lines changed

db/migrate/20230907104115_remove_fare_code_from_stop_areas.rb

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,34 @@
1+
# frozen_string_literal: true
2+
13
class RemoveFareCodeFromStopAreas < ActiveRecord::Migration[5.2]
24
def change
35
on_public_schema_only do
4-
Chouette::StopArea.where.not(fare_code: nil).includes(stop_area_provider: {workbench: :workgroup}).find_each do |stop_area|
5-
stop_area_provider = stop_area.stop_area_provider
6-
workbench = stop_area_provider.workbench
7-
workgroup = workbench.workgroup
6+
impacted_workgroup_ids = Chouette::StopArea.where.not(fare_code: nil).joins(stop_area_provider: :workbench).distinct.pluck(:workgroup_id)
7+
# Load every impacted Workgroup
8+
impacted_workgroups = Workgroup.where(id: impacted_workgroup_ids)
89

9-
fare_provider = workbench.default_fare_provider
10-
code_space = workgroup.code_spaces.default
11-
value = stop_area.fare_code
10+
impacted_workgroups.each do |workgroup|
11+
# .. to avoid Workgroup loading in loop :(
12+
CustomFieldsSupport.within_workgroup(workgroup) do
13+
code_space = workgroup.code_spaces.default
14+
stop_areas_with_fare_code = workgroup.stop_area_referential.stop_areas
15+
.where.not(fare_code: nil).includes(stop_area_provider: :workbench)
1216

13-
zone = fare_provider.fare_zones.first_or_create_by_code(code_space, value) do |zone|
14-
zone.name = value
15-
end
17+
# Migrate all Workgroup StopAreas
18+
stop_areas_with_fare_code.find_each do |stop_area|
19+
stop_area_provider = stop_area.stop_area_provider
20+
workbench = stop_area_provider.workbench
21+
fare_provider = workbench.default_fare_provider
22+
23+
value = stop_area.fare_code
1624

17-
stop_area.stop_area_zones.create(zone: zone)
25+
zone = fare_provider.fare_zones.first_or_create_by_code(code_space, value) do |zone|
26+
zone.name = value
27+
end
28+
29+
stop_area.stop_area_zones.create(zone: zone)
30+
end
31+
end
1832
end
1933

2034
remove_column :stop_areas, :fare_code

0 commit comments

Comments
 (0)