102 lines
3.4 KiB
Ruby
102 lines
3.4 KiB
Ruby
DAYS = 60
|
|
email = ENV["CHECKINS_FOR"]
|
|
if email.present?
|
|
puts "email=#{email}"
|
|
|
|
user = User.find_or_create_by(email: email)
|
|
|
|
# Delete all Tracking, Checkin and Tag
|
|
Tracking.destroy_all
|
|
Checkin.destroy_all
|
|
Checkin::Tag.destroy_all
|
|
|
|
# Set locale to default
|
|
I18n.locale = I18n.default_locale
|
|
|
|
# Create some trackables (both global and personal)
|
|
conditions = FactoryBot.create_list(:user_condition, 2, user: user).map(&:condition)
|
|
conditions += FactoryBot.create_list(:condition, 3)
|
|
symptoms = FactoryBot.create_list(:user_symptom, 2, user: user).map(&:symptom)
|
|
symptoms += FactoryBot.create_list(:symptom, 5)
|
|
treatments = FactoryBot.create_list(:user_treatment, 3, user: user).map(&:treatment)
|
|
treatments += FactoryBot.create_list(:treatment, 6)
|
|
|
|
# Create some tags
|
|
tags = FactoryBot.create_list(:tag, 10)
|
|
|
|
# Setup time frame
|
|
end_at = Date.today
|
|
day = end_at - (DAYS - 1).days
|
|
|
|
# Start tracking some trackable
|
|
2.times do
|
|
condition = conditions.pop
|
|
Tracking.create!(user: user, trackable: condition, start_at: day)
|
|
puts "Start tracking #{condition.name}"
|
|
end
|
|
3.times do
|
|
symptom = symptoms.pop
|
|
Tracking.create!(user: user, trackable: symptom, start_at: day)
|
|
puts "Start tracking #{symptom.name}"
|
|
end
|
|
4.times do
|
|
treatment = treatments.pop
|
|
Tracking.create!(user: user, trackable: treatment, start_at: day)
|
|
puts "Start tracking #{treatment.name}"
|
|
end
|
|
|
|
# Iterate on days
|
|
i = 1
|
|
divisors_range_start = DAYS / 4 + 2
|
|
divisors_range = (divisors_range_start..divisors_range_start + 2)
|
|
while day <= end_at
|
|
puts "\n\n=== Day: #{day} ==="
|
|
|
|
active_trackings = user.trackings.active_at(day).to_a
|
|
# Stop tracking something at some random iteration
|
|
if i % divisors_range.to_a.sample == 0
|
|
tracking = active_trackings.sample
|
|
tracking.update!(end_at: day)
|
|
puts "Stop tracking #{tracking.trackable.name}"
|
|
end
|
|
|
|
# Start tracking something at some random iteration
|
|
# (either something new, or something tracked earlier)
|
|
if i % divisors_range.to_a.sample == 0
|
|
tracked_earlier = (user.trackings.to_a - active_trackings.to_a).map(&:trackable)
|
|
trackables_matrix = [conditions, treatments, tracked_earlier, symptoms]
|
|
trackables = []
|
|
trackables = trackables_matrix.pop while trackables.empty?
|
|
trackable = trackables.pop
|
|
Tracking.create!(user: user, trackable: trackable, start_at: day)
|
|
puts "Start tracking #{trackable.name}"
|
|
end
|
|
|
|
# Checkin
|
|
checkin = FactoryBot.create(:checkin,
|
|
user_id: user.id, date: day, tag_ids: tags.sample(3).map(&:id))
|
|
active_trackings = user.trackings.reload.active_at(day)
|
|
active_trackings.map(&:trackable).each do |trackable|
|
|
if trackable.is_a? Condition
|
|
condition_checkin = FactoryBot.create(
|
|
:checkin_condition, checkin: checkin, condition_id: trackable.id
|
|
)
|
|
puts "Checked-in #{trackable.name}, value: #{condition_checkin.value}"
|
|
elsif trackable.is_a? Symptom
|
|
symptom_checkin = FactoryBot.create(
|
|
:checkin_symptom, checkin: checkin, symptom_id: trackable.id
|
|
)
|
|
puts "Checked-in #{trackable.name}, value: #{symptom_checkin.value}"
|
|
elsif trackable.is_a? Treatment
|
|
treatment_checkin = FactoryBot.create(
|
|
:checkin_treatment, checkin: checkin, treatment_id: trackable.id
|
|
)
|
|
puts "Checked-in #{trackable.name}, value: #{treatment_checkin.value}"
|
|
end
|
|
end
|
|
|
|
day += 1.day
|
|
i += 1
|
|
end
|
|
end
|