about summary refs log tree commit diff
path: root/app/controllers
diff options
context:
space:
mode:
Diffstat (limited to 'app/controllers')
-rw-r--r--app/controllers/api/v1/notifications_controller.rb24
-rw-r--r--app/controllers/api_controller.rb4
-rw-r--r--app/controllers/application_controller.rb2
3 files changed, 26 insertions, 4 deletions
diff --git a/app/controllers/api/v1/notifications_controller.rb b/app/controllers/api/v1/notifications_controller.rb
index c76189e87..d74b99a86 100644
--- a/app/controllers/api/v1/notifications_controller.rb
+++ b/app/controllers/api/v1/notifications_controller.rb
@@ -7,7 +7,8 @@ class Api::V1::NotificationsController < ApiController
   respond_to :json
 
   def index
-    @notifications = Notification.where(account: current_account).with_includes.paginate_by_max_id(20, params[:max_id], params[:since_id])
+    @notifications = Notification.where(account: current_account).paginate_by_max_id(20, params[:max_id], params[:since_id])
+    @notifications = cache(@notifications)
     statuses       = @notifications.select { |n| !n.target_status.nil? }.map(&:target_status)
 
     set_maps(statuses)
@@ -19,4 +20,25 @@ class Api::V1::NotificationsController < ApiController
 
     set_pagination_headers(next_path, prev_path)
   end
+
+  private
+
+  def cache(raw)
+    uncached_ids           = []
+    cached_keys_with_value = Rails.cache.read_multi(*raw.map(&:cache_key))
+
+    raw.each do |notification|
+      uncached_ids << notification.id unless cached_keys_with_value.key?(notification.cache_key)
+    end
+
+    unless uncached_ids.empty?
+      uncached = Notification.where(id: uncached_ids).with_includes.map { |n| [n.id, n] }.to_h
+
+      uncached.values.each do |notification|
+        Rails.cache.write(notification.cache_key, notification)
+      end
+    end
+
+    raw.map { |notification| cached_keys_with_value[notification.cache_key] || uncached[notification.id] }
+  end
 end
diff --git a/app/controllers/api_controller.rb b/app/controllers/api_controller.rb
index a008f4c1b..a3a2a3275 100644
--- a/app/controllers/api_controller.rb
+++ b/app/controllers/api_controller.rb
@@ -59,11 +59,11 @@ class ApiController < ApplicationController
   end
 
   def current_resource_owner
-    @user ||= User.find(doorkeeper_token.resource_owner_id) if doorkeeper_token
+    @current_user ||= User.find(doorkeeper_token.resource_owner_id) if doorkeeper_token
   end
 
   def current_user
-    @user ||= super || current_resource_owner
+    super || current_resource_owner
   rescue ActiveRecord::RecordNotFound
     nil
   end
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 07526d46e..effb4ed78 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -51,6 +51,6 @@ class ApplicationController < ActionController::Base
   end
 
   def current_account
-    @account ||= current_user.try(:account)
+    @current_account ||= current_user.try(:account)
   end
 end