Files
fizzy/script/migrations/20260204-fix-misplaced-comment-events.rb
T
Mike Dalessio 14aa95d982 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.
2026-02-04 15:27:33 -05:00

60 lines
1.6 KiB
Ruby

# 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)"