Add migration task to use stable_id in filters

This commit is contained in:
Paul Chavard 2020-10-01 18:46:39 +02:00
parent 9848dc2295
commit a9a4f6e2a8
2 changed files with 46 additions and 1 deletions

View file

@ -291,7 +291,8 @@ class ProcedurePresentation < ApplicationRecord
end
def check_allowed_filter_columns
filters.each do |_, columns|
filters.each do |key, columns|
return true if key == 'migrated'
columns.each do |column|
check_allowed_field(:filters, column)
end

View file

@ -0,0 +1,44 @@
namespace :after_party do
desc 'Deployment task: migrate_filters_to_use_stable_id'
task migrate_filters_to_use_stable_id: :environment do
puts "Running deploy task 'migrate_filters_to_use_stable_id'"
procedure_presentations = ProcedurePresentation.where("filters -> 'migrated' IS NULL")
progress = ProgressReport.new(procedure_presentations.count)
procedure_presentations.find_each do |procedure_presentation|
filters = procedure_presentation.filters
sort = procedure_presentation.sort
['tous', 'suivis', 'traites', 'a-suivre', 'archives'].each do |statut|
filters[statut] = filters[statut].map do |filter|
table, column, value = filter.values_at('table', 'column', 'value')
if table && (table == 'type_de_champ' || table == 'type_de_champ_private')
type_de_champ = TypeDeChamp.find_by(id: column)
if type_de_champ
column = type_de_champ.stable_id
end
end
[table, column, value]
end
end
table, column = sort.values_at('table', 'column')
if table && (table == 'type_de_champ' || table == 'type_de_champ_private')
type_de_champ = TypeDeChamp.find_by(id: column)
if type_de_champ
sort['column'] = type_de_champ.stable_id
end
end
filters['migrated'] = true
procedure_presentation.update_columns(filters: filters, sort: sort)
progress.inc
end
progress.finish
# Update task as completed. If you remove the line below, the task will
# run with every deploy (or every time you call after_party:run).
AfterParty::TaskRecord
.create version: AfterParty::TaskRecorder.new(__FILE__).timestamp
end
end