Merge branch 'feature/scheduled_sessions' of https://bitbucket.org/jamkazam/jam-cloud into feature/scheduled_sessions
This commit is contained in:
commit
22f4d0ffc5
|
|
@ -156,4 +156,5 @@ scheduled_sessions.sql
|
|||
notification_scheduled_session.sql
|
||||
music_notation.sql
|
||||
music_session_recurring_mode.sql
|
||||
add_timezone_music_session.sql
|
||||
add_timezone_music_session.sql
|
||||
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
|
||||
);
|
||||
|
|
@ -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_rsvp_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"
|
||||
|
|
|
|||
|
|
@ -2,22 +2,32 @@ 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_rsvp_slots, :class_name => "JamRuby::RsvpRequestRsvpSlot"
|
||||
has_many :rsvp_slots, :class_name => "JamRuby::RsvpSlot", :through => :rsvp_requests_rsvp_slots
|
||||
|
||||
validates :message, length: {maximum: 1000}, no_profanity: true
|
||||
validates :chosen, :inclusion => {:in => [nil, true, false]}
|
||||
# validates :message, length: {maximum: 1000}, no_profanity: true
|
||||
|
||||
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)
|
||||
.joins(
|
||||
%Q{
|
||||
INNER join
|
||||
rsvp_slots rs
|
||||
INNER JOIN
|
||||
rsvp_requests_rsvp_slots rrrs
|
||||
ON
|
||||
rsvp_requests.rsvp_slot_id = rs.id
|
||||
rrrs.rsvp_request_id = rsvp_requests.id
|
||||
INNER JOIN
|
||||
rsvp_slots rs
|
||||
ON rs.id = rrrs.rsvp_slot_id
|
||||
}
|
||||
)
|
||||
.where(
|
||||
|
|
|
|||
|
|
@ -0,0 +1,14 @@
|
|||
module JamRuby
|
||||
class RsvpRequestRsvpSlot < ActiveRecord::Base
|
||||
self.table_name = "rsvp_requests_rsvp_slots"
|
||||
|
||||
self.primary_key = 'id'
|
||||
|
||||
belongs_to :rsvp_request
|
||||
belongs_to :rsvp_slot
|
||||
|
||||
validates :rsvp_request, presence: true
|
||||
validates :rsvp_slot, presence: true
|
||||
validates :chosen, :inclusion => {:in => [nil, true, false]}
|
||||
end
|
||||
end
|
||||
|
|
@ -3,7 +3,8 @@ module JamRuby
|
|||
|
||||
belongs_to :instrument, :class_name => "JamRuby::Instrument"
|
||||
belongs_to :music_session
|
||||
has_many :rsvp_requests, :class_name => "JamRuby::RsvpRequest"
|
||||
has_many :rsvp_requests_rsvp_slots, :class_name => "JamRuby::RsvpRequestRsvpSlot"
|
||||
has_many :rsvp_requests, :class_name => "JamRuby::RsvpRequest", :through => :rsvp_requests_rsvp_slots
|
||||
|
||||
# TODO: validates :proficiency_level
|
||||
end
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -473,9 +473,8 @@ FactoryGirl.define do
|
|||
|
||||
factory :rsvp_request, class: JamRuby::RsvpRequest do
|
||||
association :user, factory: :user
|
||||
association :rsvp_slot, factory: :rsvp_slot
|
||||
sequence(:message) { |n| "I want to join!#{n}" }
|
||||
chosen false
|
||||
# association :rsvp_slot, factory: :rsvp_slot
|
||||
# chosen false
|
||||
canceled false
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -0,0 +1,9 @@
|
|||
class ApiRsvpRequestsController < ApiController
|
||||
|
||||
respond_to :json
|
||||
|
||||
def create
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -0,0 +1,3 @@
|
|||
object @rsvp
|
||||
|
||||
extends "api_rsvp_requests/show"
|
||||
|
|
@ -0,0 +1 @@
|
|||
collection @rsvp_requests
|
||||
|
|
@ -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
|
||||
|
|
@ -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'
|
||||
|
||||
|
|
@ -167,6 +167,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
|
||||
|
|
|
|||
Loading…
Reference in New Issue