Commit 2fd437a0 by Robert Raposa Committed by GitHub

Merge pull request #205 from edx/perf/get-thread-without-responses

Add the ability to request a thread without its responses.
parents f051f495 965efede
...@@ -49,7 +49,7 @@ get "#{APIPREFIX}/threads/:thread_id" do |thread_id| ...@@ -49,7 +49,7 @@ get "#{APIPREFIX}/threads/:thread_id" do |thread_id|
else else
resp_limit = nil resp_limit = nil
end end
presenter.to_hash(true, resp_skip, resp_limit, bool_recursive).to_json presenter.to_hash(bool_with_responses, resp_skip, resp_limit, bool_recursive).to_json
end end
put "#{APIPREFIX}/threads/:thread_id" do |thread_id| put "#{APIPREFIX}/threads/:thread_id" do |thread_id|
......
require 'new_relic/agent/method_tracer' require 'new_relic/agent/method_tracer'
helpers do helpers do
def commentable def commentable
@commentable ||= Commentable.find(params[:commentable_id]) @commentable ||= Commentable.find(params[:commentable_id])
end end
...@@ -10,7 +9,7 @@ helpers do ...@@ -10,7 +9,7 @@ helpers do
raise ArgumentError, t(:user_id_is_required) unless @user || params[:user_id] raise ArgumentError, t(:user_id_is_required) unless @user || params[:user_id]
@user ||= User.find_by(external_id: params[:user_id]) @user ||= User.find_by(external_id: params[:user_id])
end end
def thread def thread
@thread ||= CommentThread.find(params[:thread_id]) @thread ||= CommentThread.find(params[:thread_id])
end end
...@@ -56,7 +55,7 @@ helpers do ...@@ -56,7 +55,7 @@ helpers do
obj.save obj.save
obj.reload.to_hash.to_json obj.reload.to_hash.to_json
end end
def un_flag_as_abuse(obj) def un_flag_as_abuse(obj)
raise ArgumentError, t(:user_id_is_required) unless user raise ArgumentError, t(:user_id_is_required) unless user
if params["all"] if params["all"]
...@@ -66,7 +65,7 @@ helpers do ...@@ -66,7 +65,7 @@ helpers do
else else
obj.abuse_flaggers.delete user.id obj.abuse_flaggers.delete user.id
end end
obj.save obj.save
obj.reload.to_hash.to_json obj.reload.to_hash.to_json
end end
...@@ -78,7 +77,6 @@ helpers do ...@@ -78,7 +77,6 @@ helpers do
end end
obj.reload.to_hash.to_json obj.reload.to_hash.to_json
end end
def pin(obj) def pin(obj)
raise ArgumentError, t(:user_id_is_required) unless user raise ArgumentError, t(:user_id_is_required) unless user
...@@ -86,16 +84,14 @@ helpers do ...@@ -86,16 +84,14 @@ helpers do
obj.save obj.save
obj.reload.to_hash.to_json obj.reload.to_hash.to_json
end end
def unpin(obj) def unpin(obj)
raise ArgumentError, t(:user_id_is_required) unless user raise ArgumentError, t(:user_id_is_required) unless user
obj.pinned = nil obj.pinned = nil
obj.save obj.save
obj.reload.to_hash.to_json obj.reload.to_hash.to_json
end end
def value_to_boolean(value) def value_to_boolean(value)
!!(value.to_s =~ /^true$/i) !!(value.to_s =~ /^true$/i)
end end
...@@ -104,6 +100,10 @@ helpers do ...@@ -104,6 +100,10 @@ helpers do
value_to_boolean params["recursive"] value_to_boolean params["recursive"]
end end
def bool_with_responses
value_to_boolean params["with_responses"] || "true"
end
def bool_mark_as_read def bool_mark_as_read
value_to_boolean params["mark_as_read"] value_to_boolean params["mark_as_read"]
end end
...@@ -142,7 +142,6 @@ helpers do ...@@ -142,7 +142,6 @@ helpers do
per_page, per_page,
context=:course context=:course
) )
context_threads = comment_threads.where({:context => context}) context_threads = comment_threads.where({:context => context})
if not group_ids.empty? if not group_ids.empty?
...@@ -158,7 +157,7 @@ helpers do ...@@ -158,7 +157,7 @@ helpers do
comment_ids = Comment.where(:course_id => course_id). comment_ids = Comment.where(:course_id => course_id).
where(:abuse_flaggers.ne => [], :abuse_flaggers.exists => true). where(:abuse_flaggers.ne => [], :abuse_flaggers.exists => true).
collect{|c| c.comment_thread_id}.uniq collect{|c| c.comment_thread_id}.uniq
thread_ids = comment_threads.where(:abuse_flaggers.ne => [], :abuse_flaggers.exists => true). thread_ids = comment_threads.where(:abuse_flaggers.ne => [], :abuse_flaggers.exists => true).
collect{|c| c.id} collect{|c| c.id}
...@@ -171,7 +170,7 @@ helpers do ...@@ -171,7 +170,7 @@ helpers do
endorsed_thread_ids = Comment.where(:course_id => course_id). endorsed_thread_ids = Comment.where(:course_id => course_id).
where(:parent_id.exists => false, :endorsed => true). where(:parent_id.exists => false, :endorsed => true).
collect{|c| c.comment_thread_id}.uniq collect{|c| c.comment_thread_id}.uniq
comment_threads = comment_threads.where({"thread_type" => :question}).nin({"_id" => endorsed_thread_ids}) comment_threads = comment_threads.where({"thread_type" => :question}).nin({"_id" => endorsed_thread_ids})
end end
end end
...@@ -228,7 +227,7 @@ helpers do ...@@ -228,7 +227,7 @@ helpers do
page = [1, page].max page = [1, page].max
threads = comment_threads.paginate(:page => page, :per_page => per_page).to_a threads = comment_threads.paginate(:page => page, :per_page => per_page).to_a
end end
if threads.length == 0 if threads.length == 0
collection = [] collection = []
else else
...@@ -328,11 +327,11 @@ helpers do ...@@ -328,11 +327,11 @@ helpers do
current_thread = thread_map[c.comment_thread_id] current_thread = thread_map[c.comment_thread_id]
#do not include threads or comments who have current or historical abuse flags #do not include threads or comments who have current or historical abuse flags
if current_thread.abuse_flaggers.to_a.empty? and if current_thread.abuse_flaggers.to_a.empty? and
current_thread.historical_abuse_flaggers.to_a.empty? and current_thread.historical_abuse_flaggers.to_a.empty? and
c.abuse_flaggers.to_a.empty? and c.abuse_flaggers.to_a.empty? and
c.historical_abuse_flaggers.to_a.empty? c.historical_abuse_flaggers.to_a.empty?
user_ids = subscriptions_map[c.comment_thread_id.to_s] user_ids = subscriptions_map[c.comment_thread_id.to_s]
user_ids.each do |u| user_ids.each do |u|
if not notification_map.keys.include? u if not notification_map.keys.include? u
...@@ -365,7 +364,6 @@ helpers do ...@@ -365,7 +364,6 @@ helpers do
end end
notification_map.to_json notification_map.to_json
end end
def filter_blocked_content body def filter_blocked_content body
...@@ -382,7 +380,7 @@ helpers do ...@@ -382,7 +380,7 @@ helpers do
error 503, [msg].to_json error 503, [msg].to_json
end end
end end
include ::NewRelic::Agent::MethodTracer include ::NewRelic::Agent::MethodTracer
add_method_tracer :user add_method_tracer :user
add_method_tracer :thread add_method_tracer :thread
...@@ -390,5 +388,4 @@ helpers do ...@@ -390,5 +388,4 @@ helpers do
add_method_tracer :flag_as_abuse add_method_tracer :flag_as_abuse
add_method_tracer :un_flag_as_abuse add_method_tracer :un_flag_as_abuse
add_method_tracer :handle_threads_query add_method_tracer :handle_threads_query
end end
...@@ -23,7 +23,7 @@ class ThreadPresenter ...@@ -23,7 +23,7 @@ class ThreadPresenter
@is_endorsed = is_endorsed @is_endorsed = is_endorsed
end end
def to_hash with_responses=false, resp_skip=0, resp_limit=nil, recursive=true def to_hash(with_responses=false, resp_skip=0, resp_limit=nil, recursive=true)
raise ArgumentError unless resp_skip >= 0 raise ArgumentError unless resp_skip >= 0
raise ArgumentError unless resp_limit.nil? or resp_limit >= 1 raise ArgumentError unless resp_limit.nil? or resp_limit >= 1
h = @thread.to_hash h = @thread.to_hash
......
...@@ -513,6 +513,18 @@ describe "app" do ...@@ -513,6 +513,18 @@ describe "app" do
check_thread_result_json(nil, thread, parsed) check_thread_result_json(nil, thread, parsed)
end end
context 'when requesting the thread for informational purposes' do
subject do
get "/api/v1/threads/#{thread.id}", with_responses: false # we're asking for no responses here.
end
it 'should have no children' do
expect(subject).to be_ok
parsed = parse(subject.body)
expect(parsed).not_to include('children')
end
end
context 'when marking as read' do context 'when marking as read' do
subject do subject do
get "/api/v1/threads/#{thread.id}", {:user_id => thread.author.id, :mark_as_read => true} get "/api/v1/threads/#{thread.id}", {:user_id => thread.author.id, :mark_as_read => true}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment