Add migration script to fix misplaced comment events (#2487)
Finds comment events that are on the wrong board (after a card move) and updates them to the correct board.
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
# Fix comment events that are on the wrong board after a card move.
|
||||
#
|
||||
# See https://github.com/basecamp/fizzy/pull/2486
|
||||
#
|
||||
# Usage:
|
||||
# bin/rails runner script/migrations/20260204-fix-misplaced-comment-events.rb # dry run
|
||||
# bin/rails runner script/migrations/20260204-fix-misplaced-comment-events.rb --fix # actually fix
|
||||
#
|
||||
dry_run = !ARGV.include?("--fix")
|
||||
|
||||
puts dry_run ? "DRY RUN - no changes will be made\n\n" : "FIXING misplaced events\n\n"
|
||||
|
||||
misplaced_events = Event
|
||||
.where(eventable_type: "Comment")
|
||||
.joins("INNER JOIN comments ON comments.id = events.eventable_id")
|
||||
.joins("INNER JOIN cards ON cards.id = comments.card_id")
|
||||
.where("events.board_id != cards.board_id")
|
||||
|
||||
total = misplaced_events.count
|
||||
puts "Found #{total} misplaced comment events\n\n"
|
||||
|
||||
if total.zero?
|
||||
puts "Nothing to fix!"
|
||||
exit
|
||||
end
|
||||
|
||||
fixed = 0
|
||||
skipped = 0
|
||||
|
||||
misplaced_events.find_each.with_index do |event, index|
|
||||
comment = event.eventable
|
||||
card = comment&.card
|
||||
old_board = event.board
|
||||
new_board = card&.board
|
||||
|
||||
puts "[#{index + 1}/#{total}] Event #{event.id}"
|
||||
|
||||
if card.nil? || new_board.nil?
|
||||
puts " Skipping - orphaned data (comment or card deleted)"
|
||||
skipped += 1
|
||||
puts
|
||||
next
|
||||
end
|
||||
|
||||
puts " Card ##{card.number}: #{card.title.truncate(40)}"
|
||||
puts " Moving from board '#{old_board&.name || 'nil'}' to '#{new_board.name}'"
|
||||
|
||||
if dry_run
|
||||
puts " (skipped - dry run)"
|
||||
else
|
||||
event.update!(board: new_board)
|
||||
fixed += 1
|
||||
puts " Fixed!"
|
||||
end
|
||||
|
||||
puts
|
||||
end
|
||||
|
||||
puts "Done. #{dry_run ? "Run with --fix to apply changes." : "Fixed #{fixed} events."} (#{skipped} skipped)"
|
||||
Reference in New Issue
Block a user