🎯 Intention


Le rattrapage de donnĂ©es est le processus consistant Ă  ajouter, mettre Ă  jour ou transfĂ©rer certaines donnĂ©es de l’application. Les cas les plus courants de migration de donnĂ©es sont les suivants :

<aside> ✅ PrĂ©-requis

✅ Points clĂ©s


Point clé

Visuel / Exemple


🔗 Identifier le critĂšre des donnĂ©es Ă  rattraper

Raison : Le rattrapage peut ĂȘtre long, surtout quand il y a beaucoup de donnĂ©es, donc on veut Ă©viter les traitements inutiles

❌ BAD
class RegenerePhotoDetoureeeManquanteJob < ApplicationJob
	def perform
	  Vetement.find_each do |vetement|
	     ...
	  end
	end
end

✅ GOOD
class RegenerePhotoDetoureeeManquanteJob < ApplicationJob
	def perform
		# on utilise un scope pour choisir les vĂȘtements
	  Vetement.sans_photo_detouree.find_each do |vetement|
	     ...
	  end
	end
end

🔗 Charger les donnĂ©es par lot ****

Raison : ça va charger les données par lot qui ne va pas saturer la mémoire. Alors que si vous faites un .all sur des millions lignes, ça va saturer.

❌ BAD
class RegenerePhotoDetoureeeManquanteJob < ApplicationJob
	def perform
	  Vetement.sans_photo_detouree.each do |vetement|
	     ...
	  end
	end
end

✅ GOOD
class RegenerePhotoDetoureeeManquanteJob < ApplicationJob
	def perform
		# on utilise un scope pour choisir les vĂȘtements
	  Vetement.sans_photo_detouree.find_each do |vetement|
	     ...
	  end
	end
end

🔗 Logger ****

Raison : facilitera le dĂ©bogage et l'audit, c’est plus facile Ă  retrouver quand on cherche dans les logs

# Script de rattrapage pour compléter les adresses email manquantes des utilisateurs
class UserEmailDataCatchUpJob < ApplicationJob
  def perform
    # Log le début de l'opération
    Rails.logger.info "DĂ©but du rattrapage des emails pour les utilisateurs sans email"

      User.where(email: nil).find_each do |user|
        if (success)
          Rails.logger.info "Email mis Ă  jour pour l'utilisateur #{user.id}: #{generated_email}"
        else
          Rails.logger.error "Échec de la mise à jour de l'email pour l'utilisateur #{user.id}: #{user.errors.full_messages.join(", ")}"
        end
      end
    end

    # Log la fin de l'opération
    Rails.logger.info "Fin du rattrapage des emails"
  end
end