From f083f29c3bb7c97d52c693e9de88cea0330baf14 Mon Sep 17 00:00:00 2001 From: evazion Date: Sun, 6 Nov 2022 01:28:47 -0500 Subject: [PATCH] users: add is_deleted flag. Add is_deleted flag to users table in preparation for fixing #4555. --- .../20221106062419_add_is_deleted_to_users.rb | 8 ++++++++ script/fixes/125_set_users_is_deleted.rb | 13 +++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 db/migrate/20221106062419_add_is_deleted_to_users.rb create mode 100755 script/fixes/125_set_users_is_deleted.rb diff --git a/db/migrate/20221106062419_add_is_deleted_to_users.rb b/db/migrate/20221106062419_add_is_deleted_to_users.rb new file mode 100644 index 000000000..a0e3feb92 --- /dev/null +++ b/db/migrate/20221106062419_add_is_deleted_to_users.rb @@ -0,0 +1,8 @@ +class AddIsDeletedToUsers < ActiveRecord::Migration[7.0] + disable_ddl_transaction! + + def change + add_column :users, :is_deleted, :boolean, null: false, default: false + add_index :users, :is_deleted, where: "is_deleted = TRUE", algorithm: :concurrently + end +end diff --git a/script/fixes/125_set_users_is_deleted.rb b/script/fixes/125_set_users_is_deleted.rb new file mode 100755 index 000000000..4e2f1d84b --- /dev/null +++ b/script/fixes/125_set_users_is_deleted.rb @@ -0,0 +1,13 @@ +#!/usr/bin/env ruby + +require_relative "base" + +with_confirmation do + deleted_users = User.where_regex(:name, "^user_[0-9]+~*$").where(is_deleted: false) + + deleted_users.find_each do |user| + puts user.attributes.slice("id", "name", "level", "created_at", "last_logged_in_at").to_json + end + + deleted_users.update_all(is_deleted: true) if ENV.fetch("FIX", "false").truthy? +end