Last active
April 30, 2020 18:34
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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