2024-02-29 16:35:54 -05:00
|
|
|
|
namespace :demo_data do
|
2025-06-14 11:53:53 -04:00
|
|
|
|
desc "Load empty demo dataset (no financial data)"
|
2024-07-11 08:37:21 -04:00
|
|
|
|
task empty: :environment do
|
2025-06-14 11:53:53 -04:00
|
|
|
|
start = Time.now
|
|
|
|
|
puts "🚀 Loading EMPTY demo data…"
|
|
|
|
|
|
|
|
|
|
Demo::Generator.new.generate_empty_data!
|
|
|
|
|
|
|
|
|
|
puts "✅ Done in #{(Time.now - start).round(2)}s"
|
2024-07-01 10:49:43 -04:00
|
|
|
|
end
|
|
|
|
|
|
2025-06-14 11:53:53 -04:00
|
|
|
|
desc "Load new-user demo dataset (family created but not onboarded)"
|
2025-05-01 16:47:14 -04:00
|
|
|
|
task new_user: :environment do
|
2025-06-14 11:53:53 -04:00
|
|
|
|
start = Time.now
|
|
|
|
|
puts "🚀 Loading NEW-USER demo data…"
|
2025-05-01 16:47:14 -04:00
|
|
|
|
|
2025-06-14 11:53:53 -04:00
|
|
|
|
Demo::Generator.new.generate_new_user_data!
|
2025-02-21 11:57:59 -05:00
|
|
|
|
|
2025-06-14 11:53:53 -04:00
|
|
|
|
puts "✅ Done in #{(Time.now - start).round(2)}s"
|
2025-02-24 12:51:13 -05:00
|
|
|
|
end
|
|
|
|
|
|
2025-06-14 11:53:53 -04:00
|
|
|
|
desc "Load full realistic demo dataset"
|
|
|
|
|
task default: :environment do
|
|
|
|
|
start = Time.now
|
|
|
|
|
seed = ENV.fetch("SEED", Random.new_seed)
|
|
|
|
|
puts "🚀 Loading FULL demo data (seed=#{seed})…"
|
|
|
|
|
|
|
|
|
|
generator = Demo::Generator.new(seed: seed)
|
|
|
|
|
generator.generate_default_data!
|
|
|
|
|
|
2025-07-08 10:36:53 -04:00
|
|
|
|
validate_demo_data
|
2025-06-14 11:53:53 -04:00
|
|
|
|
|
|
|
|
|
elapsed = Time.now - start
|
|
|
|
|
puts "🎉 Demo data ready in #{elapsed.round(2)}s"
|
2025-02-21 11:57:59 -05:00
|
|
|
|
end
|
2025-06-11 18:48:39 -04:00
|
|
|
|
|
2025-06-14 11:53:53 -04:00
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
# Validation helpers
|
|
|
|
|
# ---------------------------------------------------------------------------
|
2025-07-08 10:36:53 -04:00
|
|
|
|
def validate_demo_data
|
2025-06-14 11:53:53 -04:00
|
|
|
|
total_entries = Entry.count
|
|
|
|
|
trade_entries = Entry.where(entryable_type: "Trade").count
|
|
|
|
|
categorized_txn = Transaction.joins(:category).count
|
|
|
|
|
txn_total = Transaction.count
|
|
|
|
|
|
|
|
|
|
coverage = ((categorized_txn.to_f / txn_total) * 100).round(1)
|
|
|
|
|
|
|
|
|
|
puts "\n📊 Validation Summary".ljust(40, "-")
|
|
|
|
|
puts "Entries total: #{total_entries}"
|
|
|
|
|
puts "Trade entries: #{trade_entries} (#{trade_entries.between?(500, 1000) ? '✅' : '❌'})"
|
|
|
|
|
puts "Txn categorization: #{coverage}% (>=75% ✅)"
|
|
|
|
|
|
|
|
|
|
unless total_entries.between?(8_000, 12_000)
|
2025-07-08 10:36:53 -04:00
|
|
|
|
puts "Total entries #{total_entries} outside 8k–12k range"
|
2025-06-14 11:53:53 -04:00
|
|
|
|
end
|
2025-07-08 10:36:53 -04:00
|
|
|
|
|
2025-06-14 11:53:53 -04:00
|
|
|
|
unless trade_entries.between?(500, 1000)
|
2025-07-08 10:36:53 -04:00
|
|
|
|
puts "Trade entries #{trade_entries} outside 500–1000 range"
|
2025-06-14 11:53:53 -04:00
|
|
|
|
end
|
2025-07-08 10:36:53 -04:00
|
|
|
|
|
2025-06-14 11:53:53 -04:00
|
|
|
|
unless coverage >= 75
|
2025-07-08 10:36:53 -04:00
|
|
|
|
puts "Categorization coverage below 75%"
|
2025-06-14 11:53:53 -04:00
|
|
|
|
end
|
2025-06-11 18:48:39 -04:00
|
|
|
|
end
|
2024-02-29 16:35:54 -05:00
|
|
|
|
end
|