From caeadec4f88bc00f2b251645e502ae385adbf7e2 Mon Sep 17 00:00:00 2001 From: Jason Gessner Date: Mon, 8 Jun 2026 02:22:11 +0000 Subject: [PATCH] Update decklist import to only write missing decklists unless forced. --- lib/tasks/import_decklists.rake | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/lib/tasks/import_decklists.rake b/lib/tasks/import_decklists.rake index b30b47e6..f3f9b11d 100644 --- a/lib/tasks/import_decklists.rake +++ b/lib/tasks/import_decklists.rake @@ -39,13 +39,32 @@ namespace :import_decklists do cards_by_id[card.id] = card end - retrieve_decklists(args[:date])['data'].each do |decklist| + force_import = ENV['FORCE_IMPORT'] == '1' + puts 'FORCE_IMPORT is set to 1. All decklists will be imported.' if force_import + + decklists = retrieve_decklists(args[:date])['data'] || [] + fetched_count = decklists.size + puts "Fetched #{fetched_count} decklist(s) from the API." + + uuids = decklists.pluck('uuid').compact + existing_uuids = Decklist.where(id: uuids).pluck(:id).to_set + + decklists_to_import = if force_import + decklists + else + decklists.reject { |d| existing_uuids.include?(d['uuid']) } + end + + written_count = 0 + decklists_to_import.each do |decklist| puts format('Importing "%s" by %s (%s)', name: decklist['name'], username: decklist['user_name'], uuid: decklist['uuid']) ActiveRecord::Base.transaction do + User.find_or_create_by!(id: decklist['user_name']) + d = Decklist.find_or_initialize_by(id: decklist['uuid']) d.name = decklist['name'] d.user_id = decklist['user_name'] @@ -75,6 +94,13 @@ namespace :import_decklists do end end end + written_count += 1 + end + + if force_import + puts "Imported/updated #{written_count} decklist(s) out of #{fetched_count} fetched." + else + puts "Imported #{written_count} new decklist(s) out of #{fetched_count} fetched." end end end