PERF: Paginate public polls.

This commit is contained in:
Guo Xiang Tan
2016-06-09 21:33:17 +08:00
parent e66c51fd85
commit a36203ff78
15 changed files with 102 additions and 91 deletions

View File

@ -185,7 +185,7 @@ after_initialize do
class DiscoursePoll::PollsController < ::ApplicationController
requires_plugin PLUGIN_NAME
before_filter :ensure_logged_in
before_filter :ensure_logged_in, except: [:voters]
def vote
post_id = params.require(:post_id)
@ -214,11 +214,22 @@ after_initialize do
render_json_error e.message
end
end
def voters
user_ids = params.require(:user_ids)
users = User.where(id: user_ids).map do |user|
UserNameSerializer.new(user).serializable_hash
end
render json: { users: users }
end
end
DiscoursePoll::Engine.routes.draw do
put "/vote" => "polls#vote"
put "/toggle_status" => "polls#toggle_status"
get "/voters" => 'polls#voters'
end
Discourse::Application.routes.append do
@ -299,26 +310,4 @@ after_initialize do
return unless post_custom_fields[DiscoursePoll::VOTES_CUSTOM_FIELD].present?
post_custom_fields[DiscoursePoll::VOTES_CUSTOM_FIELD].has_key?("#{scope.user.id}")
end
add_to_serializer(:post, :polls_voters) do
voters = {}
user_ids = post_custom_fields[DiscoursePoll::VOTES_CUSTOM_FIELD].keys
User.where(id: user_ids).map do |user|
voters[user.id] = UserNameSerializer.new(user).serializable_hash
end
voters
end
add_to_serializer(:post, :include_polls_voters?) do
return unless post_custom_fields.present?
return unless post_custom_fields[DiscoursePoll::POLLS_CUSTOM_FIELD].present?
return unless post_custom_fields[DiscoursePoll::VOTES_CUSTOM_FIELD].present?
post_custom_fields[DiscoursePoll::POLLS_CUSTOM_FIELD].any? do |_, value|
value["public"] == "true"
end
end
end