diff --git a/db/manifest b/db/manifest index f41f30931..0a871814f 100755 --- a/db/manifest +++ b/db/manifest @@ -155,4 +155,5 @@ session_ratings.sql scheduled_sessions.sql notification_scheduled_session.sql music_notation.sql -music_session_recurring_mode.sql \ No newline at end of file +music_session_recurring_mode.sql +scheduled_sessions_2.sql \ No newline at end of file diff --git a/db/up/scheduled_sessions_2.sql b/db/up/scheduled_sessions_2.sql new file mode 100644 index 000000000..2651e2378 --- /dev/null +++ b/db/up/scheduled_sessions_2.sql @@ -0,0 +1,21 @@ +ALTER TABLE rsvp_requests DROP COLUMN rsvp_slot_id; +ALTER TABLE rsvp_requests DROP COLUMN chosen; +ALTER TABLE rsvp_requests DROP COLUMN message; + +CREATE TABLE rsvp_requests_rsvp_slots ( + id VARCHAR(64) PRIMARY KEY DEFAULT uuid_generate_v4() NOT NULL, + rsvp_request_id VARCHAR(64) NOT NULL REFERENCES rsvp_requests(id) ON DELETE CASCADE, + rsvp_slot_id VARCHAR(64) NOT NULL REFERENCES rsvp_slots(id) ON DELETE CASCADE, + chosen BOOLEAN DEFAULT FALSE, + created_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW() NOT NULL, + updated_at TIMESTAMP WITHOUT TIME ZONE DEFAULT NOW() NOT NULL +); + +CREATE TABLE session_info_comments ( + id VARCHAR(64) PRIMARY KEY DEFAULT uuid_generate_v4(), + music_session_id VARCHAR(64) NOT NULL REFERENCES music_sessions(id) ON DELETE CASCADE, + creator_id VARCHAR(64) NOT NULL REFERENCES users(id) ON DELETE CASCADE, + comment TEXT NOT NULL, + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP +); \ No newline at end of file diff --git a/ruby/lib/jam_ruby.rb b/ruby/lib/jam_ruby.rb index 6e6cf63c4..56372cac2 100755 --- a/ruby/lib/jam_ruby.rb +++ b/ruby/lib/jam_ruby.rb @@ -69,6 +69,7 @@ require "jam_ruby/models/genre" require "jam_ruby/models/user" require "jam_ruby/models/rsvp_request" require "jam_ruby/models/rsvp_slot" +require "jam_ruby/models/rsvp_request_slot" require "jam_ruby/models/user_observer" require "jam_ruby/models/user_authorization" require "jam_ruby/models/join_request" @@ -83,6 +84,7 @@ require "jam_ruby/models/diagnostic" require "jam_ruby/models/friendship" require "jam_ruby/models/active_music_session" require "jam_ruby/models/music_session_comment" +require "jam_ruby/models/session_info_comment" require "jam_ruby/models/music_session" require "jam_ruby/models/music_session_liker" require "jam_ruby/models/music_session_user_history" diff --git a/ruby/lib/jam_ruby/models/rsvp_request.rb b/ruby/lib/jam_ruby/models/rsvp_request.rb index dcd99a9ce..adf6dba67 100644 --- a/ruby/lib/jam_ruby/models/rsvp_request.rb +++ b/ruby/lib/jam_ruby/models/rsvp_request.rb @@ -2,13 +2,20 @@ module JamRuby class RsvpRequest < ActiveRecord::Base belongs_to :user, :class_name => "JamRuby::User" - belongs_to :rsvp_slot, :class_name => "JamRuby::RsvpSlot" + has_many :rsvp_request_slots, :class_name => "JamRuby::RsvpRequestSlot" validates :message, length: {maximum: 1000}, no_profanity: true validates :chosen, :inclusion => {:in => [nil, true, false]} validates :canceled, :inclusion => {:in => [nil, true, false]} validates :rsvp_slot, presence: true + def self.create(params) + # slot_ids = + rsvp = RsvpRequest.new + # rsv + rsvp.save + end + def self.requests_by_session(session, user = nil) query = RsvpRequest .includes(:user) diff --git a/ruby/lib/jam_ruby/models/rsvp_request_slot.rb b/ruby/lib/jam_ruby/models/rsvp_request_slot.rb new file mode 100644 index 000000000..9d20170c2 --- /dev/null +++ b/ruby/lib/jam_ruby/models/rsvp_request_slot.rb @@ -0,0 +1,10 @@ +module JamRuby + class RsvpRequestSlot < ActiveRecord::Base + self.table_name = "rsvp_requests_rsvp_slots" + + self.primary_key = 'id' + + belongs_to :rsvp_request + belongs_to :rsvp_slot + end +end \ No newline at end of file diff --git a/ruby/lib/jam_ruby/models/rsvp_slot.rb b/ruby/lib/jam_ruby/models/rsvp_slot.rb index 7559fee7f..77b2dd638 100644 --- a/ruby/lib/jam_ruby/models/rsvp_slot.rb +++ b/ruby/lib/jam_ruby/models/rsvp_slot.rb @@ -3,7 +3,7 @@ module JamRuby belongs_to :instrument, :class_name => "JamRuby::Instrument" belongs_to :music_session - has_many :rsvp_requests, :class_name => "JamRuby::RsvpRequest" + has_many :rsvp_request_slots, :class_name => "JamRuby::RsvpRequestSlot" # TODO: validates :proficiency_level end diff --git a/ruby/lib/jam_ruby/models/session_info_comment.rb b/ruby/lib/jam_ruby/models/session_info_comment.rb new file mode 100644 index 000000000..58e7b75eb --- /dev/null +++ b/ruby/lib/jam_ruby/models/session_info_comment.rb @@ -0,0 +1,19 @@ +module JamRuby + class SessionInfoComment < ActiveRecord::Base + + self.table_name = "session_info_comments" + + self.primary_key = 'id' + + default_scope order('created_at DESC') + + belongs_to(:music_session, + :class_name => "JamRuby::MusicSession", + :foreign_key => "music_session_id") + + belongs_to(:user, + :class_name => "JamRuby::User", + :foreign_key => "creator_id") + + end +end \ No newline at end of file diff --git a/ruby/spec/jam_ruby/models/notification_spec.rb b/ruby/spec/jam_ruby/models/notification_spec.rb index 9e016a0b3..8b33f3122 100644 --- a/ruby/spec/jam_ruby/models/notification_spec.rb +++ b/ruby/spec/jam_ruby/models/notification_spec.rb @@ -357,7 +357,7 @@ describe Notification do it "sends no notification if comment is empty" do session = FactoryGirl.create(:music_session) calls = count_publish_to_user_calls - notification = Notification.send_scheduled_session_comment(nil, session) + notification = Notification.send_scheduled_session_comment(session, '') UserMailer.deliveries.length.should == 0 calls[:count].should == 0 diff --git a/web/app/assets/javascripts/rsvpCancelDialog.js b/web/app/assets/javascripts/rsvpCancelDialog.js new file mode 100644 index 000000000..e69de29bb diff --git a/web/app/assets/javascripts/rsvpSubmitDialog.js b/web/app/assets/javascripts/rsvpSubmitDialog.js new file mode 100644 index 000000000..e69de29bb diff --git a/web/app/assets/javascripts/web/web.js b/web/app/assets/javascripts/web/web.js index ffcbebaa6..6323e331e 100644 --- a/web/app/assets/javascripts/web/web.js +++ b/web/app/assets/javascripts/web/web.js @@ -42,6 +42,9 @@ //= require utils //= require ui_helper //= require custom_controls +//= require rsvpSubmitDialog +//= require rsvpCancelDialog +//= require rsvpReviewDialog //= require ga //= require jam_rest //= require facebook_rest diff --git a/web/app/assets/stylesheets/client/rsvpDialog.css.scss b/web/app/assets/stylesheets/client/rsvpDialog.css.scss new file mode 100644 index 000000000..e69de29bb diff --git a/web/app/assets/stylesheets/web/web.css b/web/app/assets/stylesheets/web/web.css index d060ec21b..d8945d48d 100644 --- a/web/app/assets/stylesheets/web/web.css +++ b/web/app/assets/stylesheets/web/web.css @@ -13,6 +13,7 @@ *= require client/invitationDialog *= require client/shareDialog *= require client/hoverBubble +*= require client/rsvpDialog *= require web/main *= require web/footer *= require web/recordings diff --git a/web/app/controllers/api_rsvp_requests_controller.rb b/web/app/controllers/api_rsvp_requests_controller.rb new file mode 100644 index 000000000..167fd4da7 --- /dev/null +++ b/web/app/controllers/api_rsvp_requests_controller.rb @@ -0,0 +1,9 @@ +class ApiRsvpRequestsController < ApiController + + respond_to :json + + def create + + end + +end \ No newline at end of file diff --git a/web/app/controllers/music_sessions_controller.rb b/web/app/controllers/music_sessions_controller.rb index 8e14e995a..9419204d5 100644 --- a/web/app/controllers/music_sessions_controller.rb +++ b/web/app/controllers/music_sessions_controller.rb @@ -7,7 +7,9 @@ class MusicSessionsController < ApplicationController render :layout => "web" end - def show_scheduled_session_info + def session_info + @music_session = MusicSession.find(params[:id]) + render :layout => "web" end end diff --git a/web/app/views/api_rsvp_requests/create.rabl b/web/app/views/api_rsvp_requests/create.rabl new file mode 100644 index 000000000..c06b21ba5 --- /dev/null +++ b/web/app/views/api_rsvp_requests/create.rabl @@ -0,0 +1,3 @@ +object @rsvp + +extends "api_rsvp_requests/show" \ No newline at end of file diff --git a/web/app/views/api_rsvp_requests/index.rabl b/web/app/views/api_rsvp_requests/index.rabl new file mode 100644 index 000000000..396d1d44c --- /dev/null +++ b/web/app/views/api_rsvp_requests/index.rabl @@ -0,0 +1 @@ +collection @rsvp_requests \ No newline at end of file diff --git a/web/app/views/api_rsvp_requests/show.rabl b/web/app/views/api_rsvp_requests/show.rabl new file mode 100644 index 000000000..005215064 --- /dev/null +++ b/web/app/views/api_rsvp_requests/show.rabl @@ -0,0 +1,7 @@ +object @rsvp + +attributes :user_id, :message, :chosen, :canceled, :created_at + +child :rsvp_slot => :rsvp_slot do + attributes :id, :instrument_id, :proficiency_level, :music_session_id, :created_at +end \ No newline at end of file diff --git a/web/app/views/clients/_rsvpCancelDialog.html.haml b/web/app/views/clients/_rsvpCancelDialog.html.haml new file mode 100644 index 000000000..e69de29bb diff --git a/web/app/views/clients/_rsvpReviewDialog.html.haml b/web/app/views/clients/_rsvpReviewDialog.html.haml new file mode 100644 index 000000000..e69de29bb diff --git a/web/app/views/clients/_rsvpSubmitDialog.html.haml b/web/app/views/clients/_rsvpSubmitDialog.html.haml new file mode 100644 index 000000000..e69de29bb diff --git a/web/app/views/music_sessions/session_info.html.erb b/web/app/views/music_sessions/session_info.html.erb new file mode 100644 index 000000000..e69de29bb diff --git a/web/config/routes.rb b/web/config/routes.rb index 8842a6303..a8c06d2a8 100644 --- a/web/config/routes.rb +++ b/web/config/routes.rb @@ -26,7 +26,7 @@ SampleApp::Application.routes.draw do match '/auth/failure', :to => 'sessions#failure' # session / recording landing pages - match '/sessions/:id/details' => 'music_sessions#show_scheduled_session_info', :via => :get, :as => 'music_scheduled_session_detail' + match '/sessions/:id/details' => 'music_sessions#session_info', :via => :get, :as => 'music_scheduled_session_detail' match '/sessions/:id' => 'music_sessions#show', :via => :get, :as => 'music_session_detail' match '/recordings/:id' => 'recordings#show', :via => :get, :as => 'recording_detail' @@ -165,6 +165,12 @@ SampleApp::Application.routes.draw do match '/sessions/:id/tracks/:track_id' => 'api_music_sessions#track_show', :via => :get, :as => 'api_session_track_detail' match '/sessions/:id/tracks/:track_id' => 'api_music_sessions#track_destroy', :via => :delete + # RSVP requests + match '/sessions/:id/rsvp_requests' => 'api_music_sessions#rsvp_requests_index', :via => :get + match '/rsvp_requests' => 'api_rsvp_requests#create', :via => :post + match '/rsvp_requests/:id' => 'api_rsvp_requests#show', :via => :get, :as => 'api_rsvp_request_detail' + match '/rsvp_requests/:id' => 'api_rsvp_requests#destroy', :via => :delete + # music session playback recording state match '/sessions/:id/claimed_recording/:claimed_recording_id/start' => 'api_music_sessions#claimed_recording_start', :via => :post match '/sessions/:id/claimed_recording/:claimed_recording_id/stop' => 'api_music_sessions#claimed_recording_stop', :via => :post