From 893a09c708adc6a97dedb028ae5dfbde1a2f5d2b Mon Sep 17 00:00:00 2001
From: Khemissi Amir <amir.khemissi@insat.ucar.tn>
Date: Mon, 7 Nov 2022 16:08:49 +0100
Subject: [PATCH] V2 resources migration: Solved N+1 problem on tasks and
 unscoped queries. (#4074)

---
 lib/tasks/migrations/migrations.rake | 26 +++++++++++++++++---------
 1 file changed, 17 insertions(+), 9 deletions(-)

diff --git a/lib/tasks/migrations/migrations.rake b/lib/tasks/migrations/migrations.rake
index bced060d..30bd86da 100644
--- a/lib/tasks/migrations/migrations.rake
+++ b/lib/tasks/migrations/migrations.rake
@@ -5,14 +5,17 @@ namespace :migrations do
   COMMON = {
     headers: { "Content-Type" => "application/json" },
     batch_size: 500,
+    filtered_roles: %w[super_admin admin pending denied user],
+    filtered_user_roles: %w[super_admin pending denied]
   }.freeze
 
   desc "Migrates v2 resources to v3"
   task :roles, [] => :environment do |_task, _args|
     has_encountred_issue = 0
 
-    Role.select(:id, :name)
-        .where.not(name: Role::RESERVED_ROLE_NAMES)
+    Role.unscoped
+        .select(:id, :name)
+        .where.not(name: COMMON[:filtered_roles])
         .find_each(batch_size: COMMON[:batch_size]) do |r|
           params = { role: { name: r.name.capitalize } }
           response = Net::HTTP.post(uri('roles'), payload(params), COMMON[:headers])
@@ -40,9 +43,10 @@ namespace :migrations do
     start, stop = range(args)
     has_encountred_issue = 0
 
-    User.select(:id, :uid, :name, :email, :social_uid, :language, :role_id)
-        .joins(:role)
-        .where.not(roles: { name: %w[super_admin pending denied] }, deleted: true)
+    User.unscoped
+        .select(:id, :uid, :name, :email, :social_uid, :language, :role_id)
+        .includes(:role)
+        .where.not(roles: { name: COMMON[:filtered_user_roles] }, deleted: true)
         .find_each(start: start, finish: stop, batch_size: COMMON[:batch_size]) do |u|
           role_name = infer_role_name(u.role.name)
           params = { user: { name: u.name, email: u.email, external_id: u.social_uid, language: u.language, role: role_name } }
@@ -76,11 +80,15 @@ namespace :migrations do
     start, stop = range(args)
     has_encountred_issue = 0
 
-    filtered_roles_ids = Role.where(name: %w[super_admin pending denied]).pluck(:id).uniq
+    filtered_roles_ids = Role.unscoped
+                             .select(:id, :name)
+                             .where(name: COMMON[:filtered_user_roles])
+                             .pluck(:id)
 
-    Room.select(:id, :uid, :name, :bbb_id, :last_session, :user_id)
-        .joins(:owner)
-        .where.not(users: { role_id: filtered_roles_ids, deleted: true })
+    Room.unscoped
+        .select(:id, :uid, :name, :bbb_id, :last_session, :user_id)
+        .includes(:owner)
+        .where.not(users: { role_id: filtered_roles_ids, deleted: true }, deleted: true)
         .find_each(start: start, finish: stop, batch_size: COMMON[:batch_size]) do |r|
           params = { room: { friendly_id: r.uid,
                              name: r.name,
-- 
GitLab