Add /favorites.json endpoint.

This commit is contained in:
evazion
2020-02-24 22:28:08 -06:00
parent 928c7f8a0a
commit 7c71311eef
2 changed files with 25 additions and 1 deletions

View File

@@ -5,7 +5,10 @@ class FavoritesController < ApplicationController
rescue_with Favorite::Error, status: 422
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])
redirect_to posts_path(tags: "ordfav:#{user.name}", format: request.format.symbol)
elsif CurrentUser.is_member?

View File

@@ -3,7 +3,28 @@ class Favorite < ApplicationRecord
belongs_to :post
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 :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:)
Favorite.transaction do