eBooru/app/controllers/favorites_controller.rb

54 lines
1.5 KiB
Ruby

# frozen_string_literal: true
class FavoritesController < ApplicationController
before_action :member_only, except: [:index]
before_action :ensure_lockdown_disabled, except: %i[index]
respond_to :html, :json
skip_before_action :api_check
def index
if params[:tags]
redirect_to(posts_path(tags: params[:tags]))
else
user_id = params[:user_id] || CurrentUser.user.id
@user = User.find(user_id)
if @user.hide_favorites?
raise Favorite::HiddenError
end
@post_set = PostSets::Favorites.new(@user, params[:page], limit: params[:limit])
@posts = PostsDecorator.decorate_collection(@post_set.posts)
respond_with(@posts) do |fmt|
fmt.json do
render json: @post_set.api_posts, root: "posts"
end
end
end
end
def create
@post = Post.find(params[:post_id])
FavoriteManager.add!(user: CurrentUser.user, post: @post)
flash.now[:notice] = "You have favorited this post"
respond_with(@post)
rescue Favorite::Error, ActiveRecord::RecordInvalid => x
render_expected_error(422, x.message)
end
def destroy
@post = Post.find(params[:id])
FavoriteManager.remove!(user: CurrentUser.user, post: @post)
flash.now[:notice] = "You have unfavorited this post"
respond_with(@post)
rescue Favorite::Error => x
render_expected_error(422, x.message)
end
def ensure_lockdown_disabled
access_denied if Security::Lockdown.favorites_disabled? && !CurrentUser.is_staff?
end
end