From 04caed278305081dc4b29a0a90ac67ca6d8f9d2b Mon Sep 17 00:00:00 2001 From: Joshua Coles Date: Thu, 5 Oct 2023 09:59:08 +0100 Subject: [PATCH] Add checkin notifications for starting lectures --- app/controllers/lecture_controller.rb | 12 ++++++++++++ app/jobs/lecture_checkin_job.rb | 18 ++++++++++++++++++ app/lib/panopto.rb | 2 +- config/application.rb | 2 ++ config/routes.rb | 2 ++ config/sidekiq.yml | 4 ++++ test/jobs/lecture_checkin_job_test.rb | 7 +++++++ 7 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 app/jobs/lecture_checkin_job.rb create mode 100644 test/jobs/lecture_checkin_job_test.rb diff --git a/app/controllers/lecture_controller.rb b/app/controllers/lecture_controller.rb index 84a0b45..2413728 100644 --- a/app/controllers/lecture_controller.rb +++ b/app/controllers/lecture_controller.rb @@ -1,4 +1,16 @@ class LectureController < ApplicationController + # TODO: Pass the CSRF token to Pushcut + skip_before_action :verify_authenticity_token, only: [:checkin] + + def checkin + lecture = Lecture.find(params[:id]) + + Toggl::start_time_entry( + description: lecture.title, + project_id: lecture.course.toggl_project, + ) + end + def start lecture = Lecture.find(params[:id]) diff --git a/app/jobs/lecture_checkin_job.rb b/app/jobs/lecture_checkin_job.rb new file mode 100644 index 0000000..3d6c335 --- /dev/null +++ b/app/jobs/lecture_checkin_job.rb @@ -0,0 +1,18 @@ +class LectureCheckinJob < ApplicationJob + queue_as :default + + def perform(*args) + lecture = Lecture.find_by(start_time: Time.now - 5.minutes..Time.now + 5.minutes) + return if lecture.empty? + + puts(HTTParty.post( + "https://api.pushcut.io/2Kdtb5V7SoDXQOPxCJetk/notifications/Checkin", + body: { + input: lecture.id.to_s, + text: lecture.title, + title: "Checkin to #{lecture.course.title}" + }.to_json, + headers: { 'Content-Type' => 'application/json', 'Accept' => 'application/json' } + )) + end +end diff --git a/app/lib/panopto.rb b/app/lib/panopto.rb index 955e2c6..989109b 100644 --- a/app/lib/panopto.rb +++ b/app/lib/panopto.rb @@ -1,7 +1,7 @@ module Panopto # @param [String] folder_id def self.list_folder(folder_id) - HTTParty.get("https://lectures.joshuacoles.me/list", query: { + HTTParty.get("https://lectures.joshuacoles.me/api/list", query: { folderId: folder_id }) end diff --git a/config/application.rb b/config/application.rb index 72bc127..14fa22f 100644 --- a/config/application.rb +++ b/config/application.rb @@ -13,6 +13,8 @@ module LectureAttendanceManager config.active_job.queue_adapter = :sidekiq + config.hosts << "lectures.joshuacoles.me" + # Configuration for the application, engines, and railties goes here. # # These settings can be overridden in specific environments using the files diff --git a/config/routes.rb b/config/routes.rb index f40dfe5..9acf507 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -13,4 +13,6 @@ Rails.application.routes.draw do post '/lectures/:id/start', to: 'lecture#start', as: :lectures_start post '/lectures/:id/start_preparation', to: 'lecture#start_preparation', as: :lecture_start_preparation post '/lectures/:id/start_review', to: 'lecture#start_review', as: :lecture_start_review + + post '/lectures/:id/checkin', to: 'lecture#checkin', as: :lecture_checkin end diff --git a/config/sidekiq.yml b/config/sidekiq.yml index 0803d7d..f310a96 100644 --- a/config/sidekiq.yml +++ b/config/sidekiq.yml @@ -11,3 +11,7 @@ production: # These are the cron jobs :scheduler: :schedule: + :lecture_checkin_job: + cron: '15 * * * 1,2,3,4,5' + class: 'LectureCheckinJob' + queue: default diff --git a/test/jobs/lecture_checkin_job_test.rb b/test/jobs/lecture_checkin_job_test.rb new file mode 100644 index 0000000..6d43dd9 --- /dev/null +++ b/test/jobs/lecture_checkin_job_test.rb @@ -0,0 +1,7 @@ +require "test_helper" + +class LectureCheckinJobTest < ActiveJob::TestCase + # test "the truth" do + # assert true + # end +end