From 95f9788a7722b53164375d0907eaa6dc8cae9132 Mon Sep 17 00:00:00 2001
From: Sam <sam.saffron@gmail.com>
Date: Wed, 7 Jan 2015 13:58:34 +1100
Subject: [PATCH] FEATURE: add ?bookmarked=true for topic lists

---
 app/controllers/list_controller.rb |  1 +
 lib/topic_query.rb                 | 13 +++++++++++++
 2 files changed, 14 insertions(+)

diff --git a/app/controllers/list_controller.rb b/app/controllers/list_controller.rb
index 7d66e4d11..890e2871d 100644
--- a/app/controllers/list_controller.rb
+++ b/app/controllers/list_controller.rb
@@ -260,6 +260,7 @@ class ListController < ApplicationController
       min_posts: params[:min_posts],
       max_posts: params[:max_posts],
       status: params[:status],
+      bookmarked: params[:bookmarked].present?,
       state: params[:state],
       search: params[:search]
     }
diff --git a/lib/topic_query.rb b/lib/topic_query.rb
index 68c109cb2..ccb876927 100644
--- a/lib/topic_query.rb
+++ b/lib/topic_query.rb
@@ -26,6 +26,7 @@ class TopicQuery
                      state
                      search
                      slow_platform
+                     bookmarked
                      ).map(&:to_sym)
 
   # Maps `order` to a columns in `topics`
@@ -310,6 +311,18 @@ class TopicQuery
         end
       end
 
+      if options[:bookmarked] && @user
+        result = result.where('topics.id IN (SELECT pp.topic_id
+                                FROM post_actions pa
+                                JOIN posts pp ON pp.id = pa.post_id
+                                WHERE pa.user_id = :user_id AND
+                                      pa.post_action_type_id = :bookmarked AND
+                                      pa.deleted_at IS NULL
+                             )', user_id: @user.id,
+                                 bookmarked: PostActionType.types[:bookmark]
+                             )
+      end
+
       result = result.where('topics.deleted_at IS NULL') if require_deleted_clause
       result = result.where('topics.posts_count <= ?', options[:max_posts]) if options[:max_posts].present?
       result = result.where('topics.posts_count >= ?', options[:min_posts]) if options[:min_posts].present?