Skip to content

Instantly share code, notes, and snippets.

@briancarycom
Last active April 30, 2020 18:34
Show Gist options
  • Save briancarycom/e509724a641c29d6034d07da6c298221 to your computer and use it in GitHub Desktop.
Save briancarycom/e509724a641c29d6034d07da6c298221 to your computer and use it in GitHub Desktop.
[User course status reset contention check] Determine if completions occurred before reset occurred #standard #course_reset #cleanup
# TODO:
# populate module IDs for current courses
# need to update course schema to support module_ids!
# TODO:
# try going through active curriculum teams
start_date = "2020-04-24".to_datetime
lcss = LearnerCourseStatus.all.order('created_at DESC').where("created_at >= :date",{date: start_date - 1.day}).where("created_at <= :date",{date: start_date + 2.days}).where(completed: true);
ordered_statuses = lcss.reverse;
mismatches = 0;
basics_matches = 0;
lcs_to_delete = [];
# get basics ids for all litmos accounts
basics_ids = [];
LitmosAccount.all.each do |la|
basics_ids << la.basics_courses.map(&:id) + la.onboarding_courses.map(&:id)
end;
basics_ids.flatten!
ordered_statuses.each do |lcs|
la = lcs.learner.litmos_account;
if basics_ids.include? lcs.course_id
puts "THIS IS A BASICS COURSE STATUS. SKIP"
basics_matches += 1
next
end
puts "--------------------------------------------"
puts "Completed learner course status created #{lcs.created_at} is completed: #{lcs.completed}"
last_statuses = LearnerCourseStatus.where(learner_id: lcs.learner_id, course_id: lcs.course_id, completed: false).where('created_at > :date', {date: lcs.created_at}).order('created_at DESC')
puts "NUMBER OF STATUSES TO DELETE: #{last_statuses.count}"
# if last_statuses.count > 1
# puts "last_statuses to delete is more than 1: #{last_statuses.to_json}"
# throw :done
# end
last_statuses.each do |last_status|
puts "COMPLETED STATUS DATE: #{lcs.created_at} (ID: #{lcs.id}) should be earlier than INCOMPLETE STATUS DATE: #{last_status.created_at} (ID: #{last_status.id})"
if lcs.completed && !last_status.completed
puts "check for any course resets for this learner: #{lcs.learner_id} and this course: #{lcs.course_id}"
puts "MISMATCH"
mismatches += 1
lcs_to_delete << last_status.id
# throw "finished"
end
# break if mismatches > 10
end
end;
# verify
affected_learners = [];
lcs_to_delete.each do |lcs|
lc = LearnerCourseStatus.find lcs
affected_learners << lc.learner_id;
# puts lc.completed
if lc.completed
puts "CHECK THIS ONE: #{lc.id}"
end
end;
puts "affected learners: #{affected_learners.uniq.count}";
# verify step 2
lcs_to_delete.each do |lcs|
lc = LearnerCourseStatus.find lcs
learner = lc.learner;
# ensure this learner has completed
completed = learner.learner_course_statuses.where(course_id: lc.course_id).where("created_at < :date",{date: lc.created_at}).where("created_at > :date",{date: start_date}).where(completed: true).first
if completed.present?
puts "completed: #{completed.completed} on #{completed.created_at}"
end;
end;
# delete wrong statuses!
deleted = [];
lcs_to_delete.each do |lcs|
lc = LearnerCourseStatus.where(id: lcs).first
if lc.present?
deleted << lc.id
lc.delete
puts "deleted #{lc.id}"
end
end;
# recache
LitmosAccount.all.each do |la|
la.update_current_cache!
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment