summaryrefslogtreecommitdiff
path: root/app/models
diff options
context:
space:
mode:
authorPaco Guzman <pacoguzmanp@gmail.com>2016-06-02 15:46:58 +0200
committerPaco Guzman <pacoguzmanp@gmail.com>2016-06-17 19:04:36 +0200
commitf6bfa46daae3a00ca6f74abb6e6eddc9eac96197 (patch)
treee80a1c3cde48387c034dbec51636b8d2c5277873 /app/models
parentfcd9f90641d5ee59cc84d8388b7cc372370ac25a (diff)
downloadgitlab-ce-f6bfa46daae3a00ca6f74abb6e6eddc9eac96197.tar.gz
Cache todo counters (pending/done)18034-cache-todo-counter
- As todos are created/updated inside the TodoService we repopulate the cache just there for both pending/done todos - Todos as mark as done from the TodosController we update cache there too - All the added methods are kept in the User class for cohesion
Diffstat (limited to 'app/models')
-rw-r--r--app/models/user.rb17
1 files changed, 17 insertions, 0 deletions
diff --git a/app/models/user.rb b/app/models/user.rb
index 051745fe252..2e458329cb9 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -827,6 +827,23 @@ class User < ActiveRecord::Base
assigned_open_issues_count(force: true)
end
+ def todos_done_count(force: false)
+ Rails.cache.fetch(['users', id, 'todos_done_count'], force: force) do
+ todos.done.count
+ end
+ end
+
+ def todos_pending_count(force: false)
+ Rails.cache.fetch(['users', id, 'todos_pending_count'], force: force) do
+ todos.pending.count
+ end
+ end
+
+ def update_todos_count_cache
+ todos_done_count(force: true)
+ todos_pending_count(force: true)
+ end
+
private
def projects_union(min_access_level = nil)