mirror of
https://github.com/Growstuff/growstuff.git
synced 2025-12-24 01:57:46 -05:00
73 lines
1.7 KiB
Ruby
73 lines
1.7 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
class LikesController < ApplicationController
|
|
before_action :authenticate_member!
|
|
respond_to :html, :json
|
|
|
|
def create
|
|
@like = Like.new(
|
|
member: current_member,
|
|
likeable_type: params[:type],
|
|
likeable_id: params[:id]
|
|
)
|
|
if @like.likeable && @like.save
|
|
@like.likeable.reindex(refresh: true)
|
|
success(@like, liked_by_member: true, status_code: :created)
|
|
else
|
|
failed(@like, message: 'Unable to like')
|
|
end
|
|
end
|
|
|
|
def destroy
|
|
@like = Like.find_by(
|
|
likeable_type: params[:type],
|
|
likeable_id: params[:id],
|
|
member: current_member
|
|
)
|
|
|
|
if @like&.destroy
|
|
@like.likeable.reindex(refresh: true)
|
|
success(@like, liked_by_member: false, status_code: :ok)
|
|
else
|
|
failed(@like, message: 'Unable to unlike')
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def render_json(like, liked_by_member: true)
|
|
{
|
|
id: like.likeable.id,
|
|
like_count: like.likeable.likes.count,
|
|
liked_by_member:,
|
|
description: ActionController::Base.helpers.pluralize(like.likeable.likes.count, "like")
|
|
}
|
|
end
|
|
|
|
def success(like, liked_by_member: nil, status_code: nil)
|
|
respond_to do |format|
|
|
format.html { redirect_to like.likeable }
|
|
format.json do
|
|
render(json: render_json(
|
|
like,
|
|
liked_by_member:
|
|
), status: status_code)
|
|
end
|
|
end
|
|
end
|
|
|
|
def failed(like, message)
|
|
respond_to do |format|
|
|
format.json { render(json: { error: message }, status: :forbidden) }
|
|
format.html do
|
|
flash[:error] = message
|
|
if like&.likeable
|
|
redirect_to like.likeable
|
|
else
|
|
redirect_to root_path
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|