aboutsummaryrefslogtreecommitdiffstats
path: root/app/controllers/users_controller.rb
diff options
context:
space:
mode:
authorKazuki Yamaguchi <k@rhe.jp>2015-12-05 22:58:12 +0900
committerKazuki Yamaguchi <k@rhe.jp>2015-12-05 22:58:12 +0900
commit850c485806e3289993952e8a5207693921e828ba (patch)
treef2ba6501f230f7bca1b614ba2733c0bbb4da86b6 /app/controllers/users_controller.rb
parent8b4e26890936995cc5b7a9ce2ac8d29ec56904d2 (diff)
downloadaclog-850c485806e3289993952e8a5207693921e828ba.tar.gz
split frontend
Diffstat (limited to 'app/controllers/users_controller.rb')
-rw-r--r--app/controllers/users_controller.rb45
1 files changed, 41 insertions, 4 deletions
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index 03a1a05..95fb187 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -1,13 +1,50 @@
class UsersController < ApplicationController
- before_action :load_user
+ before_action :load_user, only: [:favorited_by, :favorited_users]
+ before_action :require_registered!, only: [:favorited_by, :favorited_users]
- def stats
- @sidebars = [:user]
+ def suggest_screen_name
+ users = User.suggest_screen_name(params[:head].to_s).order(:screen_name).limit(10)
+ render_json data: users
+ end
+
+ def stats_compact
+ @user = User.find(screen_name: params[:screen_name])
+ render_json data: @user.stats.to_h
+ end
+
+ def favorited_by
+ data = @user.count_favorited_by
+ render_json data: format_favorited_by(data)
+ end
+
+ def favorited_users
+ data = @user.count_favorited_users
+ render_json data: format_favorited_by(data)
end
private
+ def format_favorited_by(data)
+ tops = data.take(Settings.users.count)
+ cached_users = User.find(tops.map {|k, v| k }).map {|user| [user.id, user] }.to_h
+ all_reactions = data.inject(0) {|sum, (k, v)| sum + v }
+
+ { users_count: data.size,
+ reactions_count: all_reactions,
+ user: @user,
+ users: tops.reverse_each.map { |user_id, count|
+ u = cached_users[user_id]
+ { user_id: user_id,
+ count: count,
+ name: u.name,
+ screen_name: u.screen_name,
+ profile_image_url: u.profile_image_url } } }
+ end
+
def load_user
- authorize! @user = User.find(screen_name: params[:screen_name])
+ @user = authorize! User.find(screen_name: params[:screen_name])
+ end
+
+ def require_registered!
@user.registered? || raise(Aclog::Exceptions::UserNotRegistered, self)
end
end