# frozen_string_literal: true # rubocop:disable Metrics/BlockLength namespace :notifications do desc 'Copies system notifications to newly created data structure.' \ 'IT SHOULD BE RUN ONE TIME ONLY' task copy_system_notifications: :environment do t0 = Time.now system_notifications = Notification .where(type_of: :system_message) .where(generator_user_id: nil) .where.not('title like ?', 'Congratulations%') system_notifications.each do |system_notification| new_notification = SystemNotification.create!( source_id: -1, title: system_notification.title, description: system_notification.message, modal_title: system_notification.title, modal_body: system_notification.message, show_on_login: false, source_created_at: system_notification.created_at, last_time_changed_at: system_notification.created_at ) created_at = system_notification.created_at sql = ' INSERT INTO user_system_notifications ( user_id, created_at, updated_at, system_notification_id, seen_at, read_at ) VALUES ' user_notifications = UserNotification .where(notification_id: system_notification.id) values_array = user_notifications.map do |user_notification| user_notification .slice(:user_id, :created_at, :updated_at) .merge(system_notification_id: new_notification.id) .merge(seen_at: created_at, read_at: created_at) .values .map { |v| "'#{v}'" } .join(',') end values_sql = values_array .map { |v| "(#{v})" } .join(',') sql += values_sql ActiveRecord::Base.connection.execute(sql) end t1 = Time.now puts "Task took #{t1 - t0}" end desc 'Removes obsolete system notifications from notifications table.' task delete_obsolete_system_notifications: :environment do system_notifications = Notification .where(type_of: :system_message) .where(generator_user_id: nil) .where.not('title like ?', 'Congratulations%') UserNotification .where(notification_id: system_notifications.pluck(:id)) .delete_all system_notifications.delete_all end end # rubocop:enable Metrics/BlockLength