73 lines
2.9 KiB
Ruby
73 lines
2.9 KiB
Ruby
|
|
# Sample contributions for testing Top Contributors feature
|
||
|
|
# Run with: rails runner db/seeds/top_contributors_sample_data.rb
|
||
|
|
|
||
|
|
puts "Creating sample contributions for Top Contributors testing..."
|
||
|
|
|
||
|
|
# Find or create test users
|
||
|
|
users = []
|
||
|
|
5.times do |i|
|
||
|
|
name = "TestContributor#{i + 1}"
|
||
|
|
user = User.find_or_create_by!(name: name) do |u|
|
||
|
|
# Create a corresponding auth_user record
|
||
|
|
auth_user = AuthUser.create!(
|
||
|
|
name: name,
|
||
|
|
email: "test#{i + 1}@example.com",
|
||
|
|
password: 'password123',
|
||
|
|
)
|
||
|
|
u.remote_id = auth_user.id
|
||
|
|
u.auth_server_id = 1
|
||
|
|
end
|
||
|
|
users << user
|
||
|
|
end
|
||
|
|
|
||
|
|
# Get some existing items/pet types to contribute
|
||
|
|
items = Item.limit(10).to_a
|
||
|
|
pet_types = PetType.limit(5).to_a
|
||
|
|
swf_assets = SwfAsset.limit(5).to_a
|
||
|
|
|
||
|
|
if items.empty? || pet_types.empty?
|
||
|
|
puts "WARNING: No items or pet types found. Create some first or contributions will be limited."
|
||
|
|
end
|
||
|
|
|
||
|
|
# Create contributions with different time periods
|
||
|
|
# User 1: Heavy contributor this week
|
||
|
|
if items.any?
|
||
|
|
3.times { Contribution.create!(user: users[0], contributed: items.sample, created_at: 2.days.ago) }
|
||
|
|
5.times { Contribution.create!(user: users[0], contributed: items.sample, created_at: 5.days.ago) }
|
||
|
|
end
|
||
|
|
|
||
|
|
# User 2: Heavy contributor this month, but not this week
|
||
|
|
if items.any? && pet_types.any?
|
||
|
|
2.times { Contribution.create!(user: users[1], contributed: items.sample, created_at: 15.days.ago) }
|
||
|
|
1.times { Contribution.create!(user: users[1], contributed: pet_types.sample, created_at: 20.days.ago) }
|
||
|
|
end
|
||
|
|
|
||
|
|
# User 3: Heavy contributor this year, but not this month
|
||
|
|
if pet_types.any?
|
||
|
|
3.times { Contribution.create!(user: users[2], contributed: pet_types.sample, created_at: 3.months.ago) }
|
||
|
|
end
|
||
|
|
|
||
|
|
# User 4: Old contributor (only in all-time)
|
||
|
|
if items.any?
|
||
|
|
users[3].update!(points: 500) # Set points directly for all-time view
|
||
|
|
2.times { Contribution.create!(user: users[3], contributed: items.sample, created_at: 2.years.ago) }
|
||
|
|
end
|
||
|
|
|
||
|
|
# User 5: Mixed contributions across all periods
|
||
|
|
if items.any? && pet_types.any?
|
||
|
|
Contribution.create!(user: users[4], contributed: items.sample, created_at: 1.day.ago)
|
||
|
|
Contribution.create!(user: users[4], contributed: pet_types.sample, created_at: 10.days.ago)
|
||
|
|
Contribution.create!(user: users[4], contributed: items.sample, created_at: 2.months.ago)
|
||
|
|
end
|
||
|
|
if swf_assets.any?
|
||
|
|
Contribution.create!(user: users[4], contributed: swf_assets.sample, created_at: 4.days.ago)
|
||
|
|
end
|
||
|
|
|
||
|
|
puts "Created sample contributions:"
|
||
|
|
puts "- #{users[0].name}: #{users[0].contributions.count} contributions (focus: this week)"
|
||
|
|
puts "- #{users[1].name}: #{users[1].contributions.count} contributions (focus: this month)"
|
||
|
|
puts "- #{users[2].name}: #{users[2].contributions.count} contributions (focus: this year)"
|
||
|
|
puts "- #{users[3].name}: #{users[3].contributions.count} contributions (focus: all-time, #{users[3].points} points)"
|
||
|
|
puts "- #{users[4].name}: #{users[4].contributions.count} contributions (mixed periods)"
|
||
|
|
puts "\nTest the feature at: http://localhost:3000/users/top-contributors"
|