From acd1efd8772ed88cd4fd938071ccf063857fec8b Mon Sep 17 00:00:00 2001 From: Seth Call Date: Mon, 5 May 2014 10:06:27 -0500 Subject: [PATCH] * wip --- db/manifest | 1 + db/up/scheduled_sessions.sql | 71 +++++++++++++++++++ ruby/lib/jam_ruby/models/fan_invitation.rb | 2 +- ruby/lib/jam_ruby/models/invitation.rb | 2 +- ruby/lib/jam_ruby/models/join_request.rb | 2 +- ruby/lib/jam_ruby/models/music_session.rb | 6 -- .../jam_ruby/models/music_session_history.rb | 7 ++ .../controllers/api_recordings_controller.rb | 2 - 8 files changed, 82 insertions(+), 11 deletions(-) create mode 100644 db/up/scheduled_sessions.sql diff --git a/db/manifest b/db/manifest index 637e56cc4..f60b72d19 100755 --- a/db/manifest +++ b/db/manifest @@ -151,3 +151,4 @@ user_mods.sql connection_stale_expire.sql rename_chat_messages.sql fix_connection_fields.sql +scheduled_sessions.sql diff --git a/db/up/scheduled_sessions.sql b/db/up/scheduled_sessions.sql new file mode 100644 index 000000000..36d77d5a2 --- /dev/null +++ b/db/up/scheduled_sessions.sql @@ -0,0 +1,71 @@ +-- track the last measured audio gear latency +ALTER TABLE users ADD COLUMN audio_latency double precision; + +ALTER TABLE music_sessions_history ADD COLUMN scheduled_start TIMESTAMP WITH TIME ZONE; +ALTER TABLE music_sessions_history ADD COLUMN scheduled_duration INTERVAL; +ALTER TABLE music_sessions_history ADD COLUMN musician_access BOOLEAN NOT NULL; +ALTER TABLE music_sessions_history ADD COLUMN approval_required BOOLEAN NOT NULL; +ALTER TABLE music_sessions_history ADD COLUMN fan_chat BOOLEAN NOT NULL; +ALTER TABLE music_sessions_history ADD COLUMN genre_id VARCHAR(64) NOT NULL REFERENCES genres(id); +ALTER TABLE music_sessions_history ADD COLUMN legal_policy VARCHAR(255) NOT NULL; +ALTER TABLE music_sessions_history ADD COLUMN language VARCHAR(255) NOT NULL; +ALTER TABLE music_sessions_history ADD COLUMN name TEXT NOT NULL; + +CREATE TABLE rsvp_slots ( + id VARCHAR(64) PRIMARY KEY DEFAULT uuid_generate_v4() NOT NULL, + instrument_id VARCHAR(64) REFERENCES instruments (id), + proficiency_level VARCHAR(255) NOT NULL, + music_session_id VARCHAR(64) NOT NULL REFERENCES music_sessions_history (id) ON DELETE CASCADE +); + +CREATE TABLE rsvp_requests ( + id VARCHAR(64) PRIMARY KEY DEFAULT uuid_generate_v4() NOT NULL, + user_id VARCHAR(64) NOT NULL REFERENCES users (id) ON DELETE CASCADE, + rsvp_slot_id VARCHAR(64) NOT NULL REFERENCES rsvp_slots(id) ON DELETE CASCADE, + message TEXT, + chosen BOOLEAN DEFAULT FALSE, + accept_all BOOLEAN +); + + +-- make these 3 tables be LOGGED, and refer to music_sessions_history instead of music_sessions +DROP TABLE fan_invitations; +DROP TABLE invitations; +DROP TABLE join_requests; + + +CREATE TABLE fan_invitations ( + id VARCHAR(64) PRIMARY KEY DEFAULT uuid_generate_v4() NOT NULL, + sender_id VARCHAR(64), + receiver_id VARCHAR(64), + music_session_id VARCHAR(64), + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW() NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW() NOT NULL +); +ALTER TABLE ONLY fan_invitations ADD CONSTRAINT fan_invitations_music_session_id_fkey FOREIGN KEY (music_session_id) REFERENCES music_sessions_history(id) ON DELETE CASCADE; + +CREATE UNLOGGED TABLE join_requests ( + id VARCHAR(64) PRIMARY KEY DEFAULT uuid_generate_v4() NOT NULL, + user_id VARCHAR(64), + music_session_id VARCHAR(64), + text VARCHAR(2000), + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW() NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW() NOT NULL +); +ALTER TABLE ONLY join_requests ADD CONSTRAINT user_music_session_uniqkey UNIQUE (user_id, music_session_id); +ALTER TABLE ONLY join_requests ADD CONSTRAINT join_requests_music_session_id_fkey FOREIGN KEY (music_session_id) REFERENCES music_sessions_history(id) ON DELETE CASCADE; + +-- INVITATIONS +-------------- +CREATE UNLOGGED TABLE invitations ( + id VARCHAR(64) PRIMARY KEY DEFAULT uuid_generate_v4() NOT NULL, + sender_id VARCHAR(64), + receiver_id VARCHAR(64), + music_session_id VARCHAR(64), + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW() NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW() NOT NULL, + join_request_id VARCHAR(64) +); +ALTER TABLE ONLY invitations ADD CONSTRAINT invitations_uniqkey UNIQUE (sender_id, receiver_id, music_session_id); +ALTER TABLE ONLY invitations ADD CONSTRAINT invitations_join_request_id_fkey FOREIGN KEY (join_request_id) REFERENCES join_requests(id) ON DELETE CASCADE; +ALTER TABLE ONLY invitations ADD CONSTRAINT invitations_music_session_id_fkey FOREIGN KEY (music_session_id) REFERENCES music_sessions_history(id) ON DELETE CASCADE; diff --git a/ruby/lib/jam_ruby/models/fan_invitation.rb b/ruby/lib/jam_ruby/models/fan_invitation.rb index 026b16599..7f3052cdd 100644 --- a/ruby/lib/jam_ruby/models/fan_invitation.rb +++ b/ruby/lib/jam_ruby/models/fan_invitation.rb @@ -7,7 +7,7 @@ module JamRuby self.primary_key = 'id' belongs_to :sender, :inverse_of => :sent_fan_invitations, :class_name => "JamRuby::User", :foreign_key => "sender_id" belongs_to :receiver, :inverse_of => :received_fan_invitations, :class_name => "JamRuby::User", :foreign_key => "receiver_id" - belongs_to :music_session, :inverse_of => :fan_invitations, :class_name => "JamRuby::MusicSession" + belongs_to :music_session, :inverse_of => :fan_invitations, :class_name => "JamRuby::MusicSessionHistory", :foreign_key => "music_session_id" validates :sender, :presence => true validates :receiver, :presence => true diff --git a/ruby/lib/jam_ruby/models/invitation.rb b/ruby/lib/jam_ruby/models/invitation.rb index 9bd998d56..f02f0fe02 100644 --- a/ruby/lib/jam_ruby/models/invitation.rb +++ b/ruby/lib/jam_ruby/models/invitation.rb @@ -8,7 +8,7 @@ module JamRuby self.primary_key = 'id' belongs_to :sender, :inverse_of => :sent_invitations, :class_name => "JamRuby::User", :foreign_key => "sender_id" belongs_to :receiver, :inverse_of => :received_invitations, :class_name => "JamRuby::User", :foreign_key => "receiver_id" - belongs_to :music_session, :inverse_of => :invitations, :class_name => "JamRuby::MusicSession" + belongs_to :music_session, :inverse_of => :invitations, :class_name => "JamRuby::MusicSessionHistory", :foreign_key => "music_session_id" belongs_to :join_request, :inverse_of => :invitations, :class_name => "JamRuby::JoinRequest" validates :sender, :presence => true diff --git a/ruby/lib/jam_ruby/models/join_request.rb b/ruby/lib/jam_ruby/models/join_request.rb index 4ebbd64ba..51e9dba2c 100644 --- a/ruby/lib/jam_ruby/models/join_request.rb +++ b/ruby/lib/jam_ruby/models/join_request.rb @@ -6,7 +6,7 @@ module JamRuby self.primary_key = 'id' belongs_to :user, :class_name => "JamRuby::User" - belongs_to :music_session, :class_name => "JamRuby::MusicSession" + belongs_to :music_session, :class_name => "JamRuby::MusicSessionHistory", :foreign_key => "music_session_id" has_many :invitations, :inverse_of => :join_request, :class_name => "JamRuby::Invitation" validates :user, :presence => true diff --git a/ruby/lib/jam_ruby/models/music_session.rb b/ruby/lib/jam_ruby/models/music_session.rb index 9595eb163..7be7e7b53 100644 --- a/ruby/lib/jam_ruby/models/music_session.rb +++ b/ruby/lib/jam_ruby/models/music_session.rb @@ -15,12 +15,6 @@ module JamRuby has_many :connections, :class_name => "JamRuby::Connection" has_many :users, :through => :connections, :class_name => "JamRuby::User" has_and_belongs_to_many :genres, :class_name => "::JamRuby::Genre", :join_table => "genres_music_sessions" - has_many :join_requests, :foreign_key => "music_session_id", :inverse_of => :music_session, :class_name => "JamRuby::JoinRequest" - has_many :invitations, :foreign_key => "music_session_id", :inverse_of => :music_session, :class_name => "JamRuby::Invitation" - has_many :invited_musicians, :through => :invitations, :class_name => "JamRuby::User", :foreign_key => "receiver_id", :source => :receiver - - has_many :fan_invitations, :foreign_key => "music_session_id", :inverse_of => :music_session, :class_name => "JamRuby::FanInvitation" - has_many :invited_fans, :through => :fan_invitations, :class_name => "JamRuby::User", :foreign_key => "receiver_id", :source => :receiver has_many :recordings, :class_name => "JamRuby::Recording", :inverse_of => :music_session has_many :chats, :class_name => "JamRuby::ChatMessages", :foreign_key => "session_id" belongs_to :band, :inverse_of => :music_sessions, :class_name => "JamRuby::Band", :foreign_key => "band_id" diff --git a/ruby/lib/jam_ruby/models/music_session_history.rb b/ruby/lib/jam_ruby/models/music_session_history.rb index 5e3637284..b9e5a7b2c 100644 --- a/ruby/lib/jam_ruby/models/music_session_history.rb +++ b/ruby/lib/jam_ruby/models/music_session_history.rb @@ -26,6 +26,13 @@ module JamRuby has_one :share_token, :class_name => "JamRuby::ShareToken", :inverse_of => :shareable, :foreign_key => 'shareable_id' has_one :feed, :class_name => "JamRuby::Feed", :inverse_of => :music_session_history, :foreign_key => 'music_session_id', :dependent => :destroy + has_many :join_requests, :foreign_key => "music_session_id", :inverse_of => :music_session, :class_name => "JamRuby::JoinRequest", :foreign_key => "music_session_id" + has_many :invitations, :foreign_key => "music_session_id", :inverse_of => :music_session, :class_name => "JamRuby::Invitation", :foreign_key => "music_session_id" + has_many :invited_musicians, :through => :invitations, :class_name => "JamRuby::User", :foreign_key => "receiver_id", :source => :receiver + has_many :fan_invitations, :foreign_key => "music_session_id", :inverse_of => :music_session, :class_name => "JamRuby::FanInvitation", :foreign_key => "music_session_id" + has_many :invited_fans, :through => :fan_invitations, :class_name => "JamRuby::User", :foreign_key => "receiver_id", :source => :receiver + + before_create :generate_share_token before_create :add_to_feed diff --git a/web/app/controllers/api_recordings_controller.rb b/web/app/controllers/api_recordings_controller.rb index a694d7403..0040e17cb 100644 --- a/web/app/controllers/api_recordings_controller.rb +++ b/web/app/controllers/api_recordings_controller.rb @@ -48,8 +48,6 @@ class ApiRecordingsController < ApiController else render :json => { :message => "download limit surpassed" }, :status => 404 end - - end def start