Implement unpinning answers
This commit is contained in:
parent
b196909b79
commit
410d9b5d8e
|
@ -28,4 +28,14 @@ class AnswerController < ApplicationController
|
||||||
format.turbo_stream { render "pin", locals: { answer: } }
|
format.turbo_stream { render "pin", locals: { answer: } }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def unpin
|
||||||
|
answer = Answer.includes(:user).find(params[:id])
|
||||||
|
UseCase::Answer::Unpin.call(user: current_user, answer:)
|
||||||
|
|
||||||
|
respond_to do |format|
|
||||||
|
format.html { redirect_to(user_path(username: current_user.screen_name)) }
|
||||||
|
format.turbo_stream { render "pin", locals: { answer: } }
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
- if answer.pinned?
|
- if answer.pinned?
|
||||||
= button_to pin_answer_path(id: answer.id),
|
= button_to unpin_answer_path(id: answer.id),
|
||||||
class: "dropdown-item",
|
class: "dropdown-item",
|
||||||
method: :delete,
|
method: :delete,
|
||||||
form: { id: "ab-pin-#{answer.id}", data: { turbo_stream: true } } do
|
form: { id: "ab-pin-#{answer.id}", data: { turbo_stream: true } } do
|
||||||
|
|
|
@ -147,6 +147,7 @@ Rails.application.routes.draw do
|
||||||
get "/@:username", to: "user#show", as: :user
|
get "/@:username", to: "user#show", as: :user
|
||||||
get "/@:username/a/:id", to: "answer#show", as: :answer
|
get "/@:username/a/:id", to: "answer#show", as: :answer
|
||||||
post "/@:username/a/:id/pin", to: "answer#pin", as: :pin_answer
|
post "/@:username/a/:id/pin", to: "answer#pin", as: :pin_answer
|
||||||
|
delete "/@:username/a/:id/pin", to: "answer#unpin", as: :unpin_answer
|
||||||
get "/@:username/q/:id", to: "question#show", as: :question
|
get "/@:username/q/:id", to: "question#show", as: :question
|
||||||
get "/@:username/followers", to: "user#followers", as: :show_user_followers
|
get "/@:username/followers", to: "user#followers", as: :show_user_followers
|
||||||
get "/@:username/followings", to: "user#followings", as: :show_user_followings
|
get "/@:username/followings", to: "user#followings", as: :show_user_followings
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
module UseCase
|
||||||
|
module Answer
|
||||||
|
class Unpin < UseCase::Base
|
||||||
|
option :user, type: Types.Instance(::User)
|
||||||
|
option :answer, type: Types.Instance(::Answer)
|
||||||
|
|
||||||
|
def call
|
||||||
|
check_ownership!
|
||||||
|
check_pinned!
|
||||||
|
|
||||||
|
answer.pinned_at = nil
|
||||||
|
answer.save!
|
||||||
|
|
||||||
|
{
|
||||||
|
status: 200,
|
||||||
|
resource: nil
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def check_ownership!
|
||||||
|
raise ::Errors::NotAuthorized unless answer.user == user
|
||||||
|
end
|
||||||
|
|
||||||
|
def check_pinned!
|
||||||
|
raise ::Errors::BadRequest if answer.pinned_at.nil?
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue