Add /favorites.json endpoint.
This commit is contained in:
@@ -5,7 +5,10 @@ class FavoritesController < ApplicationController
|
|||||||
rescue_with Favorite::Error, status: 422
|
rescue_with Favorite::Error, status: 422
|
||||||
|
|
||||||
def index
|
def index
|
||||||
if params[:user_id].present?
|
if !request.format.html?
|
||||||
|
@favorites = Favorite.visible(CurrentUser.user).paginated_search(params)
|
||||||
|
respond_with(@favorites)
|
||||||
|
elsif params[:user_id].present?
|
||||||
user = User.find(params[:user_id])
|
user = User.find(params[:user_id])
|
||||||
redirect_to posts_path(tags: "ordfav:#{user.name}", format: request.format.symbol)
|
redirect_to posts_path(tags: "ordfav:#{user.name}", format: request.format.symbol)
|
||||||
elsif CurrentUser.is_member?
|
elsif CurrentUser.is_member?
|
||||||
|
|||||||
@@ -3,7 +3,28 @@ class Favorite < ApplicationRecord
|
|||||||
|
|
||||||
belongs_to :post
|
belongs_to :post
|
||||||
belongs_to :user
|
belongs_to :user
|
||||||
|
|
||||||
scope :for_user, ->(user_id) {where("user_id % 100 = #{user_id.to_i % 100} and user_id = #{user_id.to_i}")}
|
scope :for_user, ->(user_id) {where("user_id % 100 = #{user_id.to_i % 100} and user_id = #{user_id.to_i}")}
|
||||||
|
scope :public_favorites, -> { where(user: User.bit_prefs_match(:enable_private_favorites, false)) }
|
||||||
|
|
||||||
|
def self.visible(user)
|
||||||
|
user.is_admin? ? all : for_user(user.id).or(public_favorites)
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.search(params)
|
||||||
|
q = super
|
||||||
|
q = q.search_attributes(params, :post)
|
||||||
|
|
||||||
|
if params[:user_id].present?
|
||||||
|
q = q.for_user(params[:user_id])
|
||||||
|
end
|
||||||
|
|
||||||
|
q.order(post_id: :desc)
|
||||||
|
end
|
||||||
|
|
||||||
|
def self.available_includes
|
||||||
|
[:post, :user]
|
||||||
|
end
|
||||||
|
|
||||||
def self.add(post:, user:)
|
def self.add(post:, user:)
|
||||||
Favorite.transaction do
|
Favorite.transaction do
|
||||||
|
|||||||
Reference in New Issue
Block a user