scinote-web/db/migrate/20231011103114_migrate_notification_to_noticed.rb

59 lines
1.8 KiB
Ruby
Raw Normal View History

2023-10-11 19:43:20 +08:00
# frozen_string_literal: true
class MigrateNotificationToNoticed < ActiveRecord::Migration[7.0]
class UserNotification < ApplicationRecord
belongs_to :notification
end
2023-10-11 19:43:20 +08:00
def up
2023-11-09 17:33:42 +08:00
add_column :notifications, :params, :jsonb, default: {}, null: false
add_column :notifications, :type, :string
2023-10-11 19:43:20 +08:00
add_column :notifications, :read_at, :datetime
2023-10-12 17:47:29 +08:00
add_reference :notifications, :recipient, polymorphic: true
2023-10-11 19:43:20 +08:00
Notification.reset_column_information
2023-10-11 19:43:20 +08:00
type_mapping = {
0 => 'ActivityNotification',
1 => 'GeneralNotification',
5 => 'DeliveryNotification',
7 => 'DeliveryNotification'
2023-10-11 19:43:20 +08:00
}
2023-11-22 20:52:27 +08:00
UserNotification.where('created_at > ?', 3.months.ago).includes(:notification).find_each do |user_notification|
2023-11-09 17:33:42 +08:00
notification = user_notification.notification
2023-10-11 19:43:20 +08:00
new_type = type_mapping[notification.type_of]
new_type ||= 'GeneralNotification'
2023-10-11 19:43:20 +08:00
params = {
title: notification.title,
message: notification.message,
legacy: true
}
params[:error] = notification.type_of == 7 if new_type == 'DeliveryNotification'
2023-11-09 17:33:42 +08:00
Notification.create!(
2023-10-11 19:43:20 +08:00
params: params,
type: new_type,
2023-11-09 17:33:42 +08:00
type_of: notification.type_of,
2023-10-11 19:43:20 +08:00
read_at: (user_notification.updated_at if user_notification.checked),
recipient_id: user_notification.user_id,
recipient_type: 'User',
created_at: user_notification.created_at,
updated_at: user_notification.updated_at
)
end
2023-10-12 17:47:29 +08:00
UserNotification.delete_all
Notification.where(type: nil).delete_all
drop_table :user_notifications
change_column_null :notifications, :type, false
2023-10-11 19:43:20 +08:00
remove_column :notifications, :type_of
remove_column :notifications, :title
remove_column :notifications, :message
remove_column :notifications, :generator_user_id
end
end