class ScrapePanoptoJob < ApplicationJob queue_as :default def perform(*args) courses = Course.all courses.each do |course| self.scrape_course(course) end end # @param [Course] course def scrape_course(course) panopto_folder_ids = course.panopto_folders panopto_folder_ids.each do |folder_id| recording_data = Panopto::list_folder folder_id attributes = recording_data.map do |lecture_data| { title: lecture_data['title'], start_time: Time.new(lecture_data['start_time']), recording_uuid: lecture_data['panopto_delivery_id'], course_id: course.id, } end created = Recording.insert_all(attributes, unique_by: :recording_uuid, returning: [:id, :title, :course_id, :start_time]) created.each do |new_recording_attrs| new_recording = Recording.new(new_recording_attrs) Lecture.create!( title: new_recording.nice_title, start_time: new_recording.start_time, course_id: new_recording.course_id, status: :undetermined, recording_id: new_recording.id ) end end end end