VRFS-1693 resque job to schedule recurring music sessions
This commit is contained in:
parent
1f726df320
commit
a9b67a9a6b
|
|
@ -169,3 +169,4 @@ periodic_emails.sql
|
|||
remember_extra_scoring_data.sql
|
||||
indexing_for_regions.sql
|
||||
latency_tester.sql
|
||||
scheduled_sessions_next_session_scheduled.sql
|
||||
|
|
@ -0,0 +1 @@
|
|||
alter table music_sessions add column next_session_scheduled BOOLEAN default null;
|
||||
|
|
@ -62,6 +62,69 @@ module JamRuby
|
|||
self.comments.size
|
||||
end
|
||||
|
||||
# copies all relevant info for the recurring session
|
||||
def copy
|
||||
|
||||
MusicSession.transaction do
|
||||
# copy base music_session data
|
||||
new_session = MusicSession.new
|
||||
new_session.description = self.description
|
||||
new_session.user_id = self.user_id
|
||||
new_session.band_id = self.band_id
|
||||
new_session.fan_access = self.fan_access
|
||||
# TODO: confirm this logic
|
||||
new_session.scheduled_start = self.scheduled_start + self.scheduled_duration
|
||||
new_session.scheduled_duration = self.scheduled_duration
|
||||
new_session.musician_access = self.musician_access
|
||||
new_session.approval_required = self.approval_required
|
||||
new_session.fan_chat = self.fan_chat
|
||||
new_session.genre_id = self.genre_id
|
||||
new_session.legal_policy = self.legal_policy
|
||||
new_session.language = self.language
|
||||
new_session.name = self.name
|
||||
new_session.recurring_mode = self.recurring_mode
|
||||
new_session.timezone = self.timezone
|
||||
new_session.open_rsvps = self.open_rsvps
|
||||
new_session.save
|
||||
|
||||
# copy rsvp_slots
|
||||
RsvpSlot.find_each(:conditions => "music_session_id = '#{self.id}'") do |slot|
|
||||
new_slot = RsvpSlot.new
|
||||
new_slot.instrument_id = slot.instrument_id
|
||||
new_slot.proficiency_level = slot.proficiency_level
|
||||
new_slot.music_session_id = new_session.id
|
||||
new_slot.save
|
||||
end
|
||||
|
||||
# copy music_notations
|
||||
MusicNotation.find_each(:conditions => "music_session_id = '#{self.id}'") do |notation|
|
||||
new_notation = MusicNotation.new
|
||||
new_notation.user_id = notation.user_id
|
||||
new_notation.music_session_id = new_session.id
|
||||
new_notation.file_url = notation.file_url
|
||||
new_notation.size = notation.size
|
||||
new_notation.save
|
||||
end
|
||||
|
||||
# copy invitations
|
||||
Invitation.find_each(:conditions => "music_session_id = '#{self.id}'") do |invitation|
|
||||
new_invitation = Invitation.new
|
||||
new_invitation.sender_id = invitation.sender_id
|
||||
new_invitation.receiver_id = invitation.receiver_id
|
||||
new_invitation.music_session_id = new_session.id
|
||||
new_invitation.save
|
||||
|
||||
user = User.find(new_invitation.receiver_id)
|
||||
Notification.send_scheduled_session_invitation(new_session, user)
|
||||
end
|
||||
|
||||
# mark the next session as scheduled
|
||||
self.next_session_scheduled = true
|
||||
self.save
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
def grouped_tracks
|
||||
tracks = []
|
||||
self.music_session_user_histories.each do |msuh|
|
||||
|
|
|
|||
|
|
@ -0,0 +1,39 @@
|
|||
require 'json'
|
||||
require 'resque'
|
||||
require 'resque-retry'
|
||||
require 'net/http'
|
||||
require 'digest/md5'
|
||||
|
||||
module JamRuby
|
||||
|
||||
class MusicSessionScheduler
|
||||
extend Resque::Plugins::LonelyJob
|
||||
|
||||
@queue = :music_session_scheduler
|
||||
|
||||
@@log = Logging.logger[MusicSessionScheduler]
|
||||
|
||||
def self.lock_timeout
|
||||
120
|
||||
end
|
||||
|
||||
def self.perform
|
||||
@@log.debug("waking up")
|
||||
|
||||
JamWebEventMachine.run_wait_stop do
|
||||
MusicSessionScheduler.new.run
|
||||
end
|
||||
|
||||
@@log.debug("done")
|
||||
end
|
||||
|
||||
def run
|
||||
# get all weekly sessions that have ended in the last 15 minutes
|
||||
criteria = "recurring_mode = 'weekly' AND session_removed_at is not null AND next_session_scheduled = false"
|
||||
MusicSession.find_each(:conditions => criteria) do |music_session|
|
||||
music_session.copy
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
|
@ -39,3 +39,7 @@ NewMusicianEmailer:
|
|||
class: "JamRuby::NewMusicianEmailer"
|
||||
description: "Sends weekly emails of new users with good latency"
|
||||
|
||||
MusicSessionScheduler:
|
||||
cron: "0 */5 0 * *"
|
||||
class: "JamRuby::MusicSessionScheduler"
|
||||
description: "Schedules music sessions that are marked as recurring"
|
||||
Loading…
Reference in New Issue