From a1f288fe4d89f68806ee64f68635b1e54f488408 Mon Sep 17 00:00:00 2001 From: Bert Owen Date: Thu, 22 May 2014 03:11:50 +0800 Subject: [PATCH] VRFS-1676 fixed --- ruby/lib/jam_ruby/models/music_session.rb | 9 +++++++++ .../api_music_sessions_controller.rb | 6 +++++- web/app/views/api_music_sessions/create.rabl | 2 +- .../views/api_music_sessions/scheduled.rabl | 3 +++ .../{history_show.rabl => show_history.rabl} | 2 +- web/config/routes.rb | 3 ++- web/spec/requests/music_sessions_api_spec.rb | 20 +++++++++++++++++++ 7 files changed, 41 insertions(+), 4 deletions(-) create mode 100644 web/app/views/api_music_sessions/scheduled.rabl rename web/app/views/api_music_sessions/{history_show.rabl => show_history.rabl} (98%) diff --git a/ruby/lib/jam_ruby/models/music_session.rb b/ruby/lib/jam_ruby/models/music_session.rb index b9d6ea35c..af73f8cad 100644 --- a/ruby/lib/jam_ruby/models/music_session.rb +++ b/ruby/lib/jam_ruby/models/music_session.rb @@ -107,6 +107,15 @@ module JamRuby return query end + def self.scheduled user + current_time = Time.now + query = MusicSession.where("music_sessions.user_id = '#{user.id}'") + query = query.where("music_sessions.scheduled_start IS NOT NULL AND music_sessions.scheduled_start < '#{current_time + 12.hours}'") + query = query.order("music_sessions.scheduled_start ASC") + + return query + end + def self.create user, options band = Band.find(options[:band]) unless options[:band].nil? diff --git a/web/app/controllers/api_music_sessions_controller.rb b/web/app/controllers/api_music_sessions_controller.rb index 813035953..58080b591 100644 --- a/web/app/controllers/api_music_sessions_controller.rb +++ b/web/app/controllers/api_music_sessions_controller.rb @@ -60,6 +60,10 @@ class ApiMusicSessionsController < ApiController limit: params[:limit]) end + def scheduled + @music_sessions = MusicSession.scheduled(current_user) + end + def create @music_session = MusicSession.create(current_user, params) @@ -407,7 +411,7 @@ class ApiMusicSessionsController < ApiController end end - def history_show + def show_history @history = MusicSession.find(params[:id]) end diff --git a/web/app/views/api_music_sessions/create.rabl b/web/app/views/api_music_sessions/create.rabl index a699b59e7..14069097c 100644 --- a/web/app/views/api_music_sessions/create.rabl +++ b/web/app/views/api_music_sessions/create.rabl @@ -1,3 +1,3 @@ object @music_session -attributes :id, :name, :description, :musician_access, :approval_required, :fan_access, :fan_chat, :band_id, :language, :timezone, :user_id \ No newline at end of file +extends "api_music_sessions/show_history" \ No newline at end of file diff --git a/web/app/views/api_music_sessions/scheduled.rabl b/web/app/views/api_music_sessions/scheduled.rabl new file mode 100644 index 000000000..d5ca40b3d --- /dev/null +++ b/web/app/views/api_music_sessions/scheduled.rabl @@ -0,0 +1,3 @@ +object @music_sessions + +extends "api_music_sessions/show_history" \ No newline at end of file diff --git a/web/app/views/api_music_sessions/history_show.rabl b/web/app/views/api_music_sessions/show_history.rabl similarity index 98% rename from web/app/views/api_music_sessions/history_show.rabl rename to web/app/views/api_music_sessions/show_history.rabl index 40a5bbc52..e048dd0d4 100644 --- a/web/app/views/api_music_sessions/history_show.rabl +++ b/web/app/views/api_music_sessions/show_history.rabl @@ -17,7 +17,7 @@ if !current_user else attributes :id, :music_session_id, :description, :musician_access, :approval_required, :fan_access, :fan_chat, - :band_id, :user_id, :genre_id, :created_at, :like_count, :comment_count + :band_id, :user_id, :genre_id, :created_at, :like_count, :comment_count, :scheduled_start, :scheduled_duration node :share_url do |history| unless history.share_token.nil? diff --git a/web/config/routes.rb b/web/config/routes.rb index e77b7e6ef..02333647f 100644 --- a/web/config/routes.rb +++ b/web/config/routes.rb @@ -148,6 +148,7 @@ SampleApp::Application.routes.draw do match '/sessions/:id/participants' => 'api_music_sessions#participant_create', :via => :post match '/participants/:id' => 'api_music_sessions#participant_show', :via => :get, :as => 'api_session_participant_detail' match '/participants/:id' => 'api_music_sessions#participant_delete', :via => :delete + match '/sessions/scheduled' => 'api_music_sessions#scheduled', :via => :get match '/sessions/:id' => 'api_music_sessions#show', :via => :get, :as => 'api_session_detail' match '/sessions/:id' => 'api_music_sessions#update', :via => :put match '/sessions' => 'api_music_sessions#index', :via => :get @@ -157,7 +158,7 @@ SampleApp::Application.routes.draw do match '/sessions/:id/perf' => 'api_music_sessions#perf_upload', :via => :put match '/sessions/:id/comments' => 'api_music_sessions#add_comment', :via => :post match '/sessions/:id/likes' => 'api_music_sessions#add_like', :via => :post - match '/sessions/:id/history' => 'api_music_sessions#history_show', :via => :get + match '/sessions/:id/history' => 'api_music_sessions#show_history', :via => :get, :as => 'api_session_history_detail' # music session tracks match '/sessions/:id/tracks' => 'api_music_sessions#track_create', :via => :post diff --git a/web/spec/requests/music_sessions_api_spec.rb b/web/spec/requests/music_sessions_api_spec.rb index 59f522088..a4425add5 100644 --- a/web/spec/requests/music_sessions_api_spec.rb +++ b/web/spec/requests/music_sessions_api_spec.rb @@ -45,5 +45,25 @@ describe "Scheduled Music Session API ", :type => :api do music_session[:language] = defopts[:language] music_session[:timezone] = defopts[:timezone] end + + it "should list scheduled sessions" do + login(user) + + post '/api/sessions.json', defopts.merge({start: Time.now + 3.hours}).to_json, "CONTENT_TYPE" => 'application/json' + last_response.status.should eql(201) + + post '/api/sessions.json', defopts.merge({start: Time.now + 7.hours}).to_json, "CONTENT_TYPE" => 'application/json' + last_response.status.should eql(201) + + post '/api/sessions.json', defopts.merge({start: Time.now + 15.hours}).to_json, "CONTENT_TYPE" => 'application/json' + last_response.status.should eql(201) + + get '/api/sessions/scheduled.json' + last_response.status.should eql(200) + music_sessions = JSON.parse(last_response.body) + + music_sessions.count.should eql(2) + expect(Time.parse(music_sessions[0]["scheduled_start"]).to_i).to be < Time.parse(music_sessions[1]["scheduled_start"]).to_i + end end end \ No newline at end of file